source: spip-zone/_plugins_/authentification/openid/spip_2_0/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: 2.1 KB
RevLine 
[20770]1<?php
[32326]2/**
3 * Plugin OpenID
4 * Licence GPL (c) 2007-2009 Edouard Lafargue, Mathieu Marcillaud, Cedric Morin, Fil
5 *
6 */
7 
[20770]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
[32093]13function auth_openid_dist ($login, $pass, $md5pass="", $md5next="", $log_step='check') {
[20770]14
[32064]15        // il faut un login non vide et qui contient au moins un point
16        // car c'est cense etre une url
[32071]17        if (!$login) return false;
[32093]18        $auteur = false;
[32324]19
[32093]20        // il faut au moins que ca ressemble un peu a un openid !
[32324]21        include_spip('inc/openid');
[32093]22        if (is_openid($login)){
[32071]23                // si pas de protocole, mettre http://
[32136]24                $idurl = nettoyer_openid($login);
[20770]25
[32071]26                // Si l'utilisateur figure deja dans la base, y recuperer les infos
[32136]27                $auteur = sql_fetsel("*", "spip_auteurs", array("statut!=".sql_quote("5poubelle") , "openid=" . sql_quote($idurl)));
[32071]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 !
[32093]34        if ($log_step=='check' AND !$auteur){
[32071]35                // Si l'utilisateur figure dans la base, y recuperer les infos
[32136]36                $auteur = sql_fetsel("*", "spip_auteurs", array("statut!=".sql_quote("5poubelle") , "login=" . sql_quote($login). " AND openid>''"));
[32071]37        }
[32064]38
[32093]39        if ($log_step=='check' AND $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');
[32340]46                $retour = parametre_url(openid_url_reception(), "url", url_absolue($cible), '&');
[32093]47                $erreurs_openid = demander_authentification_openid($auteur['openid'], url_absolue(self()));
48                // potentiellement, on arrive ici avec une erreur si l'openid donne n'existe pas
49                $auteur = false;
50        }
51
[32122]52        if ($auteur AND $log_step=='ok'){
53                $auteur['auth'] = 'openid';
54        }
55
[32093]56        return is_array($auteur) ? $auteur : array();
[20770]57}
58
[32093]59
60?>
Note: See TracBrowser for help on using the repository browser.