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

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

calquer le process de retour sur la version 2.1, en adaptant a l'absence d'api auth

File size: 3.7 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                $retour = auth_openid_url_retour_login($auteur['login'],url_absolue(self()));
47                $erreurs_openid = demander_authentification_openid($auteur['openid'], $retour);
48                // potentiellement, on arrive ici avec une erreur si l'openid donne n'existe pas
49                $auteur = false;
50        }
51
52        return is_array($auteur) ? $auteur : array();
53}
54
55
56function auth_openid_terminer_identifier_login($login, $serveur=''){
57        include_spip('inc/openid');
58        $retour = auth_openid_url_retour_login($login);
59        $auteur = terminer_authentification_openid($retour);
60
61        if (is_string($auteur))
62                return $auteur; // erreur !
63
64        if (is_array($auteur)
65                AND isset($auteur['openid'])
66                AND $openid = $auteur['openid']
67          AND $auteur = sql_fetsel("*", "spip_auteurs", "login=" . sql_quote($login)." AND openid=".sql_quote($openid),"","","","",$serveur)){
68
69                $auteur['auth'] = 'openid'; // on se log avec cette methode, donc
70                return $auteur;
71        }
72        return false;
73}
74
75
76
77/**
78 * Fournir une url de retour apres login par un SSO
79 * pour finir l'authentification
80 *
81 * @param string $auth_methode
82 * @param string $login
83 * @param string $serveur
84 * @return string
85 */
86function auth_openid_url_retour_login($login, $redirect='', $serveur=''){
87        $securiser_action = charger_fonction('securiser_action','inc');
88        return $securiser_action('controler_openid', $login, $redirect, true);
89}
90
91
92 /**
93  * Loger un auteur suite a son identification
94  *
95  * @param array $auteur
96  */
97 function auth_loger($auteur){
98        if (!is_array($auteur) OR !count($auteur))
99                return false;
100
101        $session = charger_fonction('session', 'inc');
102        $session($auteur);
103        $p = ($auteur['prefs']) ? unserialize($auteur['prefs']) : array();
104        $p['cnx'] = ($session_remember == 'oui') ? 'perma' : '';
105        $p = array('prefs' => serialize($p));
106        sql_updateq('spip_auteurs', $p, "id_auteur=" . $auteur['id_auteur']);
107
108        // Si on est admin, poser le cookie de correspondance
109        if ($auteur['statut'] == '0minirezo') {
110                include_spip('inc/cookie');
111                spip_setcookie('spip_admin', '@'.$auteur['login'],
112                time() + 7 * 24 * 3600);
113        }
114
115        //  bloquer ici le visiteur qui tente d'abuser de ses droits
116        verifier_visiteur();
117        return true;
118}
119?>
Note: See TracBrowser for help on using the repository browser.