findByLogin($login); } public function checkForUsername(string $login) { return !User::finder()->count('login = ?', $login); } public function registerUser(string $login, string $password, bool $admin) { $transaction = $this->beginTransaction(); try { $newUser = new User(); $newUser->Login = $login; $newUser->Password = $this->generatePassword($password); $newUser->IsAdmin = $admin; $newUser->save(); $this->raiseEvent('UserRegistered', $newUser); $transaction->commit(); return $newUser; } catch (Exception $e) { $transaction->rollback(); throw $e; } } public function changePassword(DbUser $user, string $pass) { if (!$user->IsGuest) { $user->DbRecord->Password = $this->generatePassword($pass); $user->DbRecord->save(); } } public function verifyUserPassword(string $password, DbUser $user) { $dbPassword = $user->IsGuest ? '' : $user->DbRecord->Password; return $this->verifyPassword($password, $dbPassword); } public function generatePassword(string $password) { return password_hash($password, PASSWORD_DEFAULT); } public function verifyPassword(string $password, string $dbPassword) { return password_verify($password, $dbPassword); } public function setTimezonePreference(DbUser $user, string $timezone) { if ($user->IsGuest) { throw new TInvalidDataException( 'Timezone preference change impossible for guest user' ); } $user->DbRecord->Timezone = $timezone; $user->DbRecord->save(); } public function getTimezonePreference(DbUser $user) { if (!$user->IsGuest) { try { return new TimezoneDTO($user->DbRecord->Timezone); } catch(Exception $e) {} } return new TimezoneDTO(date_default_timezone_get()); } } ?>