Piotr Labudda 8 лет назад
Родитель
Сommit
e8a790394c
1 измененных файлов с 31 добавлено и 8 удалено
  1. 31 8
      SE/se-lib/User.php

+ 31 - 8
SE/se-lib/User.php

@@ -385,6 +385,13 @@ class User {
 
 		if ($ldap != null && $ldap->isConnected()) {
 			$user = self::loginByLDAP($login, $pass);
+
+			if ($user) { // user logged in by ldap - update password hash in db
+				DB::getPDO()->update('ADMIN_USERS', 'ID', $user->ID, [
+					'ADM_PASSWD_AES' => hash('sha512', $pass), // Mysql: SHA2('{$pass}', 512)
+				]);
+			}
+
 		} else {
 			$user = self::loginByDB($login, $pass);
 		}
@@ -490,13 +497,14 @@ class User {
 		$user->ADM_NAME = $ldapUser['cn'];
 		$user->OTHER_INFO = $ldapUser['mail'];
 
-		$sqlLogin = DB::getPDO()->quote($user->ADM_ACCOUNT, PDO::PARAM_STR);
 		$rawUser = DB::getPDO()->fetchFirst("
 			select u.*
 			from ADMIN_USERS u
-			where u.ADM_ACCOUNT = {$sqlLogin}
+			where u.ADM_ACCOUNT = :login
 				and u.A_STATUS in('WAITING', 'NORMAL')
-		");
+		", [
+			':login' => $user->ADM_ACCOUNT,
+		]);
 		if (!$rawUser) throw new Exception("Wystąpiły błędy podczas próby logowania. Brak użytkownika w bazie danych.");
 		$user->ID = $rawUser['ID'];
 		$user->ADM_TECH_WORKER = $rawUser['ADM_TECH_WORKER'];
@@ -513,16 +521,31 @@ class User {
 	}
 
 	public static function loginByDB($login, $pass) {
-		$sqlLogin = DB::getPDO()->quote($login, PDO::PARAM_STR);
-		$sqlPass = DB::getPDO()->quote($pass, PDO::PARAM_STR);
 		$rawUser = DB::getPDO()->fetchFirst("
 			select u.*
 			from ADMIN_USERS u
-			where u.ADM_ACCOUNT = {$sqlLogin}
-				and ( u.ADM_PASSWD = {$sqlPass} or u.ADM_PASSWD = md5({$sqlPass}) )
+			where u.ADM_ACCOUNT = :login
+				and u.ADM_PASSWD_AES = :pass_hash
 				and u.A_STATUS in('WAITING', 'NORMAL')
-		");
+		", [
+			':login' => $login,
+			':pass_hash' => hash('sha512', $pass),
+		]);
+		if (!$rawUser) { // TODO: error log - change password for user
+			error_log("TODO: update password hash for user '{$login}'");
+			$rawUser = DB::getPDO()->fetchFirst("
+				select u.*
+				from ADMIN_USERS u
+				where u.ADM_ACCOUNT = :login
+					and ( u.ADM_PASSWD = :pass or u.ADM_PASSWD = md5( :pass ) )
+					and u.A_STATUS in('WAITING', 'NORMAL')
+			", [
+				':login' => $login,
+				':pass' => $pass,
+			]);
+		}
 		if (!$rawUser) throw new Exception("Proszę podać poprawny login i hasło!");
+		$user = new stdClass();
 		$user->ID = $rawUser['ID'];
 		$user->ADM_TECH_WORKER = $rawUser['ADM_TECH_WORKER'];
 		$user->ADM_COMPANY = $rawUser['ADM_COMPANY'];