112 lines
4.1 KiB
PHP
112 lines
4.1 KiB
PHP
<?php
|
|
|
|
/***************************************************************************\
|
|
* SPIP, Systeme de publication pour l'internet *
|
|
* *
|
|
* Copyright (c) 2001-2007 *
|
|
* 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; #securite
|
|
|
|
include_spip('inc/headers');
|
|
include_spip('inc/session');
|
|
include_spip('inc/cookie');
|
|
include_spip('inc/texte');
|
|
|
|
/* Loading simplesamlphp */
|
|
include_spip('inc/simplesamlphp/lib/_autoload');
|
|
|
|
// http://doc.spip.org/@balise_URL_LOGOUT
|
|
function balise_LOGIN_SAML ($p) {
|
|
spip_log("[auth_saml] balise_LOGIN_SAML");
|
|
return calculer_balise_dynamique($p,'LOGIN_SAML', array());
|
|
}
|
|
|
|
// $args[0] = url destination apres logout [(#URL_LOGOUT{url})]
|
|
// http://doc.spip.org/@balise_URL_LOGOUT_stat
|
|
function balise_LOGIN_SAML_stat ($args, $filtres) {
|
|
return array($args[0]);
|
|
}
|
|
|
|
// http://doc.spip.org/@balise_URL_LOGOUT_dyn
|
|
function balise_LOGIN_SAML_dyn()
|
|
{
|
|
$simplesaml = new SimpleSAML_Auth_Simple('default-sp');
|
|
|
|
spip_log("[auth_saml] balise_LOGIN_SAML_dyn");
|
|
|
|
if (!$simplesaml->isAuthenticated()) {
|
|
spip_log("[auth_saml] required auth");
|
|
$simplesaml->requireAuth();
|
|
}
|
|
else return login_saml_successfull();
|
|
}
|
|
|
|
function generate_password($length = 15) {
|
|
$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789*\_-~#/!+={[]}()&$%';
|
|
$count = mb_strlen($chars);
|
|
|
|
for ($i = 0, $result = ''; $i < $length; $i++) {
|
|
$index = rand(0, $count - 1);
|
|
$result .= mb_substr($chars, $index, 1);
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
|
|
function login_saml_successfull()
|
|
{
|
|
$simplesaml = new SimpleSAML_Auth_Simple('default-sp');
|
|
|
|
spip_log("[auth_saml] Traitement login SAML");
|
|
|
|
$attributes = $simplesaml->getAttributes();
|
|
$login = $attributes['uid'][0];
|
|
$first_name = $attributes['gn'][0];
|
|
$last_name = $attributes['sn'][0];
|
|
$email = $attributes['email'][0];
|
|
$display_name = $first_name . ' ' . $last_name;
|
|
|
|
spip_log("[auth_saml] authentification reussi pour l'utilisateur =".$email);
|
|
|
|
// Si l'utilisateur figure deja dans la base, y recuperer les infos
|
|
$result = spip_query("SELECT * FROM spip_auteurs WHERE email=" ._q($email). " AND statut<>'6form'" );
|
|
$row_auteur = spip_fetch_array($result);
|
|
|
|
spip_log("[auth_saml] attribus utilisateur =".$row_auteur['login']);
|
|
|
|
if ($row_auteur) {
|
|
spip_log("[auth_saml] updating user [" . $email . "]");
|
|
spip_log("[auth_saml] display name : $display_name and login : $login");
|
|
spip_query("UPDATE spip_auteurs SET nom=" . _q($display_name) . ", login=" . _q($login) . " WHERE email="._q($email));
|
|
|
|
}
|
|
else
|
|
{
|
|
spip_log("[auth_saml] creating user [" . $login . "]");
|
|
spip_log("[auth_saml] display name : $display_name and email : $email");
|
|
$pass = generate_password();
|
|
spip_query("INSERT INTO spip_auteurs (nom, login, email, pass, statut) VALUES ('$display_name', '$login', '$email', '$pass', '6forum')");
|
|
// On recupere l('utilisateur
|
|
$result = spip_query("SELECT * FROM spip_auteurs WHERE email=" ._q($email). " AND statut<>'6forum'" );
|
|
$row_auteur = spip_fetch_array($result);
|
|
}
|
|
// chargement de l'utilisateur en session
|
|
$GLOBALS['auteur_session'] = $row_auteur;
|
|
$session = charger_fonction('session', 'inc');
|
|
$cookie_session = $session($row_auteur);
|
|
spip_setcookie('spip_session', $cookie_session);
|
|
if ($row_auteur['statut'][0] < 6)
|
|
$redirect = _DIR_RESTREINT_ABS. "?bonjour=oui";
|
|
else
|
|
$redirect = '/';
|
|
spip_log('[auth_saml] redirect ' . $redirect);
|
|
redirige_par_entete($redirect);
|
|
}
|
|
|
|
?>
|