X-Git-Url: http://git.cyclocoop.org/?a=blobdiff_plain;f=www%2Fecrire%2Faction%2Flogout.php;fp=www%2Fecrire%2Faction%2Flogout.php;h=48a6a4bbcb6e16759039ab9fa20d20ccc3ba9aa0;hb=4f443dce95ff6f8221c189880a70c74ce1c1f238;hp=97adb057d2ab4763ad47ac877baa0f08b0394282;hpb=4a628e9b277d3617535f99d663ca79fa2e891177;p=lhc%2Fweb%2Fwww.git diff --git a/www/ecrire/action/logout.php b/www/ecrire/action/logout.php index 97adb057..48a6a4bb 100644 --- a/www/ecrire/action/logout.php +++ b/www/ecrire/action/logout.php @@ -3,77 +3,91 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +/** + * Action pour déconnecter une personne authentifiée + * + * @package SPIP\Core\Authentification + */ -include_spip('inc/cookie'); +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} +include_spip('inc/cookie'); /** - * Se deloger - * Pour eviter les CSRF on passe par une etape de confirmation si pas de jeton fourni - * avec un autosubmit js pour ne pas compliquer l'experience utilisateur + * Se déloger + * + * Pour éviter les CSRF on passe par une étape de confirmation si pas de jeton fourni + * avec un autosubmit js pour ne pas compliquer l'expérience utilisateur * - * http://doc.spip.org/@action_logout_dist + * Déconnecte l'utilisateur en cours et le redirige sur l'URL indiquée par + * l'argument de l'action sécurisée, et sinon sur la page d'accueil + * de l'espace public. * */ -function action_logout_dist() -{ - $logout =_request('logout'); +function action_logout_dist() { + $logout = _request('logout'); $url = securiser_redirect_action(_request('url')); // cas particulier, logout dans l'espace public - if ($logout == 'public' AND !$url) + if ($logout == 'public' and !$url) { $url = url_de_base(); + } // seul le loge peut se deloger (mais id_auteur peut valoir 0 apres une restauration avortee) - if (isset($GLOBALS['visiteur_session']['id_auteur']) - AND is_numeric($GLOBALS['visiteur_session']['id_auteur']) + if (isset($GLOBALS['visiteur_session']['id_auteur']) + and is_numeric($GLOBALS['visiteur_session']['id_auteur']) // des sessions anonymes avec id_auteur=0 existent, mais elle n'ont pas de statut : double check - AND isset($GLOBALS['visiteur_session']['statut'])) { + and isset($GLOBALS['visiteur_session']['statut']) + ) { // il faut un jeton pour fermer la session (eviter les CSRF) if (!$jeton = _request('jeton') - OR !verifier_jeton_logout($jeton,$GLOBALS['visiteur_session'])){ + or !verifier_jeton_logout($jeton, $GLOBALS['visiteur_session']) + ) { $jeton = generer_jeton_logout($GLOBALS['visiteur_session']); - $action = generer_url_action("logout","jeton=$jeton"); - $action = parametre_url($action,'logout',_request('logout')); - $action = parametre_url($action,'url',_request('url')); + $action = generer_url_action("logout", "jeton=$jeton"); + $action = parametre_url($action, 'logout', _request('logout')); + $action = parametre_url($action, 'url', _request('url')); include_spip("inc/minipres"); include_spip("inc/filtres"); - $texte = bouton_action(_T('spip:icone_deconnecter'),$action); + $texte = bouton_action(_T('spip:icone_deconnecter'), $action); $texte = "
$texte
"; $texte .= ''; - $res = minipres(_T('spip:icone_deconnecter'),$texte,'',true); + $res = minipres(_T('spip:icone_deconnecter'), $texte, '', true); echo $res; + return; } include_spip('inc/auth'); auth_trace($GLOBALS['visiteur_session'], '0000-00-00 00:00:00'); - // le logout explicite vaut destruction de toutes les sessions + // le logout explicite vaut destruction de toutes les sessions if (isset($_COOKIE['spip_session'])) { $session = charger_fonction('session', 'inc'); $session($GLOBALS['visiteur_session']['id_auteur']); - spip_setcookie('spip_session', $_COOKIE['spip_session'], time()-3600); + spip_setcookie('spip_session', $_COOKIE['spip_session'], time() - 3600); } // si authentification http, et que la personne est loge, // pour se deconnecter, il faut proposer un nouveau formulaire de connexion http if (isset($_SERVER['PHP_AUTH_USER']) - AND !$GLOBALS['ignore_auth_http'] - AND $GLOBALS['auth_can_disconnect']) { - ask_php_auth(_T('login_deconnexion_ok'), - _T('login_verifiez_navigateur'), - _T('login_retour_public'), - "redirect=". _DIR_RESTREINT_ABS, - _T('login_test_navigateur'), - true); - + and !$GLOBALS['ignore_auth_http'] + and $GLOBALS['auth_can_disconnect'] + ) { + ask_php_auth(_T('login_deconnexion_ok'), + _T('login_verifiez_navigateur'), + _T('login_retour_public'), + "redirect=" . _DIR_RESTREINT_ABS, + _T('login_test_navigateur'), + true); + } } @@ -86,45 +100,44 @@ function action_logout_dist() /** * Generer un jeton de logout personnel et ephemere + * * @param array $session * @param null|string $alea * @return string */ -function generer_jeton_logout($session,$alea=null){ - if (is_null($alea)){ - if (!isset($GLOBALS['meta']['alea_ephemere'])){ - include_spip('base/abstract_sql'); - $GLOBALS['meta']['alea_ephemere'] = sql_getfetsel('valeur', 'spip_meta', "nom='alea_ephemere'"); - } - $alea = $GLOBALS['meta']['alea_ephemere']; +function generer_jeton_logout($session, $alea = null) { + if (is_null($alea)) { + include_spip('inc/acces'); + $alea = charger_aleas(); } $jeton = md5($session['date_session'] - .$session['id_auteur'] - .$session['statut'] - .$alea + . $session['id_auteur'] + . $session['statut'] + . $alea ); + return $jeton; } /** * Verifier que le jeton de logout est bon - * il faut verifier avec alea_ephemere_ancien si pas bon avec alea_ephemere + * + * Il faut verifier avec alea_ephemere_ancien si pas bon avec alea_ephemere * pour gerer le cas de la rotation d'alea + * * @param string $jeton * @param array $session * @return bool */ -function verifier_jeton_logout($jeton,$session){ - if (generer_jeton_logout($session)===$jeton) +function verifier_jeton_logout($jeton, $session) { + if (generer_jeton_logout($session) === $jeton) { return true; - if (!isset($GLOBALS['meta']['alea_ephemere_ancien'])){ - include_spip('base/abstract_sql'); - $GLOBALS['meta']['alea_ephemere_ancien'] = sql_getfetsel('valeur', 'spip_meta', "nom='alea_ephemere_ancien'"); } - if (generer_jeton_logout($session,$GLOBALS['meta']['alea_ephemere_ancien'])===$jeton) + + if (generer_jeton_logout($session, $GLOBALS['meta']['alea_ephemere_ancien']) === $jeton) { return true; + } + return false; } - -?> \ No newline at end of file