. */ namespace SP\Core; use Psr\Container\ContainerExceptionInterface; use Psr\Container\NotFoundExceptionInterface; use SP\Bootstrap; use SP\Config\ConfigData; use SP\Core\Crypt\Session as CryptSession; use SP\Core\Session\Session; 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 * @param Session $session */ public static function loadUserSession(UserData $UserData, Session $session) { $session->setUserData($UserData); $session->setUserProfile(Profile::getItem()->getById($UserData->getUserProfileId())); } /** * Establecer la clave pública RSA en la sessión * * @throws \SP\Core\Exceptions\SPException */ public static function loadPublicKey() { $CryptPKI = new CryptPKI(); SessionFactory::setPublicKey($CryptPKI->getPublicKey()); } /** * Desencriptar la clave maestra de la sesión. * * @return string con la clave maestra * @throws \Defuse\Crypto\Exception\CryptoException * @throws \Defuse\Crypto\Exception\EnvironmentIsBrokenException * @throws \Defuse\Crypto\Exception\BadFormatException */ public static function getSessionMPass() { return CryptSession::getSessionKey(); } /** * 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 * @param ConfigData|null $configData * @return string con el hash de verificación */ public static function getSessionKey($new = false, ConfigData $configData = null) { // FIXME if (null === $configData) { /** @var ConfigData $ConfigData */ try { $configData = Bootstrap::getContainer()->get(ConfigData::class); } catch (NotFoundExceptionInterface $e) { return SessionFactory::getSecurityKey(); } catch (ContainerExceptionInterface $e) { return SessionFactory::getSecurityKey(); } } // Generamos un nuevo hash si es necesario y lo guardamos en la sesión if ($new === true || null === SessionFactory::getSecurityKey()) { $hash = sha1(time() . $configData->getPasswordSalt()); SessionFactory::setSecurityKey($hash); return $hash; } return SessionFactory::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 !== SessionFactory::getSecurityKey() && SessionFactory::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'); } /** * Regenerad el ID de sesión */ public static function regenerate() { session_regenerate_id(true); SessionFactory::setSidStartTime(time()); } /** * Destruir la sesión y reiniciar */ public static function restart() { session_unset(); session_destroy(); session_start(); } }