source: spip-zone/_plugins_/twitter/trunk/action/twitter_oauth_authorize.php @ 81826

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

Le plugin utilise désormais l'API interne recuperer_page plutot que cURL, ce qui permet de passer par le proxy configuré dans SPIP

File size: 4.9 KB
Line 
1<?php
2/*
3 * Plugin spip|twitter
4 * (c) 2009-2013
5 *
6 * envoyer et lire des messages de Twitter
7 * distribue sous licence GNU/LGPL
8 *
9 */
10
11if (!defined("_ECRIRE_INC_VERSION")) return;
12
13/**
14 * Fonction vérifiant le retour de twitter
15 * Elle met dans la configuration du plugin les tokens
16 * nécessaires pour de futures connexions
17 */
18function action_twitter_oauth_authorize_dist(){
19
20        include_spip('inc/twitteroauthspip');
21        include_spip('inc/session');
22
23        $redirect = session_get('twitter_redirect') ? session_get('twitter_redirect') : $GLOBALS['meta']['url_site_spip'];
24        if (isset($GLOBALS['visiteur_session']['oauth_token'])
25                AND $GLOBALS['visiteur_session']['oauth_token']){
26
27                if(_request('denied')){
28                        spip_log("action_twitter_oauth_authorize_dist : denied",'twitter'._LOG_ERREUR);
29                        $redirect = parametre_url($redirect,'erreur','auth_denied','&');
30                        session_set('oauth_status','denied');
31                        $GLOBALS['redirect'] = $redirect;
32                }
33                elseif (_request('oauth_token') && ($GLOBALS['visiteur_session']['oauth_token'] !== _request('oauth_token'))) {
34                        spip_log("action_twitter_oauth_authorize_dist : old_token",'twitter'._LOG_ERREUR);
35                        $redirect = parametre_url($redirect,'erreur','old_token','&');
36                        session_set('oauth_status','oldtoken');
37                        $GLOBALS['redirect'] = $redirect;
38                }
39                else {
40                        $cfg = @unserialize($GLOBALS['meta']['microblog']);
41                        $consumer_key = $cfg['twitter_consumer_key'];
42                        $consumer_secret = $cfg['twitter_consumer_secret'];
43
44                        $connection = new TwitterOAuthSPIP($consumer_key, $consumer_secret, $GLOBALS['visiteur_session']['oauth_token'], $GLOBALS['visiteur_session']['oauth_token_secret']);
45                        $access_token = $connection->getAccessToken(_request('oauth_verifier'));
46                        session_set('access_token',$access_token);
47
48                        /**
49                         * Si le code de retour est 200 :
50                         * L'utilisateur a été vérifié et
51                         * les tokens d'accès peuvent être sauvegardés pour un usage futur
52                         * on appelle la callback en session qui en fait ce qu'elle veut
53                         */
54                        if (200 == $connection->http_code) {
55
56                                if ($callback = session_get('twitter_callback')
57                                  AND $callback = charger_fonction($callback,"action",true)){
58                                        // si la callback retourne quelque chose c'est une url de redirect
59                                        if ($r = $callback(true, $redirect))
60                                                $redirect = $r;
61                                }
62
63                                $GLOBALS['redirect'] = $redirect;
64                        }
65                        else {
66                                spip_log("Erreur '".$connection->http_code."' au retour pour recuperation des tokens dans action_twitter_oauth_callback_dist",'twitter'._LOG_ERREUR);
67                                $GLOBALS['redirect'] = $redirect;
68                        }
69                }
70        }
71        else {
72                // rien a faire ici !
73                $GLOBALS['redirect'] = $redirect;
74        }
75
76        // vider la session
77        foreach(array('access_token','oauth_token','oauth_token_secret','twitter_redirect','twitter_callback') as $k)
78                if (isset($GLOBALS['visiteur_session'][$k]))
79                        session_set($k);
80}
81
82function twitter_oauth_authorize($callback, $redirect, $sign_in=true){
83        $cfg = @unserialize($GLOBALS['meta']['microblog']);
84
85        $redirect = parametre_url(parametre_url($redirect,'erreur_code',''),'erreur','','&');
86
87        include_spip('inc/filtres');
88        include_spip('inc/twitteroauthspip');
89        include_spip('inc/session');
90
91        /**
92         * L'URL de callback qui sera utilisée suite à la validation chez twitter
93         * Elle vérifiera le retour et finira la configuration
94         */
95        $oauth_callback = url_absolue(generer_url_action('twitter_oauth_authorize','',true));
96
97        /**
98         * Récupération des tokens depuis twitter par rapport à notre application
99         * On les place dans la session de l'individu en cours
100         * Ainsi que l'adresse de redirection pour la seconde action
101         */
102        try {
103                $connection = new TwitterOAuthSPIP($cfg['twitter_consumer_key'], $cfg['twitter_consumer_secret']);
104                $request_token = $connection->getRequestToken($oauth_callback);
105                $token = $request_token['oauth_token'];
106                session_set('oauth_token',$token);
107                session_set('oauth_token_secret',$request_token['oauth_token_secret']);
108                session_set('twitter_redirect',str_replace('&amp;','&',$redirect));
109                session_set('twitter_callback',$callback);
110
111                /**
112                 * Vérification du code de retour
113                 */
114                switch ($code = $connection->http_code) {
115                        /**
116                         * Si le code de retour est 200 (ok)
117                         * On envoie l'utilisateur vers l'url d'autorisation
118                         */
119                        case 200:
120                                $url = $connection->getAuthorizeURL($token, $sign_in);
121                                include_spip('inc/headers');
122                                $GLOBALS['redirect'] = $url;
123                                #echo redirige_formulaire($url);
124                                break;
125                        /**
126                         * Sinon on le renvoie vers le redirect avec une erreur
127                         */
128                        default:
129                                spip_log('Erreur connexion twitter','twitter'._LOG_ERREUR);
130                                spip_log($connection, 'twitter'._LOG_ERREUR);
131                                $redirect = parametre_url($redirect,'erreur_code',$code);
132                                $redirect = parametre_url($redirect,'erreur','erreur_conf_app','&');
133                                $GLOBALS['redirect'] = $redirect;
134                                break;
135                }
136        }
137        catch(Exception $e){
138                session_set('oauth_erreur_message',$e->getMessage());
139                $redirect = parametre_url($redirect,'erreur',"erreur_oauth",'&');
140                $GLOBALS['redirect'] = $redirect;
141        }
142}
143?>
Note: See TracBrowser for help on using the repository browser.