*
* @author Roland Haeder <webmaster@ship-simu.org>
* @version 0.0.0
- * @copyright Copyright(c) 2007, 2008 Roland Haeder, this is free software
+ * @copyright Copyright (c) 2007, 2008 Roland Haeder, this is free software
* @license GNU GPL 3.0 or any newer version
* @link http://www.ship-simu.org
*
*/
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
protected function __construct () {
// Call parent constructor
parent::__construct(__CLASS__);
-
- // Set part description
- $this->setObjectDescription("A user authorization filter");
-
- // Create unique ID number
- $this->generateUniqueId();
}
/**
* @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
+ * @throws ClassNotFoundException If the user (guest/member) class was not found
*/
public function execute (Requestable $requestInstance, Responseable $responseInstance) {
// Then get an auth instance for checking and updating the auth cookies
// Stop here
throw new UserAuthorizationException($this, self::EXCEPTION_AUTH_DATA_INVALID);
- }
-
- // Destroy safely the auth instance
- unset($authInstance);
+ } // END - if
+
+ // Regular user account
+ $className = $this->getConfigInstance()->readConfig('user_class');
+ $methodName = 'createMemberByUserName';
+
+ // Now, try to get a user or guest instance
+ if ($authLogin == $this->getConfigInstance()->readConfig('guest_login_user')) {
+ // Set class
+ $className = $this->getConfigInstance()->readConfig('guest_class');
+ $methodName = 'createGuestByUserName';
+ } // END - if
+
+ // Does the guest class exist?
+ if (!class_exists($className)) {
+ // Then abort here
+ throw new ClassNotFoundException (array($this, $className), self::EXCEPTION_CLASS_NOT_FOUND);
+ } // END - if
+
+ // Now try the dynamic login
+ $userInstance = call_user_func_array(array($className, $methodName), array($authLogin));
+
+ // Is the password correct?
+ if ($userInstance->getPasswordHash() !== $authHash) {
+ // Mismatching password
+ throw new UserPasswordMismatchException(array($this, $userInstance), BaseUser::EXCEPTION_USER_PASS_MISMATCH);
+ } // END - if
+
+ // Remember auth and user instances in registry
+ Registry::getRegistry()->addInstance('auth', $authInstance);
+ Registry::getRegistry()->addInstance('user', $userInstance);
}
}