summaryrefslogtreecommitdiff
path: root/actions
diff options
context:
space:
mode:
authorZach Copley <zach@status.net>2010-10-19 20:54:53 -0700
committerZach Copley <zach@status.net>2010-10-19 20:54:53 -0700
commite8b6d7c946da5fb2ce5397bccfd332de8ca1f9dd (patch)
tree3deb74da4e590c4f5756caed1fa1299a2b1bd2f0 /actions
parentd48f4a81d6af7a9a326ffc2e87d7de568ab48fbe (diff)
Add support for an anonymous OAuth consumer. Note: this requires a
small DB tweak. Oauth_application_user needs to have the primary compound key: (profile_id, application_id, token). http://status.net/open-source/issues/2761 This should also make it possible to have multiple access tokens per application. http://status.net/open-source/issues/2788
Diffstat (limited to 'actions')
-rw-r--r--actions/apioauthaccesstoken.php4
-rw-r--r--actions/apioauthauthorize.php15
-rw-r--r--actions/apistatusesupdate.php1
-rw-r--r--actions/oauthconnectionssettings.php99
4 files changed, 59 insertions, 60 deletions
diff --git a/actions/apioauthaccesstoken.php b/actions/apioauthaccesstoken.php
index 6b36d1919..21e0049ce 100644
--- a/actions/apioauthaccesstoken.php
+++ b/actions/apioauthaccesstoken.php
@@ -81,7 +81,7 @@ class ApiOauthAccessTokenAction extends ApiOauthAction
$app = $datastore->getAppByRequestToken($this->reqToken);
$atok = $server->fetch_access_token($req);
- } catch (OAuthException $e) {
+ } catch (Exception $e) {
common_log(LOG_WARNING, 'API OAuthException - ' . $e->getMessage());
common_debug(var_export($req, true));
$code = $e->getCode();
@@ -99,7 +99,7 @@ class ApiOauthAccessTokenAction extends ApiOauthAction
$this->verifier
);
- common_log(LOG_WARNIGN, $msg);
+ common_log(LOG_WARNING, $msg);
$this->clientError(_("Invalid request token or verifier.", 400, 'text'));
} else {
diff --git a/actions/apioauthauthorize.php b/actions/apioauthauthorize.php
index eb1000e25..01cbca18f 100644
--- a/actions/apioauthauthorize.php
+++ b/actions/apioauthauthorize.php
@@ -177,21 +177,6 @@ class ApiOauthAuthorizeAction extends Action
$this->serverError($e->getMessage());
}
- // Check to see if there was a previous token associated
- // with this user/app and kill it. If the user is doing this she
- // probably doesn't want any old tokens anyway.
-
- $appUser = Oauth_application_user::getByKeys($user, $this->app);
-
- if (!empty($appUser)) {
- $result = $appUser->delete();
-
- if (!$result) {
- common_log_db_error($appUser, 'DELETE', __FILE__);
- $this->serverError(_('Database error deleting OAuth application user.'));
- }
- }
-
// associated the authorized req token with the user and the app
$appUser = new Oauth_application_user();
diff --git a/actions/apistatusesupdate.php b/actions/apistatusesupdate.php
index 4715f7002..91dcdd10f 100644
--- a/actions/apistatusesupdate.php
+++ b/actions/apistatusesupdate.php
@@ -150,7 +150,6 @@ require_once INSTALLDIR . '/lib/mediafile.php';
class ApiStatusesUpdateAction extends ApiAuthAction
{
- var $source = null;
var $status = null;
var $in_reply_to_status_id = null;
var $lat = null;
diff --git a/actions/oauthconnectionssettings.php b/actions/oauthconnectionssettings.php
index 1fa70662f..72624de84 100644
--- a/actions/oauthconnectionssettings.php
+++ b/actions/oauthconnectionssettings.php
@@ -22,7 +22,7 @@
* @category Settings
* @package StatusNet
* @author Zach Copley <zach@status.net>
- * @copyright 2008-2009 StatusNet, Inc.
+ * @copyright 2008-2010 StatusNet, Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/
*/
@@ -50,13 +50,13 @@ require_once INSTALLDIR . '/lib/apioauthstore.php';
class OauthconnectionssettingsAction extends ConnectSettingsAction
{
- var $page = null;
- var $id = null;
+ var $page = null;
+ var $oauth_token = null;
function prepare($args)
{
parent::prepare($args);
- $this->id = (int)$this->arg('id');
+ $this->oauth_token = $this->arg('oauth_token');
$this->page = ($this->arg('page')) ? ($this->arg('page') + 0) : 1;
return true;
}
@@ -80,7 +80,7 @@ class OauthconnectionssettingsAction extends ConnectSettingsAction
function getInstructions()
{
- return _('You have allowed the following applications to access your account.');
+ return _('The following connections exist for your account.');
}
/**
@@ -97,22 +97,26 @@ class OauthconnectionssettingsAction extends ConnectSettingsAction
$offset = ($this->page - 1) * APPS_PER_PAGE;
$limit = APPS_PER_PAGE + 1;
- $application = $profile->getApplications($offset, $limit);
+ $connection = $profile->getConnectedApps($offset, $limit);
$cnt = 0;
- if (!empty($application)) {
- $al = new ApplicationList($application, $user, $this, true);
- $cnt = $al->show();
+ if (!empty($connection)) {
+ $cal = new ConnectedAppsList($connection, $user, $this);
+ $cnt = $cal->show();
}
if ($cnt == 0) {
$this->showEmptyListMessage();
}
- $this->pagination($this->page > 1, $cnt > APPS_PER_PAGE,
- $this->page, 'connectionssettings',
- array('nickname' => $user->nickname));
+ $this->pagination(
+ $this->page > 1,
+ $cnt > APPS_PER_PAGE,
+ $this->page,
+ 'connectionssettings',
+ array('nickname' => $user->nickname)
+ );
}
/**
@@ -138,11 +142,7 @@ class OauthconnectionssettingsAction extends ConnectSettingsAction
}
if ($this->arg('revoke')) {
- $this->revokeAccess($this->id);
-
- // XXX: Show some indicator to the user of what's been done.
-
- $this->showPage();
+ $this->revokeAccess($this->oauth_token);
} else {
$this->clientError(_('Unexpected form submission.'), 401);
return false;
@@ -150,32 +150,27 @@ class OauthconnectionssettingsAction extends ConnectSettingsAction
}
/**
- * Revoke access to an authorized OAuth application
+ * Revoke an access token
+ *
+ * XXX: Confirm revoke before doing it
*
* @param int $appId the ID of the application
*
*/
- function revokeAccess($appId)
+ function revokeAccess($token)
{
$cur = common_current_user();
- $app = Oauth_application::staticGet('id', $appId);
-
- if (empty($app)) {
- $this->clientError(_('No such application.'), 404);
- return false;
- }
-
- // XXX: Transaction here?
-
- $appUser = Oauth_application_user::getByKeys($cur, $app);
+ $appUser = Oauth_application_user::getByUserAndToken($cur, $token);
if (empty($appUser)) {
$this->clientError(_('You are not a user of that application.'), 401);
return false;
}
+ $app = Oauth_application::staticGet('id', $appUser->application_id);
+
$datastore = new ApiStatusNetOAuthDataStore();
$datastore->revoke_token($appUser->token, 1);
@@ -187,10 +182,25 @@ class OauthconnectionssettingsAction extends ConnectSettingsAction
return false;
}
- $msg = 'User %s (id: %d) revoked access to app %s (id: %d)';
- common_log(LOG_INFO, sprintf($msg, $cur->nickname,
- $cur->id, $app->name, $app->id));
-
+ $msg = 'API OAuth - user %s (id: %d) revoked access token %s for app id %d';
+ common_log(
+ LOG_INFO,
+ sprintf(
+ $msg,
+ $cur->nickname,
+ $cur->id,
+ $appUser->token,
+ $appUser->application_id
+ )
+ );
+
+ $msg = sprintf(
+ _('You have successfully revoked access for %s and the access token starting with %s'),
+ $app->name,
+ substr($appUser->token, 0, 7)
+ );
+
+ $this->showForm($msg, true);
}
function showEmptyListMessage()
@@ -204,15 +214,20 @@ class OauthconnectionssettingsAction extends ConnectSettingsAction
function showSections()
{
- $cur = common_current_user();
-
- $this->element('h2', null, 'Developers');
- $this->elementStart('p');
- $this->raw(_('Developers can edit the registration settings for their applications '));
- $this->element('a',
- array('href' => common_local_url('oauthappssettings')),
- 'here.');
- $this->elementEnd('p');
+ $cur = common_current_user();
+
+ $this->element('h2', null, 'Developers');
+ $this->elementStart('p');
+
+ $devMsg = sprintf(
+ _('Are you a developer? [Register an OAuth client application](%s) to use with this instance of StatusNet.'),
+ common_local_url('oauthappssettings')
+ );
+
+ $output = common_markup_to_html($devMsg);
+
+ $this->raw($output);
+ $this->elementEnd('p');
}
}