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

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

message d'erreur en cas d'url openid inconnue

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