/** * @param array $params plugin parameters for the current action * @return null or jSelectorAct if action should change */ public function beforeAction($params) { $notLogged = false; $badip = false; $selector = null; // Check if auth cookie exist and user isn't logged on if (isset($this->config['persistant_enable']) && $this->config['persistant_enable'] && !jAuth::isConnected()) { if (isset($this->config['persistant_cookie_name']) && isset($this->config['persistant_crypt_key'])) { $cookieName = $this->config['persistant_cookie_name']; if (isset($_COOKIE[$cookieName]['auth']) && strlen($_COOKIE[$cookieName]['auth']) > 0) { $decrypted = jCrypt::decrypt($_COOKIE[$cookieName]['auth'], $this->config['persistant_crypt_key']); $decrypted = @unserialize($decrypted); if ($decrypted && is_array($decrypted)) { list($login, $password) = $decrypted; jAuth::login($login, $password); } } if (isset($_COOKIE[$cookieName]['login'])) { // destroy deprecated cookies setcookie($cookieName . '[login]', '', time() - 3600, $this->config['persistant_cookie_path']); setcookie($cookieName . '[passwd]', '', time() - 3600, $this->config['persistant_cookie_path']); } } else { throw new jException('jelix~auth.error.persistant.incorrectconfig', 'persistant_cookie_name, persistant_crypt_key'); } } //Do we check the ip ? if ($this->config['secure_with_ip']) { if (!isset($_SESSION['JELIX_AUTH_SECURE_WITH_IP'])) { $_SESSION['JELIX_AUTH_SECURE_WITH_IP'] = $this->_getIpForSecure(); } else { if ($_SESSION['JELIX_AUTH_SECURE_WITH_IP'] != $this->_getIpForSecure()) { session_destroy(); $selector = new jSelectorAct($this->config['bad_ip_action']); $notLogged = true; $badip = true; } } } //Creating the user's object if needed if (!isset($_SESSION[$this->config['session_name']])) { $notLogged = true; $_SESSION[$this->config['session_name']] = new jAuthDummyUser(); } else { $notLogged = !jAuth::isConnected(); } if (!$notLogged && $this->config['timeout']) { if (isset($_SESSION['JELIX_AUTH_LASTTIME'])) { if (time() - $_SESSION['JELIX_AUTH_LASTTIME'] > $this->config['timeout'] * 60) { $notLogged = true; jAuth::logout(); unset($_SESSION['JELIX_AUTH_LASTTIME']); } else { $_SESSION['JELIX_AUTH_LASTTIME'] = time(); } } else { $_SESSION['JELIX_AUTH_LASTTIME'] = time(); } } $needAuth = isset($params['auth.required']) ? $params['auth.required'] == true : $this->config['auth_required']; $authok = false; if ($needAuth) { if ($notLogged) { if ($this->config['on_error'] == 1 || !jApp::coord()->request->isAllowedResponse('jResponseRedirect')) { throw new jException($this->config['error_message']); } else { if (!$badip) { $auth_url_return = jApp::coord()->request->getParam('auth_url_return'); if ($auth_url_return === null) { jApp::coord()->request->params['auth_url_return'] = jUrl::getCurrentUrl(); } $selector = new jSelectorAct($this->config['on_error_action']); } } } else { $authok = true; } } else { $authok = true; } return $selector; }
/** * */ public static function checkCookieToken() { $config = self::loadConfig(); if (isset($config['persistant_enable']) && $config['persistant_enable'] && !self::isConnected()) { if (isset($config['persistant_cookie_name']) && isset($config['persistant_crypt_key']) && trim($config['persistant_cookie_name']) != '' && trim($config['persistant_crypt_key']) != '') { $cookieName = $config['persistant_cookie_name']; if (isset($_COOKIE[$cookieName]['auth']) && strlen($_COOKIE[$cookieName]['auth']) > 0) { $decrypted = jCrypt::decrypt($_COOKIE[$cookieName]['auth'], $config['persistant_crypt_key']); $decrypted = @unserialize($decrypted); if ($decrypted && is_array($decrypted) && count($decrypted) == 2) { list($login, $password) = $decrypted; self::login($login, $password, true); } } if (isset($_COOKIE[$cookieName]['login'])) { // destroy deprecated cookies setcookie($cookieName . '[login]', '', time() - 3600, $config['persistant_cookie_path']); setcookie($cookieName . '[passwd]', '', time() - 3600, $config['persistant_cookie_path']); } } } }
/** * */ public static function checkCookieToken() { $config = self::loadConfig(); if (isset($config['persistant_enable']) && $config['persistant_enable'] && !self::isConnected()) { if (isset($config['persistant_cookie_name']) && isset($config['persistant_crypt_key'])) { $cookieName = $config['persistant_cookie_name']; if (isset($_COOKIE[$cookieName]['auth']) && strlen($_COOKIE[$cookieName]['auth']) > 0) { $decrypted = jCrypt::decrypt($_COOKIE[$cookieName]['auth'], $config['persistant_crypt_key']); $decrypted = @unserialize($decrypted); if ($decrypted && is_array($decrypted)) { list($login, $password) = $decrypted; self::login($login, $password, true); } } if (isset($_COOKIE[$cookieName]['login'])) { // destroy deprecated cookies setcookie($cookieName . '[login]', '', time() - 3600, $config['persistant_cookie_path']); setcookie($cookieName . '[passwd]', '', time() - 3600, $config['persistant_cookie_path']); } } else { throw new jException('jelix~auth.error.persistant.incorrectconfig', 'persistant_cookie_name, persistant_crypt_key'); } } }