setUsername( $params['username']); } if (array_key_exists('password', $params)) { $this->setPassword( $params['password']); } if (array_key_exists('email', $params)) { $this->setEmail( $params['email']); } $this->setId($id) ->setAllowedRoles($allowedRoles) ->setDeniedRoles($deniedRoles); } /** * * get id * * @return int */ public function getId() { return $this->_id; } /** * * set id * * @param int $id * * @return $this; */ public function setId($id) { $this->_id = $id; return $this; } /** * * get username * * @return string */ public function getUsername() { return $this->_username; } /** * * set username * * @param string $username * * @return $this */ public function setUsername($username) { $this->_username = $username; return $this; } /** * * get password * * @return string */ public function getPassword() { return $this->_password; } /** * * set password * * @param string $password * * @return $this */ public function setPassword($password) { $this->_password = $password; return $this; } /** * * get email * * @return string */ public function getEmail() { return $this->_email; } /** * * set email * * @param string $email * * @return $this */ public function setEmail($email) { $this->_email = $email; return $this; } /** * * get allowed roles * * @return array */ public function getAllowedRoles() { return $this->_allowedRoles; } /** * * set allowed roles * * @param array $allowedRoles * * @return $this */ public function setAllowedRoles($allowedRoles) { $this->_allowedRoles = $allowedRoles; return $this; } /** * * get denied roles * * @return array */ public function getDeniedRoles() { return $this->_deniedRoles; } /** * * set denied roles * * @param array $deniedRoles * * @return $this */ public function setDeniedRoles($deniedRoles) { $this->_deniedRoles = $deniedRoles; return $this; } /** * get check blocked user * * @return boolean */ public function isCheckBlockedUser() { return $this->_checkBlockedUser; } /** * * set check blocked user * * @param boolean $checkBlockedUser * * @return $this */ public function setCheckBlockedUser($checkBlockedUser) { $this->_checkBlockedUser = $checkBlockedUser; return $this; } /** * * set translate adapter * * @param \Cube\Translate\Adapter\AbstractAdapter $translate * * @return $this */ public function setTranslate(TranslateAdapter $translate) { $this->_translate = $translate; return $this; } /** * * get translate adapter * * @return \Cube\Translate\Adapter\AbstractAdapter */ public function getTranslate() { if (!$this->_translate instanceof TranslateAdapter) { $translate = Front::getInstance()->getBootstrap()->getResource('translate'); if ($translate instanceof Translate) { $this->setTranslate( $translate->getAdapter()); } } return $this->_translate; } /** * * authenticate user by username and password or if id is set, authenticate directly * * @return AuthenticationResult */ public function authenticate() { $usersService = new UsersService(); $user = null; $id = $this->getId(); $username = $this->getUsername(); $email = $this->getEmail(); $password = $this->getPassword(); if ($id !== null) { $user = $usersService->findBy('id', $id); } else if ($username !== null || $email !== null) { $user = $usersService->findBy('username', $username); if (!$user && $email !== null) { $user = $usersService->findBy('email', $email); } } $success = false; $blockedUser = null; $translate = $this->getTranslate(); $messages = array( $translate->_('The login details you have submitted are invalid.')); if ($this->isCheckBlockedUser()) { $blockedUsersService = new BlockedUsersService(); $blockedUser = $blockedUsersService->check( BlockedUserModel::ACTION_REGISTER, array( 'ip' => $_SERVER['REMOTE_ADDR'], 'username' => $username, 'email' => $email, )); } if ($blockedUser !== null) { $success = false; $messages = array($blockedUser->blockMessage()); } else if (count($user) > 0) { $allowedRoles = $this->getAllowedRoles(); $deniedRoles = $this->getDeniedRoles(); if ($id !== null) { $success = true; } else if (strcmp($usersService->hashPassword($password, $user['salt']), $user['password']) === 0) { $success = true; } else if (self::V6_HASHES && strcmp(md5(md5($password) . $user['salt']), $user['password']) === 0) { $success = true; } if (count($allowedRoles) > 0 && !array_key_exists($user['role'], $allowedRoles)) { $success = false; } if (array_key_exists($user['role'], $deniedRoles)) { $success = false; } } if ($success === true) { $usersService->save(array( 'last_login' => new Expr('now()'), 'ip_address' => (!empty($_SERVER['REMOTE_ADDR'])) ? $_SERVER['REMOTE_ADDR'] : '', ), $user['id']); return new AuthenticationResult(true, array( 'id' => $user['id'], 'username' => $user['username'], 'role' => $user['role'], )); } else { return new AuthenticationResult(false, array(), $messages); } } }