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); } ?>