source: spip-zone/_plugins_/authentification/browserid/trunk/action/persona_verify.php @ 63445

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

renommage de browserid en persona + mise a jour du js

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