- Have Twitter bridge check for a global key and secret if it can't

find one in the local config
- Refuse to work at all if the consumer key and secret aren't set
This commit is contained in:
Zach Copley 2010-03-02 16:49:29 -08:00
parent b1e172a3d9
commit ca86a4efb8
3 changed files with 101 additions and 35 deletions

View File

@ -20,7 +20,7 @@ on Twitter (http://twitter.com/apps). During the application
registration process your application will be assigned a "consumer" key registration process your application will be assigned a "consumer" key
and secret, which the plugin will use to make OAuth requests to Twitter. and secret, which the plugin will use to make OAuth requests to Twitter.
You can either pass the consumer key and secret in when you enable the You can either pass the consumer key and secret in when you enable the
plugin, or set it using the Twitter administration panel. plugin, or set it using the Twitter administration panel**.
When registering your application with Twitter set the type to "Browser" When registering your application with Twitter set the type to "Browser"
and your Callback URL to: and your Callback URL to:
@ -42,11 +42,26 @@ To enable the plugin, add the following to your config.php:
) )
); );
or just:
addPlugin('TwitterBridge');
if you want to set the consumer key and secret from the Twitter bridge
administration panel. (The Twitter bridge wont work at all
unless you configure it with a consumer key and secret.)
* Note: The plugin will still push notices to Twitter for users who * Note: The plugin will still push notices to Twitter for users who
have previously set up the Twitter bridge using their Twitter name and have previously set up the Twitter bridge using their Twitter name and
password under an older version of StatusNet, but all new Twitter password under an older version of StatusNet, but all new Twitter
bridge connections will use OAuth. bridge connections will use OAuth.
** For multi-site setups you can also set a global consumer key and and
secret. The Twitter bridge will fall back on the global key pair if
it can't find a local pair, e.g.:
$config['twitter']['global_consumer_key'] = 'YOUR_CONSUMER_KEY'
$config['twitter']['global_consumer_secret'] = 'YOUR_CONSUMER_SECRET'
Administration panel Administration panel
-------------------- --------------------

View File

@ -79,6 +79,30 @@ class TwitterBridgePlugin extends Plugin
} }
} }
/**
* Check to see if there is a consumer key and secret defined
* for Twitter integration.
*
* @return boolean result
*/
static function hasKeys()
{
$key = common_config('twitter', 'consumer_key');
$secret = common_config('twitter', 'consumer_secret');
if (empty($key) && empty($secret)) {
$key = common_config('twitter', 'global_consumer_key');
$secret = common_config('twitter', 'global_consumer_secret');
}
if (!empty($key) && !empty($secret)) {
return true;
}
return false;
}
/** /**
* Add Twitter-related paths to the router table * Add Twitter-related paths to the router table
* *
@ -91,14 +115,22 @@ class TwitterBridgePlugin extends Plugin
function onRouterInitialized($m) function onRouterInitialized($m)
{ {
$m->connect( if (self::hasKeys()) {
'twitter/authorization', $m->connect(
array('action' => 'twitterauthorization') 'twitter/authorization',
); array('action' => 'twitterauthorization')
$m->connect('settings/twitter', array('action' => 'twittersettings')); );
$m->connect(
if (common_config('twitter', 'signin')) { 'settings/twitter', array(
$m->connect('main/twitterlogin', array('action' => 'twitterlogin')); 'action' => 'twittersettings'
)
);
if (common_config('twitter', 'signin')) {
$m->connect(
'main/twitterlogin',
array('action' => 'twitterlogin')
);
}
} }
$m->connect('admin/twitter', array('action' => 'twitteradminpanel')); $m->connect('admin/twitter', array('action' => 'twitteradminpanel'));
@ -117,7 +149,7 @@ class TwitterBridgePlugin extends Plugin
{ {
$action_name = $action->trimmed('action'); $action_name = $action->trimmed('action');
if (common_config('twitter', 'signin')) { if (self::hasKeys() && common_config('twitter', 'signin')) {
$action->menuItem( $action->menuItem(
common_local_url('twitterlogin'), common_local_url('twitterlogin'),
_m('Twitter'), _m('Twitter'),
@ -138,15 +170,16 @@ class TwitterBridgePlugin extends Plugin
*/ */
function onEndConnectSettingsNav(&$action) function onEndConnectSettingsNav(&$action)
{ {
$action_name = $action->trimmed('action'); if (self::hasKeys()) {
$action_name = $action->trimmed('action');
$action->menuItem(
common_local_url('twittersettings'),
_m('Twitter'),
_m('Twitter integration options'),
$action_name === 'twittersettings'
);
$action->menuItem(
common_local_url('twittersettings'),
_m('Twitter'),
_m('Twitter integration options'),
$action_name === 'twittersettings'
);
}
return true; return true;
} }
@ -188,12 +221,12 @@ class TwitterBridgePlugin extends Plugin
*/ */
function onStartEnqueueNotice($notice, &$transports) function onStartEnqueueNotice($notice, &$transports)
{ {
// Avoid a possible loop if (self::hasKeys()) {
// Avoid a possible loop
if ($notice->source != 'twitter') { if ($notice->source != 'twitter') {
array_push($transports, 'twitter'); array_push($transports, 'twitter');
}
} }
return true; return true;
} }
@ -206,18 +239,19 @@ class TwitterBridgePlugin extends Plugin
*/ */
function onGetValidDaemons($daemons) function onGetValidDaemons($daemons)
{ {
array_push( if (self::hasKeys()) {
$daemons,
INSTALLDIR
. '/plugins/TwitterBridge/daemons/synctwitterfriends.php'
);
if (common_config('twitterimport', 'enabled')) {
array_push( array_push(
$daemons, $daemons,
INSTALLDIR INSTALLDIR
. '/plugins/TwitterBridge/daemons/twitterstatusfetcher.php' . '/plugins/TwitterBridge/daemons/synctwitterfriends.php'
); );
if (common_config('twitterimport', 'enabled')) {
array_push(
$daemons,
INSTALLDIR
. '/plugins/TwitterBridge/daemons/twitterstatusfetcher.php'
);
}
} }
return true; return true;
@ -232,7 +266,9 @@ class TwitterBridgePlugin extends Plugin
*/ */
function onEndInitializeQueueManager($manager) function onEndInitializeQueueManager($manager)
{ {
$manager->connect('twitter', 'TwitterQueueHandler'); if (self::hasKeys()) {
$manager->connect('twitter', 'TwitterQueueHandler');
}
return true; return true;
} }

View File

@ -22,7 +22,7 @@
* @category Integration * @category Integration
* @package StatusNet * @package StatusNet
* @author Zach Copley <zach@status.net> * @author Zach Copley <zach@status.net>
* @copyright 2009 StatusNet, Inc. * @copyright 2009-2010 StatusNet, Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/ * @link http://status.net/
*/ */
@ -61,8 +61,23 @@ class TwitterOAuthClient extends OAuthClient
$consumer_key = common_config('twitter', 'consumer_key'); $consumer_key = common_config('twitter', 'consumer_key');
$consumer_secret = common_config('twitter', 'consumer_secret'); $consumer_secret = common_config('twitter', 'consumer_secret');
parent::__construct($consumer_key, $consumer_secret, if (empty($consumer_key) && empty($consumer_secret)) {
$oauth_token, $oauth_token_secret); $consumer_key = common_config(
'twitter',
'global_consumer_key'
);
$consumer_secret = common_config(
'twitter',
'global_consumer_secret'
);
}
parent::__construct(
$consumer_key,
$consumer_secret,
$oauth_token,
$oauth_token_secret
);
} }
// XXX: the following two functions are to support the horrible hack // XXX: the following two functions are to support the horrible hack