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

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

un sous dossier pour la partie spip 2.0 du plugin, qui ne formera qu'un seul paquet multiversions

File size: 3.3 KB
Line 
1<?php
2
3/***************************************************************************\
4 *  SPIP, Systeme de publication pour l'internet                           *
5 *                                                                         *
6 *  Copyright (c) 2001-2008                                                *
7 *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
8 *                                                                         *
9 *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
10 *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
11\***************************************************************************/
12
13if (!defined("_ECRIRE_INC_VERSION")) return;
14
15// Authentifie via OPENID et retourne la ligne SQL decrivant l'utilisateur si ok
16
17// http://doc.spip.org/@inc_auth_ldap_dist
18function auth_openid_dist ($login, $pass, $md5pass="", $md5next="", $log_step='check') {
19
20        // il faut un login non vide et qui contient au moins un point
21        // car c'est cense etre une url
22        if (!$login) return false;
23        $auteur = false;
24       
25        // il faut au moins que ca ressemble un peu a un openid !
26        if (is_openid($login)){
27                include_spip('inc/openid');
28                // si pas de protocole, mettre http://
29                $idurl = nettoyer_openid($login);
30
31                // Si l'utilisateur figure deja dans la base, y recuperer les infos
32                $auteur = sql_fetsel("*", "spip_auteurs", array("statut!=".sql_quote("5poubelle") , "openid=" . sql_quote($idurl)));
33        }
34       
35        // encore plus fort :
36        // si le login est un login spip mais qu'on arrive la,
37        // et qu'il a pas fournit de pass
38        // dans ce cas, si l'utilisateur a un openid on peut tenter de la loger avec !
39        if ($log_step=='check' AND !$auteur){
40                // Si l'utilisateur figure dans la base, y recuperer les infos
41                $auteur = sql_fetsel("*", "spip_auteurs", array("statut!=".sql_quote("5poubelle") , "login=" . sql_quote($login). " AND openid>''"));
42        }
43
44        if ($log_step=='check' AND $auteur) {
45                // * Si l'openid existe, la procedure continue en redirigeant
46                // vers le fournisseur d'identite. En cas d'erreur, il y a une redirection de faite
47                // sur la page login, en cas de reussite, sur l'action controler_openid
48                // * S'il l'openid n'existe pas, on est de retour ici, et on continue
49                // pour d'autres methodes d'identification
50                include_spip('inc/openid');
51                $erreurs_openid = demander_authentification_openid($auteur['openid'], url_absolue(self()));
52                // potentiellement, on arrive ici avec une erreur si l'openid donne n'existe pas
53                $auteur = false;
54        }
55
56        if ($auteur AND $log_step=='ok'){
57                $auteur['auth'] = 'openid';
58        }
59
60        return is_array($auteur) ? $auteur : array();
61}
62
63// determine si un login est de type openid (une url avec http ou https)
64function is_openid($login){
65        // Detection s'il s'agit d'un URL à traiter comme un openID
66        // RFC3986 Regular expression for matching URIs
67        #if (preg_match('_^(?:([^:/?#]+):)?(?://([^/?#]*))?([^?#]*)(?:\?([^#]*))?(?:#(.*))?$_', $login, $uri_parts)
68        #       AND ($uri_parts[1] == "http" OR $uri_parts[1] == "https")) {
69
70        // s'il y a un point, c'est potentiellement un login openid
71        // ca permet d'eliminer un bon nombre de pseudos tout en
72        // autorisant les connexions openid sans avoir besoin de renseigner le http://
73        if (strpos($login, '.')!==false) {
74                return true;
75        } else {
76                return false;
77        }
78}
79
80?>
Note: See TracBrowser for help on using the repository browser.