X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=inc%2Fclasses%2Fmain%2Ffilter%2Fauth%2Fclass_UserAuthFilter.php;h=c346615239a8d0ff20f23caa832a02d2d0d85b58;hb=05f1e91cc36a525f2a281a6ed374cf3d5eb7cf81;hp=5754bf1d6643b6841d29a833b4e898d4999f947a;hpb=b848cab53db89342f0a854a00be91cadbcff2967;p=shipsimu.git diff --git a/inc/classes/main/filter/auth/class_UserAuthFilter.php b/inc/classes/main/filter/auth/class_UserAuthFilter.php index 5754bf1..c346615 100644 --- a/inc/classes/main/filter/auth/class_UserAuthFilter.php +++ b/inc/classes/main/filter/auth/class_UserAuthFilter.php @@ -23,7 +23,7 @@ */ class UserAuthFilter extends BaseFilter implements Filterable { // Exception constants - const EXCEPTION_AUTH_DATA_INVALID = 0x0a0; + const EXCEPTION_AUTH_DATA_INVALID = 0x1b0; /** * The login method we shall choose @@ -78,6 +78,7 @@ class UserAuthFilter extends BaseFilter implements Filterable { * @param $responseInstance An instance of a class with an Responseable interface * @return void * @throws UserAuthorizationException If the auth login was not found or if it was invalid + * @throws UserPasswordMismatchException If the supplied password hash does not match */ public function execute (Requestable $requestInstance, Responseable $responseInstance) { // Then get an auth instance for checking and updating the auth cookies @@ -103,10 +104,26 @@ class UserAuthFilter extends BaseFilter implements Filterable { // Stop here throw new UserAuthorizationException($this, self::EXCEPTION_AUTH_DATA_INVALID); + } // END - if + + // Now, try to get a user or guest instance + if ($authLogin == $this->getConfigInstance()->readConfig('guest_login_username')) { + // Guest login! + $userInstance = Guest::createGuestByUserName($authLogin); + } else { + // Regular user account + $userInstance = User::createUserByUserName($authLogin); } - // Destroy safely the auth instance - unset($authInstance); + // Is the password correct? + if ($userInstance->getPasswordHash() !== $authHash) { + // Mismatching password + throw new UserPasswordMismatchException(array($this, $userInstance), User::EXCEPTION_USER_PASS_MISMATCH); + } // END - if + + // Remember auth and user instances in registry + Registry::getRegistry()->addInstance('auth', $authInstance); + Registry::getRegistry()->addInstance('user', $userInstance); } }