Dotclear

source: plugins/TaC/index.php @ 2628

Revision 2628, 7.6 KB checked in by JcDenis, 13 years ago (diff)

TaC - Twitter Authentication Client 0.1-alpha5

  • First lab release
Line 
1<?php
2# -- BEGIN LICENSE BLOCK ----------------------------------
3# This file is part of TaC, a plugin for Dotclear 2.
4#
5# Copyright (c) 2009-2010 JC Denis and contributors
6# jcdenis@gdwd.com
7#
8# Licensed under the GPL version 2.0 license.
9# A copy of this license is available in LICENSE file or at
10# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
11# -- END LICENSE BLOCK ------------------------------------
12
13if (!defined('DC_CONTEXT_ADMIN')){return;}
14
15dcPage::check('amdin');
16$msg = '';
17
18# Si vous ne souhaitez pas avoir vos propres tokens
19# il suffit de rediriger l'utilisteur sur cette page pour qu'il s'identifie.
20# Pour utiliser oAuth pour vos plugins twitter avec TaC,
21# Voici un exemple dans une utilisation courante (une fois vérifié):
22/*
23if ($core->plugins->moduleExists('tac')) {
24     $has_registry = $has_access = false;
25     
26     try {
27          $plop = new tac($core,'TaC',null);
28          $has_registry = $plop->checkRegistry();
29          $has_access = $plop->checkAccess();
30     }
31     catch(Exception $e) {
32          $has_registry = $has_access = false;
33          $core->error->add($e->getMessage());
34     }
35     
36     // Exemples d'echange avec Twitter
37     if ($has_access) {
38          try {
39               // Envoyer de message
40               $msg = $plop->tic->statusesUpdate('mon message vers twitter');
41               // ou
42               $msg = $plop->post('statuses/update',array('status'=>'mon message vers twitter'));
43               if ('' != $msg->text) {
44                    echo '<p>Message envoyé</p>';
45               }
46               
47               // Verifier les limits de tweet
48               $rate = $plop->tic->accountRateLimitStatus()
49               echo '<p>'.$content->remaining_hits.'</p>';
50          }
51          catch(Exception $e) {
52               $core->error->add($e->getMessage());
53          }
54     }
55}
56*/
57# Suivez le déroulement de cette page pour comprendre son utilistion et
58# ainsi pourvoir l'intégrer à votre plugin.
59
60$action = isset($_REQUEST['action']) ? $_REQUEST['action'] : false;
61
62# Ouvre un object pour le plugin TaC et pour tous les utilisateurs du blog (null)
63try {
64     $TaC = new tac($core,'TaC',null);
65}
66catch(Exception $e) {
67     $core->error->add($e->getMessage());
68}
69
70# On test si le plugin est connu (si oui il sera chargé dans l'objet)
71if (!$core->error->flag())
72{
73     try {
74          $has_registry = $TaC->checkRegistry();
75     }
76     catch(Exception $e) {
77          $has_registry = false;
78          $core->error->add($e->getMessage());
79     }
80}
81
82# Si le plugin est inconnu on l'ajoute
83if (!$core->error->flag() && !$has_registry)
84{
85     $cur = $core->con->openCursor($core->prefix.'tac_registry');
86     
87     #
88     # Exemple ici pour le plugin TaC
89     #
90     # Pour avoir vos propres tokens sur Twitter il suffit d'enregistrer
91     # votre plugin comme une application sur:
92     # http://twitter.com/apps
93     # - Pour l'url de callback il faut en renseigner
94     #   une même si elle sera réécrite ici.
95     # - Pour le type d'accés TaC supporte le Read & Write
96     #
97     # Ensuite remplacer les infos ci-dessous par celle donner sur Twitter
98     # Et lancer "tac" avec comme deuxiéme parametre l'id de votre plugin.
99     # (de préférence car même si pour l'instant il n'y a pas de test sur l'id
100     # cela risque de changer dans les versions futurs)
101     #
102     try {
103          $cur->cr_id = 'TaC';
104          $cur->cr_key = 'qXCQrZLAAEzNf7IYxQB6w';
105          $cur->cr_secret = 'fbKB6VIcMnA5xhuLXq3wgaw76fKBDSAd98HjyjjZi6g';
106          //$cur->cr_expiry = 0;
107          //$cur->cr_sig_method = 'HMAC-SHA1';
108          $cur->cr_url_request = 'http://twitter.com/oauth/request_token';
109          $cur->cr_url_access = 'http://twitter.com/oauth/access_token';
110          $cur->cr_url_autorize = 'http://twitter.com/oauth/authorize';
111          $cur->cr_url_authenticate = 'https://api.twitter.com/oauth/authenticate';
112         
113          $TaC->addRegistry($cur);
114         
115          # Puis on retente de le charger
116          $has_registry = $TaC->checkRegistry();
117         
118          # Si il n'est toujours pas reconnu, il y a un bug!
119          if (!$has_registry) {
120               throw new Exception(__('Failed to register plugin'));
121          }
122     }
123     catch(Exception $e) {
124          $core->error->add($e->getMessage());
125     }
126}
127
128# On test si l'utilisateur est connu (si oui il sera chargé dans l'objet)
129if (!$core->error->flag())
130{
131     try {
132          $has_access = $TaC->checkAccess();
133     }
134     catch(Exception $e) {
135          $has_access = false;
136          $core->error->add($e->getMessage());
137     }
138}
139
140# 1ère phase de l'authentification
141#
142# Si l'utilisateur est inconnu on demarre le processus d'authentification oAuth
143# avec le joli bouton de connexion
144# voir plus bas: if (!$core->error->flag() && !$action && !$has_access)
145
146
147# 2ème phase de l'authentification
148#
149# L'utilisateur souhaite s'authentifier
150# On lance une requete pour avoir un token temporaire
151# Si la requete est valide, on redirige l'utilisateur vers le serveur oAuth
152# en lui précisant l'url de retour
153if (!$core->error->flag() && $action == 'redirect')
154{
155     try {
156          $url = $TaC->requestAccess(DC_ADMIN_URL.'plugin.php?p=TaC&action=callback');
157          http::redirect($url);
158     }
159     catch(Exception $e) {
160          $core->error->add($e->getMessage());
161     }
162}
163
164# 3éme phase de l'authentification
165#
166# L'utilisateur revient du seveur oAuth avec un code définitif
167# Si il n'y a pas d'erreur on recharge la page pour tout prendre en compte
168if (!$core->error->flag() && $action == 'callback')
169{
170     try {
171          $has_grant = $TaC->grantAccess();
172         
173          # Sinon on efface toute les infos de l'utilisateur
174          if (!$has_grant) {
175               $TaC->cleanAccess();
176          }
177          http::redirect($p_url);
178     }
179     catch(Exception $e) {
180          $has_grant = false;
181          $core->error->add($e->getMessage());
182     }
183}
184
185# Additionnel
186# Nettoyer un acces
187if (!$core->error->flag() && $action == 'clean')
188{
189     try {
190          $TaC->cleanAccess();
191          http::redirect($p_url);
192     }
193     catch(Exception $e) {
194          $core->error->add($e->getMessage());
195     }
196}
197
198# Additionnel
199# Envoyer un message sur twitter
200if (!$core->error->flag() && $action == 'sendtweet' && !empty($_POST['message']))
201{
202     $message = trim($_POST['message']);
203     if (!empty($message)) {
204          $params = array(
205               'status' => (string) $message
206          );
207          $su = $TaC->post('statuses/update',$params);
208          if ('' != $su->text) {
209               $msg = '<p class="message">'.__('Your message have been successfully sent.').'</p>';
210          }
211          else {
212               $msg = '<p class="message">'.__('Not sure that your message is sent').'</p>';
213          }
214     }
215}
216
217# Display
218echo '
219<html><head><title>TaC - '.__("Twitter Authentication Client").'</title></head>
220<body>
221<h2>'.html::escapeHTML($core->blog->name).' &rsaquo; TaC - '.__("Twitter Authentication Client").'</h2>';
222
223if (!$core->error->flag() && $has_access)
224{
225     echo $msg;
226
227     $user = $TaC->get('account/verify_credentials');
228     $content = $TaC->get('account/rate_limit_status');
229     
230     echo '
231     <ul>
232     <li>'.sprintf(__('Your are connected as "%s"'),$user->screen_name).'</li>
233     <li>'.sprintf(__('It remains %s API hits'),$content->remaining_hits).'</li>
234     <li><a href="'.$p_url.'&action=clean">'.__('Disconnect and clean access').'</a></li>
235     </ul>
236     
237     <form method="post" action="'.$p_url.'">
238     <p><label>'.__('Quick send message to your twitter timeline:').' <br />'.
239     form::field(array('message'),60,140,'').'</label></p>
240     <p><input type="submit" name="save" value="'.__('send').'" />'.
241     $core->formNonce().
242     form::hidden(array('p'),'TaC').
243     form::hidden(array('action'),'sendtweet').'
244     </p>
245     </form>';
246}
247
248# First part
249if (!$core->error->flag() && !$action && !$has_access)
250{
251     echo '
252     <fieldset><legend>'.__('Connect your blog with your twitter account through TaC').'</legend>
253     <p><a href="'.$p_url.'&action=redirect"><img src="index.php?pf=TaC/img/tac_light.png" alt="Sign in with Twitter"/></a></p>
254     </fieldset>';
255}
256
257if ($core->error->flag()) {
258     echo '<p><a href="'.$p_url.'">'.__('Retry').'</a></p>';
259}
260
261echo '
262<br class="clear"/>
263<p class="right">
264TaC - '.$core->plugins->moduleInfo('TaC','version').'&nbsp;
265<img alt="TaC" src="index.php?pf=TaC/icon.png" />
266</p>';
267dcPage::helpBlock('TaC');
268echo '</body></html>';
269?>
Note: See TracBrowser for help on using the repository browser.

Sites map