Преглед изворни кода

User: fix error msgs at login - use Exceptions

Piotr Labudda пре 10 година
родитељ
комит
bc80a4f56a
2 измењених фајлова са 52 додато и 24 уклоњено
  1. 42 22
      SE/se-lib/User.php
  2. 10 2
      SE/se-lib/tmpl/logout.php

+ 42 - 22
SE/se-lib/User.php

@@ -198,7 +198,21 @@ class User {
 					if (empty($req_ADM_ACCOUNT) || empty($req_ADM_PASSWD)) {
 						$data['errors'][] = "Proszę podać poprawny login i hasło!";
 					} else {
-						User::login($req_ADM_ACCOUNT, $req_ADM_PASSWD, $data['errors']);
+						try {
+							User::login($req_ADM_ACCOUNT, $req_ADM_PASSWD);
+						} catch (Exception $e) {
+							$data['errors'][] = $e->getMessage();
+
+							session_destroy();
+							unset($_SESSION['AUTHORIZE_USER']);
+							unset($_SESSION['ADM_ACCOUNT']);
+
+							Lib::loadClass('SE_Layout');
+							SE_Layout::gora();
+							SE_Layout::loadTemplate('logout', $data);
+							SE_Layout::dol();
+							exit;
+						}
 					}
 				}
 				break;
@@ -220,9 +234,12 @@ class User {
 
 			case 'PERMS_RELOAD':
 				if (User::logged()) {
-					User::reloadAcl();
+					try {
+						User::reloadAcl();
+					} catch (Exception $e) {
+						$data['errors'][] = $e->getMessage();
+					}
 
-					$data = array();
 					SE_Layout::gora();
 					SE_Layout::menu();
 					SE_Layout::loadTemplate('defaultPage', $data);
@@ -266,7 +283,11 @@ class User {
 						if (!$anonim) {
 							$data['errors'][] = "Konto gościa nie istnieje!";
 						} else {
-							User::login($anonim->ADM_ACCOUNT, $anonim->ADM_PASSWD, $data['errors']);
+							try {
+								User::login($anonim->ADM_ACCOUNT, $anonim->ADM_PASSWD);
+							} catch (Exception $e) {
+								$data['errors'][] = $e->getMessage();
+							}
 						}
 					}
 				}
@@ -318,14 +339,14 @@ class User {
 		return false;
 	}
 
-	public static function login($login, $pass, &$errors) {
+	public static function login($login, $pass) {
 		Lib::loadClass('LDAP');
 		$ldap = LDAP::getInstance();
 
 		if ($ldap != null && $ldap->isConnected()) {
-			$user = self::loginByLDAP($login, $pass, $errors);
+			$user = self::loginByLDAP($login, $pass);
 		} else {
-			$user = self::loginByDB($login, $pass, $errors);
+			$user = self::loginByDB($login, $pass);
 		}
 		if ($user) {
 			$_SESSION['ADM_ID'] = $user->ID;
@@ -358,7 +379,7 @@ class User {
 		return false;
 	}
 
-	public static function loginByLDAP($login, $pass, &$errors) {
+	public static function loginByLDAP($login, $pass) {
 		$ldapUser = array();
 
 		$DBG = false;
@@ -367,8 +388,7 @@ class User {
 		$ldap = LDAP::getInstance();
 
 		if (!$ldap->isConnected()) {
-			$errors[] = 'Error: Could not connect to LDAP server!';
-			return false;
+			throw new Exception("Wystąpiły błędy podczas połączenia do bazy LDAP. Spróbuj ponownie za chwilę.");
 		}
 
 		$filter = (false !== strpos($login, '@'))? "(mail={$login})" : "(uid={$login})";
@@ -388,8 +408,7 @@ class User {
 				$val = $ldap->get_values($entry, 'cn');
 				$ldapUser['cn'] = $val[0];
 			} else {
-				$errors[] = 'Login nie istnieje';
-				return false;
+				throw new Exception("Login nie istnieje");
 			}
 			if($DBG){// test
 				echo'<pre style="overflow:auto;border:1px solid green;">';
@@ -415,16 +434,14 @@ class User {
 		}
 
 		if (!$ldapUser['user_dn']) {
-			$errors[] = 'Proszę podać poprawny login i hasło!';
-			return false;
+			throw new Exception("Proszę podać poprawny login i hasło!");
 		}
 
 		if($DBG){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">LDAP user (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($ldapUser);echo'</pre>';}
 		if($DBG){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">ldap_bind (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r(array('ldaprdn'=>$ldapUser['user_dn'], 'pass'=>'***'));echo'</pre>';}
 		$ldapbind = $ldap->bind($ldapUser['user_dn'], $pass, $errorMsg);
 		if (!$ldapbind) {
-			$errors[] = 'Error: LDAP authorization failed!' . '<p>' . $errorMsg . '</p>';
-			return false;
+			throw new Exception("Wystąpiły błędy podczas próby logowania. {$errorMsg}");
 		}
 
 		$user = new stdClass();
@@ -445,12 +462,11 @@ class User {
 		//	LIMIT 0, 1;
 		$res = $db->query($sql);
 		if (!$res) {
-			die("Error SQL login!");
+			throw new Exception("Wystąpiły błędy podczas próby logowania. Błąd bazy danych.");
 		}
 		$num_rows = $db->num_rows($res);
 		if ($num_rows == 0) {
-			$errors[] = 'Error: brak uzytkownika w bazie danych!';
-			return false;
+			throw new Exception("Wystąpiły błędy podczas próby logowania. Brak użytkownika w bazie danych.");
 		}
 		else if ($num_rows == 1) {
 			if ($r = $db->fetch($res)) {
@@ -471,7 +487,7 @@ class User {
 		return $user;
 	}
 
-	public static function loginByDB($login, $pass, &$errors) {
+	public static function loginByDB($login, $pass) {
 		$db = DB::getDB();
 		$login = $db->_($login);
 		$pass = $db->_($pass);
@@ -485,11 +501,11 @@ class User {
 		";
 		$res = $db->query($sql);
 		if (!$res) {
-			die("Error SQL login!");
+			throw new Exception("Wystąpiły błędy podczas próby logowania. Błąd bazy danych.");
 		}
 		$num_rows = $db->num_rows($res);
 		if ($num_rows == 0) {
-			$errors[] =  "Podales zlego uzytkownika lub/i haslo()";
+			throw new Exception("Proszę podać poprawny login i hasło!");
 		}
 		else if ($num_rows == 1) {
 			if ($r = $db->fetch($res)) {
@@ -652,6 +668,10 @@ class User {
 			return false;
 		}
 		$tblAcl = $userAcl->getTableAcl($zasobID);
+		if (empty($tblAcl)) {
+			echo "Brak dostępu do tabeli nr {$zasobID} '{$tableName}'"; return;
+			//throw new Exception("Brak dostępu do tabeli nr {$zasobID} '{$tableName}'");
+		}
 		$tblAcl->init();
 		return $tblAcl->hasEditPerms();
 	}

+ 10 - 2
SE/se-lib/tmpl/logout.php

@@ -6,8 +6,16 @@
 		<img src="./icon/logo-procesy.jpg">
 	</div>
 
-	<div class="alert alert-success" style="width:574px; margin:0 auto;">
-		Zostałeś wylogowany - <a href="index.php"> zaloguj się </a>
+	<div class="container" style="max-width:574px">
+		<?php if (!empty($errors)) : ?>
+			<?php foreach ($errors as $errMsg) : ?>
+				<div class="alert alert-danger"><?php echo $errMsg; ?></div>
+			<?php endforeach; ?>
+		<?php endif; ?>
+
+		<div class="alert alert-success">
+			Zostałeś wylogowany - <a href="index.php"> zaloguj się </a>
+		</div>
 	</div>
 
 </div>