source: spip-zone/_plugins_/authentification/openid/spip_2_1/auth/openid.php @ 32340

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

authentification openid fonctionnelle en 2.1
on change la signature de terminier_authentification_openid qui se contente de renvoyer une chaine d'erreur ou un tableau decrivant l'internaute identifie, charge a l'appelant d'en faire bon usage.
Cela casse le process en 2.0, reparation a suivre.

Une fonction verifier_openid permet de verifier qu'une url est valide en interrogeant le serveur.

File size: 3.2 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//
11/**
12 * Authentifie via OPENID
13 *      lance une redirection http au premier passage (log_step='check')
14 *  et retourne la ligne SQL decrivant l'utilisateur si ok au second passage (log_step='ok')
15 * @param string $login
16 * @param string $pass
17 * @param string $serveur
18 * @return <type>
19 */
20function auth_openid_dist ($login, $pass, $serveur='') {
21
22        // il faut un login non vide ET un pass vide (sinon cela ne concerne pas OpenID)
23        if (!strlen($login) OR strlen($pass)) return false;
24        $auteur = false;
25       
26        // retrouver le login
27        if (!$login = auth_openid_retrouver_login($login)
28                OR !$idurl = sql_getfetsel("openid", "spip_auteurs", "login=" . sql_quote($login),"","","","",$serveur) )
29                return false;
30       
31        // * Si l'openid existe, la procedure continue en redirigeant
32        // vers le fournisseur d'identite. En cas d'erreur, il y a une redirection de faite
33        // sur la page login, en cas de reussite, sur l'action controler_openid
34        // * S'il l'openid n'existe pas, on est de retour ici, et on continue
35        // pour d'autres methodes d'identification
36        include_spip('inc/openid');
37        $retour = auth_url_retour_login('openid', $login, url_absolue(self()));
38        $erreurs_openid = demander_authentification_openid($idurl, $retour);
39        // potentiellement, on arrive ici avec une erreur si l'openid donne n'existe pas
40        // on la renvoie
41        return $erreurs_openid;
42}
43
44function auth_openid_terminer_identifier_login($login, $serveur=''){
45        include_spip('inc/openid');
46        $retour = auth_url_retour_login('openid', $login);
47        $auteur = terminer_authentification_openid($retour);
48
49        if (is_string($auteur))
50                return $auteur; // erreur !
51
52        if (is_array($auteur)
53                AND isset($auteur['openid'])
54                AND $openid = $auteur['openid']
55          AND $auteur = sql_fetsel("*", "spip_auteurs", "login=" . sql_quote($login)." AND openid=".sql_quote($openid),"","","","",$serveur)){
56
57                $auteur['auth'] = 'openid'; // on se log avec cette methode, donc
58                return $auteur;
59        }
60        return false;
61}
62
63function auth_openid_formulaire_login($flux){
64        include_spip('inc/openid');
65        $flux['data'] = openid_login_form($flux['data'],$flux['args']['contexte']);
66        return $flux;
67}
68
69
70/**
71 * Retrouver le login de quelqu'un qui cherche a se loger
72 * Reconnaitre aussi ceux qui donnent leur nom ou email au lieu du login
73 *
74 * @param string $login
75 * @return string
76 */
77function auth_openid_retrouver_login($login, $serveur=''){
78        include_spip('inc/openid');
79
80        // regarder si l'utilisateur figure deja dans la base
81        // il faut au moins que ca ressemble un peu a un openid !
82        if (is_openid($login)
83          AND $idurl = nettoyer_openid($login)          // si pas de protocole, mettre http://
84                AND $r = sql_getfetsel("login", "spip_auteurs", array("statut!=".sql_quote("5poubelle") , "openid=" . sql_quote($idurl)),'','','','',$serveur)) {
85
86                return $r;
87        }
88
89        // encore plus fort :
90        // si le login est un login spip mais qu'on arrive la,
91        // et qu'il a pas fournit de pass
92        // dans ce cas, si l'utilisateur a un openid on peut tenter de la loger avec !
93        if ($r = sql_getfetsel("login", "spip_auteurs", array("statut!=".sql_quote("5poubelle") , "login=" . sql_quote($login). " AND openid>''"),'','','','',$serveur)){
94                return $r;
95        }
96
97        return false;
98}
99
100?>
Note: See TracBrowser for help on using the repository browser.