1 | <?php |
---|
2 | |
---|
3 | /* |
---|
4 | * Plugin persona pour SPIP |
---|
5 | * |
---|
6 | * (c) Fil 2011 - Licence GNU/GPL |
---|
7 | * |
---|
8 | */ |
---|
9 | |
---|
10 | define('_PERSONA_VERIFY', "https://verifier.login.persona.org/verify"); |
---|
11 | |
---|
12 | |
---|
13 | function 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 | |
---|
24 | function 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/browserid/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 | |
---|