. */ namespace SP\Core; use SP\Config\Config; use SP\DataModel\UserData; use SP\Mgmt\Profiles\Profile; defined('APP_ROOT') || die(); /** * Class SessionUtil para las utilidades de la sesión * * @package SP */ class SessionUtil { /** * Establece las variables de sesión del usuario. * * @param UserData $UserData */ public static function loadUserSession(UserData $UserData) { Session::setUserData($UserData); Session::setUserProfile(Profile::getItem()->getById($UserData->getUserProfileId())); } /** * Establecer la clave pública RSA en la sessión * * @throws \phpseclib\Exception\FileNotFoundException * @throws \SP\Core\Exceptions\SPException */ public static function loadPublicKey() { $CryptPKI = new CryptPKI(); Session::setPublicKey($CryptPKI->getPublicKey()); } /** * Guardar la clave maestra encriptada en la sesión * * @param $masterPass */ public static function saveSessionMPass($masterPass) { $mPassPwd = Crypt::generateAesKey(session_id()); $sessionMasterPass = Crypt::mkCustomMPassEncrypt($mPassPwd, $masterPass); Session::setMPass($sessionMasterPass[0]); Session::setMPassIV($sessionMasterPass[1]); } /** * Desencriptar la clave maestra de la sesión. * * @return string con la clave maestra */ public static function getSessionMPass() { $cryptPass = Crypt::generateAesKey(session_id()); return Crypt::getDecrypt(Session::getMPass(), Session::getMPassIV(), $cryptPass); } /** * Devuelve un hash para verificación de formularios. * Esta función genera un hash que permite verificar la autenticidad de un formulario * * @param bool $new si es necesrio regenerar el hash * @return string con el hash de verificación */ public static function getSessionKey($new = false) { // Generamos un nuevo hash si es necesario y lo guardamos en la sesión if ($new === true || null === Session::getSecurityKey()) { $hash = sha1(time() . Config::getConfig()->getPasswordSalt()); Session::setSecurityKey($hash); return $hash; } return Session::getSecurityKey(); } /** * Comprobar el hash de verificación de formularios. * * @param string $key con el hash a comprobar * @return bool|string si no es correcto el hash devuelve bool. Si lo es, devuelve el hash actual. */ public static function checkSessionKey($key) { return (null !== Session::getSecurityKey() && Session::getSecurityKey() === $key); } /** * Limpiar la sesión del usuario */ public static function cleanSession() { foreach ($_SESSION as $key => $value){ unset($_SESSION[$key]); } // Session::unsetSessionKey('userData'); // Session::unsetSessionKey('usrprofile'); // Session::unsetSessionKey('searchFilters'); // Session::unsetSessionKey('updated'); // Session::unsetSessionKey('sessionTimeout'); // Session::unsetSessionKey('reload'); // Session::unsetSessionKey('sk'); // Session::unsetSessionKey('mPass'); // Session::unsetSessionKey('mPassPwd'); // Session::unsetSessionKey('mPassIV'); // Session::unsetSessionKey('sidStartTime'); // Session::unsetSessionKey('startActivity'); // Session::unsetSessionKey('lastActivity'); // Session::unsetSessionKey('lastAccountId'); // Session::unsetSessionKey('theme'); // Session::unsetSessionKey('2fapass'); // Session::unsetSessionKey('pubkey'); // Session::unsetSessionKey('locale'); // Session::unsetSessionKey('userpreferences'); // Session::unsetSessionKey('tempmasterpass'); // Session::unsetSessionKey('accountcolor'); // Session::unsetSessionKey('curlcookiesession'); // Session::unsetSessionKey('dokuwikisession'); // Session::unsetSessionKey('sessiontype'); // Session::unsetSessionKey('config'); // Session::unsetSessionKey('configTime'); } }