summaryrefslogtreecommitdiff
path: root/actions
diff options
context:
space:
mode:
authorZach Copley <zach@controlyourself.ca>2009-08-25 14:52:25 -0700
committerZach Copley <zach@controlyourself.ca>2009-08-25 14:52:25 -0700
commit9b9d80cd97704426e54434d8777c5c15154014ad (patch)
tree43568e74eda10ad648fa27ac3e6dff9b70157d1c /actions
parent209486d3be877d85b3e241797e6042283d0f66d6 (diff)
Pluginized Twitter settings stuff
Diffstat (limited to 'actions')
-rw-r--r--actions/twitterauthorization.php222
-rw-r--r--actions/twittersettings.php277
2 files changed, 0 insertions, 499 deletions
diff --git a/actions/twitterauthorization.php b/actions/twitterauthorization.php
deleted file mode 100644
index b04f35327..000000000
--- a/actions/twitterauthorization.php
+++ /dev/null
@@ -1,222 +0,0 @@
-<?php
-/**
- * Laconica, the distributed open-source microblogging tool
- *
- * Class for doing OAuth authentication against Twitter
- *
- * PHP version 5
- *
- * LICENCE: This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- * @category Twitter
- * @package Laconica
- * @author Zach Copely <zach@controlyourself.ca>
- * @copyright 2009 Control Yourself, Inc.
- * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
- * @link http://laconi.ca/
- */
-
-if (!defined('LACONICA')) {
- exit(1);
-}
-
-/**
- * Class for doing OAuth authentication against Twitter
- *
- * Peforms the OAuth "dance" between Laconica and Twitter -- requests a token,
- * authorizes it, and exchanges it for an access token. It also creates a link
- * (Foreign_link) between the Laconica user and Twitter user and stores the
- * access token and secret in the link.
- *
- * @category Twitter
- * @package Laconica
- * @author Zach Copley <zach@controlyourself.ca>
- * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
- * @link http://laconi.ca/
- *
- */
-class TwitterauthorizationAction extends Action
-{
- /**
- * Initialize class members. Looks for 'oauth_token' parameter.
- *
- * @param array $args misc. arguments
- *
- * @return boolean true
- */
- function prepare($args)
- {
- parent::prepare($args);
-
- $this->oauth_token = $this->arg('oauth_token');
-
- return true;
- }
-
- /**
- * Handler method
- *
- * @param array $args is ignored since it's now passed in in prepare()
- *
- * @return nothing
- */
- function handle($args)
- {
- parent::handle($args);
-
- if (!common_logged_in()) {
- $this->clientError(_('Not logged in.'), 403);
- }
-
- $user = common_current_user();
- $flink = Foreign_link::getByUserID($user->id, TWITTER_SERVICE);
-
- // If there's already a foreign link record, it means we already
- // have an access token, and this is unecessary. So go back.
-
- if (isset($flink)) {
- common_redirect(common_local_url('twittersettings'));
- }
-
- // $this->oauth_token is only populated once Twitter authorizes our
- // request token. If it's empty we're at the beginning of the auth
- // process
-
- if (empty($this->oauth_token)) {
- $this->authorizeRequestToken();
- } else {
- $this->saveAccessToken();
- }
- }
-
- /**
- * Asks Twitter for a request token, and then redirects to Twitter
- * to authorize it.
- *
- * @return nothing
- */
- function authorizeRequestToken()
- {
- try {
-
- // Get a new request token and authorize it
-
- $client = new TwitterOAuthClient();
- $req_tok =
- $client->getRequestToken(TwitterOAuthClient::$requestTokenURL);
-
- // Sock the request token away in the session temporarily
-
- $_SESSION['twitter_request_token'] = $req_tok->key;
- $_SESSION['twitter_request_token_secret'] = $req_tok->secret;
-
- $auth_link = $client->getAuthorizeLink($req_tok);
-
- } catch (TwitterOAuthClientException $e) {
- $msg = sprintf('OAuth client cURL error - code: %1s, msg: %2s',
- $e->getCode(), $e->getMessage());
- $this->serverError(_('Couldn\'t link your Twitter account.'));
- }
-
- common_redirect($auth_link);
- }
-
- /**
- * Called when Twitter returns an authorized request token. Exchanges
- * it for an access token and stores it.
- *
- * @return nothing
- */
- function saveAccessToken()
- {
-
- // Check to make sure Twitter returned the same request
- // token we sent them
-
- if ($_SESSION['twitter_request_token'] != $this->oauth_token) {
- $this->serverError(_('Couldn\'t link your Twitter account.'));
- }
-
- try {
-
- $client = new TwitterOAuthClient($_SESSION['twitter_request_token'],
- $_SESSION['twitter_request_token_secret']);
-
- // Exchange the request token for an access token
-
- $atok = $client->getAccessToken(TwitterOAuthClient::$accessTokenURL);
-
- // Test the access token and get the user's Twitter info
-
- $client = new TwitterOAuthClient($atok->key, $atok->secret);
- $twitter_user = $client->verifyCredentials();
-
- } catch (OAuthClientException $e) {
- $msg = sprintf('OAuth client cURL error - code: %1$s, msg: %2$s',
- $e->getCode(), $e->getMessage());
- $this->serverError(_('Couldn\'t link your Twitter account.'));
- }
-
- // Save the access token and Twitter user info
-
- $this->saveForeignLink($atok, $twitter_user);
-
- // Clean up the the mess we made in the session
-
- unset($_SESSION['twitter_request_token']);
- unset($_SESSION['twitter_request_token_secret']);
-
- common_redirect(common_local_url('twittersettings'));
- }
-
- /**
- * Saves a Foreign_link between Twitter user and local user,
- * which includes the access token and secret.
- *
- * @param OAuthToken $access_token the access token to save
- * @param mixed $twitter_user twitter API user object
- *
- * @return nothing
- */
- function saveForeignLink($access_token, $twitter_user)
- {
- $user = common_current_user();
-
- $flink = new Foreign_link();
-
- $flink->user_id = $user->id;
- $flink->foreign_id = $twitter_user->id;
- $flink->service = TWITTER_SERVICE;
-
- $creds = TwitterOAuthClient::packToken($access_token);
-
- $flink->credentials = $creds;
- $flink->created = common_sql_now();
-
- // Defaults: noticesync on, everything else off
-
- $flink->set_flags(true, false, false, false);
-
- $flink_id = $flink->insert();
-
- if (empty($flink_id)) {
- common_log_db_error($flink, 'INSERT', __FILE__);
- $this->serverError(_('Couldn\'t link your Twitter account.'));
- }
-
- save_twitter_user($twitter_user->id, $twitter_user->screen_name);
- }
-
-}
-
diff --git a/actions/twittersettings.php b/actions/twittersettings.php
deleted file mode 100644
index 0859ab9d3..000000000
--- a/actions/twittersettings.php
+++ /dev/null
@@ -1,277 +0,0 @@
-<?php
-/**
- * Laconica, the distributed open-source microblogging tool
- *
- * Settings for Twitter integration
- *
- * PHP version 5
- *
- * LICENCE: This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- * @category Settings
- * @package Laconica
- * @author Evan Prodromou <evan@controlyourself.ca>
- * @copyright 2008-2009 Control Yourself, Inc.
- * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
- * @link http://laconi.ca/
- */
-
-if (!defined('LACONICA')) {
- exit(1);
-}
-
-require_once INSTALLDIR.'/lib/connectsettingsaction.php';
-require_once INSTALLDIR.'/lib/twitter.php';
-
-/**
- * Settings for Twitter integration
- *
- * @category Settings
- * @package Laconica
- * @author Evan Prodromou <evan@controlyourself.ca>
- * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
- * @link http://laconi.ca/
- *
- * @see SettingsAction
- */
-
-class TwittersettingsAction extends ConnectSettingsAction
-{
- /**
- * Title of the page
- *
- * @return string Title of the page
- */
-
- function title()
- {
- return _('Twitter settings');
- }
-
- /**
- * Instructions for use
- *
- * @return instructions for use
- */
-
- function getInstructions()
- {
- return _('Connect your Twitter account to share your updates ' .
- 'with your Twitter friends and vice-versa.');
- }
-
- /**
- * Content area of the page
- *
- * Shows a form for associating a Twitter account with this
- * Laconica account. Also lets the user set preferences.
- *
- * @return void
- */
-
- function showContent()
- {
- if (!common_config('twitter', 'enabled')) {
- $this->element('div', array('class' => 'error'),
- _('Twitter is not available.'));
- return;
- }
-
- $user = common_current_user();
-
- $profile = $user->getProfile();
-
- $fuser = null;
-
- $flink = Foreign_link::getByUserID($user->id, TWITTER_SERVICE);
-
- if (!empty($flink)) {
- $fuser = $flink->getForeignUser();
- }
-
- $this->elementStart('form', array('method' => 'post',
- 'id' => 'form_settings_twitter',
- 'class' => 'form_settings',
- 'action' =>
- common_local_url('twittersettings')));
-
- $this->hidden('token', common_session_token());
-
- $this->elementStart('fieldset', array('id' => 'settings_twitter_account'));
-
- if (empty($fuser)) {
- $this->elementStart('ul', 'form_data');
- $this->elementStart('li', array('id' => 'settings_twitter_login_button'));
- $this->element('a', array('href' => common_local_url('twitterauthorization')),
- 'Connect my Twitter account');
- $this->elementEnd('li');
- $this->elementEnd('ul');
-
- $this->elementEnd('fieldset');
- } else {
- $this->element('legend', null, _('Twitter account'));
- $this->elementStart('p', array('id' => 'form_confirmed'));
- $this->element('a', array('href' => $fuser->uri), $fuser->nickname);
- $this->elementEnd('p');
- $this->element('p', 'form_note',
- _('Connected Twitter account'));
-
- $this->submit('remove', _('Remove'));
-
- $this->elementEnd('fieldset');
-
- $this->elementStart('fieldset', array('id' => 'settings_twitter_preferences'));
-
- $this->element('legend', null, _('Preferences'));
- $this->elementStart('ul', 'form_data');
- $this->elementStart('li');
- $this->checkbox('noticesend',
- _('Automatically send my notices to Twitter.'),
- ($flink) ?
- ($flink->noticesync & FOREIGN_NOTICE_SEND) :
- true);
- $this->elementEnd('li');
- $this->elementStart('li');
- $this->checkbox('replysync',
- _('Send local "@" replies to Twitter.'),
- ($flink) ?
- ($flink->noticesync & FOREIGN_NOTICE_SEND_REPLY) :
- true);
- $this->elementEnd('li');
- $this->elementStart('li');
- $this->checkbox('friendsync',
- _('Subscribe to my Twitter friends here.'),
- ($flink) ?
- ($flink->friendsync & FOREIGN_FRIEND_RECV) :
- false);
- $this->elementEnd('li');
-
- if (common_config('twitterbridge','enabled')) {
- $this->elementStart('li');
- $this->checkbox('noticerecv',
- _('Import my Friends Timeline.'),
- ($flink) ?
- ($flink->noticesync & FOREIGN_NOTICE_RECV) :
- false);
- $this->elementEnd('li');
-
- // preserve setting even if bidrection bridge toggled off
-
- if ($flink && ($flink->noticesync & FOREIGN_NOTICE_RECV)) {
- $this->hidden('noticerecv', true, 'noticerecv');
- }
- }
-
- $this->elementEnd('ul');
-
- if ($flink) {
- $this->submit('save', _('Save'));
- } else {
- $this->submit('add', _('Add'));
- }
-
- $this->elementEnd('fieldset');
- }
-
- $this->elementEnd('form');
- }
-
- /**
- * Handle posts to this form
- *
- * Based on the button that was pressed, muxes out to other functions
- * to do the actual task requested.
- *
- * All sub-functions reload the form with a message -- success or failure.
- *
- * @return void
- */
-
- function handlePost()
- {
- // CSRF protection
- $token = $this->trimmed('token');
- if (!$token || $token != common_session_token()) {
- $this->showForm(_('There was a problem with your session token. '.
- 'Try again, please.'));
- return;
- }
-
- if ($this->arg('save')) {
- $this->savePreferences();
- } else if ($this->arg('remove')) {
- $this->removeTwitterAccount();
- } else {
- $this->showForm(_('Unexpected form submission.'));
- }
- }
-
- /**
- * Disassociate an existing Twitter account from this account
- *
- * @return void
- */
-
- function removeTwitterAccount()
- {
- $user = common_current_user();
- $flink = Foreign_link::getByUserID($user->id, TWITTER_SERVICE);
-
- $result = $flink->delete();
-
- if (empty($result)) {
- common_log_db_error($flink, 'DELETE', __FILE__);
- $this->serverError(_('Couldn\'t remove Twitter user.'));
- return;
- }
-
- $this->showForm(_('Twitter account removed.'), true);
- }
-
- /**
- * Save user's Twitter-bridging preferences
- *
- * @return void
- */
-
- function savePreferences()
- {
- $noticesend = $this->boolean('noticesend');
- $noticerecv = $this->boolean('noticerecv');
- $friendsync = $this->boolean('friendsync');
- $replysync = $this->boolean('replysync');
-
- $user = common_current_user();
- $flink = Foreign_link::getByUserID($user->id, TWITTER_SERVICE);
-
- if (empty($flink)) {
- common_log_db_error($flink, 'SELECT', __FILE__);
- $this->showForm(_('Couldn\'t save Twitter preferences.'));
- return;
- }
-
- $original = clone($flink);
- $flink->set_flags($noticesend, $noticerecv, $replysync, $friendsync);
- $result = $flink->update($original);
-
- if ($result === false) {
- common_log_db_error($flink, 'UPDATE', __FILE__);
- $this->showForm(_('Couldn\'t save Twitter preferences.'));
- return;
- }
-
- $this->showForm(_('Twitter preferences saved.'), true);
- }
-
-}