source: spip-zone/_plugins_/authentification/browserid/action/browserid_verify.php @ 54942

Last change on this file since 54942 was 54942, checked in by fil@…, 9 years ago

creer a la volee un compte pour l'utilisateur qui vient de se connecter : 1comite si les inscriptions de redacteurs sont ouvertes, 6forum si les forums sont sur abonnement

File size: 2.9 KB
Line 
1<?php
2
3/*
4 *  Plugin BrowserID pour SPIP
5 *
6 *  (c) Fil 2011 - Licence GNU/GPL
7 *
8 */
9
10define('_BROWSERID_VERIFY', "https://browserid.org/verify");
11
12
13function browserid_auth_loger($auteur, &$a) {
14        include_spip('inc/auth');
15        include_spip('inc/texte');
16        auth_loger($auteur);
17        $a['session_nom'] = typo($auteur['nom']);
18        $a['session_statut'] = $auteur['statut'];
19        $a['autoriser_ecrire'] = autoriser('ecrire');
20
21}
22
23function action_browserid_verify() {
24
25        $a = array();
26
27        if ($assertion = _request('assertion')
28        AND $audience = _request('audience')
29        ) {
30                include_spip('inc/filtres_mini');
31                $server = url_absolue('/');
32                if ($server !== "$audience/") {
33                        $a['status'] = 'failure';
34                        $a['reason'] = "incorrect audience";
35                }
36                else {
37                        include_spip('inc/distant');
38                        $d = recuperer_page(_BROWSERID_VERIFY, false, false, null,
39                        $data = array(
40                                'assertion' => $assertion,
41                                'audience' => $audience
42                        )
43                        # forcer l'absence de boundary : browserid.org/verify ne le tolere pas
44                        # cf. https://github.com/mozilla/browserid/issues/649
45                        , $boundary = false
46                        );
47
48                        if ($dd = @json_decode($d)) {
49                                $a = (array) $dd;
50                                if ($a['status'] == 'okay'
51                                AND $m = $a['email']
52                                AND $a['expires'] > time()
53                                AND $a['audience']."/" == $server
54                                ) {
55                                        include_spip('inc/session');
56
57                                        // on verifie si l'auteur existe deja en base, si oui on le loge
58                                        include_spip('base/abstract_sql');
59                                        $auteur = sql_fetsel('*', 'spip_auteurs', 'email='.sql_quote($a['email']));
60
61                                        if ($auteur) {
62                                                browserid_auth_loger($auteur, $a);
63
64                                                # envoyer une action javascript
65#                                               if ($auteur['statut'] == '0minirezo') {
66#                                                       $a['action'] = 'console.log("tu es admin mon pote");';
67#                                               }
68                                                # ou envoyer un message
69                                                #$a['message'] = 'Welcome '.$a['session_nom'];
70
71                                        }
72
73                                        else
74                                        /* OPTION : creer un compte pour l'auteur */
75                                        {
76                                                $statut_inscription = null;
77                                                if ($GLOBALS['meta']["accepter_inscriptions"] == 'oui')
78                                                        $statut_inscription = '1comite';
79                                                else if ($GLOBALS['meta']["forums_publics"] == 'abo')
80                                                        $statut_inscription = '6forum';
81
82                                                if ($statut_inscription) {
83                                                        sql_insertq('spip_auteurs', array(
84                                                                'email' => $a['email'],
85                                                                'statut' => $statut_inscription,
86                                                                'nom' => preg_replace('/@.*/', '', $a['email']),
87                                                                'login' => md5($a['email']), # unicite a la rache.
88                                                        ));
89                                                        $auteur = sql_fetsel('*', 'spip_auteurs', 'email='.sql_quote($a['email']));
90                                                        browserid_auth_loger($auteur, $a);
91                                                }
92                                        }
93
94                                        session_set('session_email', $a['email']);
95                                        session_set('email_confirme', $a['email']);
96
97                                } else {
98                                        $a['status'] = 'failure';
99                                }
100                        }
101                        else {
102                                $a['status'] = 'failure';
103                                $a['reason'] = "could not connect to the verification server; please retry";
104                        }
105                }
106        } else {
107                $a['status'] = 'failure';
108                $a['reason'] = "need assertion and audience";
109        }
110
111
112        header('Content-Type: text/json; charset=utf-8');
113        echo json_encode((object) $a);
114}
115
Note: See TracBrowser for help on using the repository browser.