'initAuthenticationObject', 'User.isNotAuthorized' => 'noAccess', 'API.Request.authenticate' => 'ApiRequestAuthenticate', ); return $hooks; } /** * Redirects to Login form with error message. * Listens to User.isNotAuthorized hook. */ public function noAccess(Exception $exception) { $exceptionMessage = $exception->getMessage(); echo FrontController::getInstance()->dispatch('Login', 'login', array($exceptionMessage)); } /** * Set login name and authentication token for API request. * Listens to API.Request.authenticate hook. */ public function ApiRequestAuthenticate($tokenAuth) { \Piwik\Registry::get('auth')->setLogin($login = null); \Piwik\Registry::get('auth')->setTokenAuth($tokenAuth); } static protected function isModuleIsAPI() { return Piwik::getModule() === 'API' && (Piwik::getAction() == '' || Piwik::getAction() == 'index'); } /** * Initializes the authentication object. * Listens to Request.initAuthenticationObject hook. */ function initAuthenticationObject($activateCookieAuth = false) { $auth = new Auth(); \Piwik\Registry::set('auth', $auth); $this->initAuthenticationFromCookie($auth, $activateCookieAuth); } /** * @param $auth */ public static function initAuthenticationFromCookie(\Piwik\Auth $auth, $activateCookieAuth) { if(self::isModuleIsAPI() && !$activateCookieAuth) { return; } $authCookieName = Config::getInstance()->General['login_cookie_name']; $authCookieExpiry = 0; $authCookiePath = Config::getInstance()->General['login_cookie_path']; $authCookie = new Cookie($authCookieName, $authCookieExpiry, $authCookiePath); $defaultLogin = 'anonymous'; $defaultTokenAuth = 'anonymous'; if ($authCookie->isCookieFound()) { $defaultLogin = $authCookie->get('login'); $defaultTokenAuth = $authCookie->get('token_auth'); } $auth->setLogin($defaultLogin); $auth->setTokenAuth($defaultTokenAuth); } /** * Stores password reset info for a specific login. * * @param string $login The user login for whom a password change was requested. * @param string $password The new password to set. */ public static function savePasswordResetInfo($login, $password) { $optionName = self::getPasswordResetInfoOptionName($login); $optionData = UsersManager::getPasswordHash($password); Option::set($optionName, $optionData); } /** * Removes stored password reset info if it exists. * * @param string $login The user login to check for. */ public static function removePasswordResetInfo($login) { $optionName = self::getPasswordResetInfoOptionName($login); Option::delete($optionName); } /** * Gets password hash stored in password reset info. * * @param string $login The user login to check for. * @return string|false The hashed password or false if no reset info exists. */ public static function getPasswordToResetTo($login) { $optionName = self::getPasswordResetInfoOptionName($login); return Option::get($optionName); } /** * Gets the option name for the option that will store a user's password change * request. * * @param string $login The user login for whom a password change was requested. * @return string */ public static function getPasswordResetInfoOptionName($login) { return $login . '_reset_password_info'; } }