From c7d7a3a6213424bcfba211562b1a184dabc8076f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Schneider?= Date: Wed, 17 Jul 2013 16:10:20 +0200 Subject: [PATCH] Logout from spip when where are not connected to the idp Fixes #3237 --- action/logout.php | 44 ++++++++--------------------------------- inc/my_auth.php | 49 ++++++++++++++++++++++++++++++++++++++++++++++ plugin.xml | 5 ++++- saml_pipelines.php | 23 ++++++++++++++++++++++ 4 files changed, 84 insertions(+), 37 deletions(-) create mode 100644 inc/my_auth.php create mode 100644 saml_pipelines.php diff --git a/action/logout.php b/action/logout.php index d4be5a7..d1cd472 100644 --- a/action/logout.php +++ b/action/logout.php @@ -13,6 +13,7 @@ if (!defined("_ECRIRE_INC_VERSION")) return; include_spip('inc/cookie'); +include_spip('inc/my_auth'); /* Loading simplesamlphp */ include_spip('inc/simplesamlphp/lib/_autoload'); @@ -20,44 +21,15 @@ include_spip('inc/simplesamlphp/lib/_autoload'); // http://doc.spip.org/@action_logout_dist function action_logout_dist() { - global $auteur_session, $ignore_auth_http; - $simplesaml = new SimpleSAML_Auth_Simple('default-sp'); - $logout =_request('logout'); - $url = _request('url'); - spip_log("logout $logout $url" . $auteur_session['id_auteur']); - // cas particulier, logout dans l'espace public - if ($logout == 'public' AND !$url) - $url = url_de_base(); + // Spip logout + my_spip_logout(); - // seul le loge peut se deloger (mais id_auteur peut valoir 0 apres une restauration avortee) - if (is_numeric($auteur_session['id_auteur'])) { - spip_query("UPDATE spip_auteurs SET en_ligne = DATE_SUB(NOW(),INTERVAL 15 MINUTE) WHERE id_auteur = ".$auteur_session['id_auteur']); - // le logout explicite vaut destruction de toutes les sessions - if ($_COOKIE['spip_session']) { - $session = charger_fonction('session', 'inc'); - $session($auteur_session['id_auteur']); - preg_match(',^[^/]*//[^/]*(.*)/$,', - url_de_base(), - $r); - spip_setcookie('spip_session', '', -1,$r[1]); - spip_setcookie('spip_session', '', -1); - } - if ($_SERVER['PHP_AUTH_USER'] AND !$ignore_auth_http) { - include_spip('inc/actions'); - if (verifier_php_auth()) { - ask_php_auth(_T('login_deconnexion_ok'), - _T('login_verifiez_navigateur'), - _T('login_retour_public'), - "redirect=". _DIR_RESTREINT_ABS, - _T('login_test_navigateur'), - true); - exit; - } - } - } // Logout SAML - spip_log("[auth_saml] logout " . url_de_base()); - $simplesaml->logout(url_de_base()); + if ($simplesaml->isAuthenticated()) + { + spip_log("[auth_saml] logout " . url_de_base()); + $simplesaml->logout(url_de_base()); + } } ?> diff --git a/inc/my_auth.php b/inc/my_auth.php new file mode 100644 index 0000000..79b8478 --- /dev/null +++ b/inc/my_auth.php @@ -0,0 +1,49 @@ + diff --git a/plugin.xml b/plugin.xml index e1e6c90..3260173 100644 --- a/plugin.xml +++ b/plugin.xml @@ -12,6 +12,9 @@ [http://repos.entrouvert.org/spip-saml.git->http://repos.entrouvert.org/spip-saml.git] - saml + + definir_session + saml_pipelines.php + diff --git a/saml_pipelines.php b/saml_pipelines.php new file mode 100644 index 0000000..e24d607 --- /dev/null +++ b/saml_pipelines.php @@ -0,0 +1,23 @@ +isAuthenticated()) + { + my_spip_logout(); + } + } + return $session; +} + +?>