source: spip-zone/_plugins_/authentification/openid/spip_2_0/auth/openid.php @ 32343

Last change on this file since 32343 was 32343, checked in by cedric@…, 11 years ago

verification de la saisie de l'openid sur la fiche auteur, en interrogeant le serveur.
Correction du bug pour la connexion des redacteurs via openid : en l'absence de cookie admin, le formulaire de login ne retrouve pas le login d'un utilisateur connecte, sauf si var_login indique dans l'url. On l'injecte donc pour que cela fonctionne avec la version stable de SPIP

File size: 3.9 KB
Line 
1<?php
2/**
3 * Plugin OpenID
4 * Licence GPL (c) 2007-2009 Edouard Lafargue, Mathieu Marcillaud, Cedric Morin, Fil
5 *
6 */
7 
8if (!defined("_ECRIRE_INC_VERSION")) return;
9
10// Authentifie via OPENID et retourne la ligne SQL decrivant l'utilisateur si ok
11
12// http://doc.spip.org/@inc_auth_ldap_dist
13function auth_openid_dist ($login, $pass, $md5pass="", $md5next="") {
14
15        // il faut un login non vide et qui contient au moins un point
16        // car c'est cense etre une url
17        if (!$login) return false;
18        $auteur = false;
19
20        // il faut au moins que ca ressemble un peu a un openid !
21        include_spip('inc/openid');
22        if (is_openid($login)){
23                // si pas de protocole, mettre http://
24                $idurl = nettoyer_openid($login);
25
26                // Si l'utilisateur figure deja dans la base, y recuperer les infos
27                $auteur = sql_fetsel("*", "spip_auteurs", array("statut!=".sql_quote("5poubelle") , "openid=" . sql_quote($idurl)));
28        }
29       
30        // encore plus fort :
31        // si le login est un login spip mais qu'on arrive la,
32        // et qu'il a pas fournit de pass
33        // dans ce cas, si l'utilisateur a un openid on peut tenter de la loger avec !
34        if (!$auteur){
35                // Si l'utilisateur figure dans la base, y recuperer les infos
36                $auteur = sql_fetsel("*", "spip_auteurs", array("statut!=".sql_quote("5poubelle") , "login=" . sql_quote($login). " AND openid>''"));
37        }
38
39        if ($auteur) {
40                // * Si l'openid existe, la procedure continue en redirigeant
41                // vers le fournisseur d'identite. En cas d'erreur, il y a une redirection de faite
42                // sur la page login, en cas de reussite, sur l'action controler_openid
43                // * S'il l'openid n'existe pas, on est de retour ici, et on continue
44                // pour d'autres methodes d'identification
45                include_spip('inc/openid');
46                // il faut remettre var_login dans l'url de retour pour que le form de login retrouve le login
47                // des non admin ...
48                $retour = auth_openid_url_retour_login($auteur['login'],url_absolue(parametre_url(self(),'var_login',$auteur['login'],'&')));
49                $erreurs_openid = demander_authentification_openid($auteur['openid'], $retour);
50                // potentiellement, on arrive ici avec une erreur si l'openid donne n'existe pas
51                $auteur = false;
52        }
53
54        return is_array($auteur) ? $auteur : array();
55}
56
57
58function auth_openid_terminer_identifier_login($login, $serveur=''){
59        include_spip('inc/openid');
60        $retour = auth_openid_url_retour_login($login);
61        $auteur = terminer_authentification_openid($retour);
62
63        if (is_string($auteur))
64                return $auteur; // erreur !
65
66        if (is_array($auteur)
67                AND isset($auteur['openid'])
68                AND $openid = $auteur['openid']
69          AND $auteur = sql_fetsel("*", "spip_auteurs", "login=" . sql_quote($login)." AND openid=".sql_quote($openid),"","","","",$serveur)){
70
71                $auteur['auth'] = 'openid'; // on se log avec cette methode, donc
72                return $auteur;
73        }
74        return false;
75}
76
77
78
79/**
80 * Fournir une url de retour apres login par un SSO
81 * pour finir l'authentification
82 *
83 * @param string $auth_methode
84 * @param string $login
85 * @param string $serveur
86 * @return string
87 */
88function auth_openid_url_retour_login($login, $redirect='', $serveur=''){
89        $securiser_action = charger_fonction('securiser_action','inc');
90        return $securiser_action('controler_openid', $login, $redirect, true);
91}
92
93
94 /**
95  * Loger un auteur suite a son identification
96  *
97  * @param array $auteur
98  */
99 function auth_loger($auteur){
100        if (!is_array($auteur) OR !count($auteur))
101                return false;
102
103        $session = charger_fonction('session', 'inc');
104        $session($auteur);
105        $p = ($auteur['prefs']) ? unserialize($auteur['prefs']) : array();
106        $p['cnx'] = ($session_remember == 'oui') ? 'perma' : '';
107        $p = array('prefs' => serialize($p));
108        sql_updateq('spip_auteurs', $p, "id_auteur=" . $auteur['id_auteur']);
109
110        // Si on est admin, poser le cookie de correspondance
111        if ($auteur['statut'] == '0minirezo') {
112                include_spip('inc/cookie');
113                spip_setcookie('spip_admin', '@'.$auteur['login'],
114                time() + 7 * 24 * 3600);
115        }
116
117        //  bloquer ici le visiteur qui tente d'abuser de ses droits
118        verifier_visiteur();
119        return true;
120}
121?>
Note: See TracBrowser for help on using the repository browser.