Revoke access token UI

This commit is contained in:
Zach Copley 2010-01-13 21:11:08 +00:00
parent dbcbc2fe7f
commit 9e7f47652d
5 changed files with 71 additions and 11 deletions

View File

@ -50,10 +50,12 @@ class OauthconnectionssettingsAction extends ConnectSettingsAction
{ {
var $page = null; var $page = null;
var $id = null;
function prepare($args) function prepare($args)
{ {
parent::prepare($args); parent::prepare($args);
$this->id = (int)$this->arg('id');
$this->page = ($this->arg('page')) ? ($this->arg('page') + 0) : 1; $this->page = ($this->arg('page')) ? ($this->arg('page') + 0) : 1;
return true; return true;
} }
@ -101,16 +103,16 @@ class OauthconnectionssettingsAction extends ConnectSettingsAction
$application = $profile->getApplications($offset, $limit); $application = $profile->getApplications($offset, $limit);
$cnt == 0; $cnt == 0;
if (!empty($application)) { if (!empty($application)) {
$al = new ApplicationList($application, $user, $this, true); $al = new ApplicationList($application, $user, $this, true);
$cnt = $al->show(); $cnt = $al->show();
} }
if ($cnt == 0) { if ($cnt == 0) {
$this->showEmptyListMessage(); $this->showEmptyListMessage();
} }
$this->pagination($this->page > 1, $cnt > APPS_PER_PAGE, $this->pagination($this->page > 1, $cnt > APPS_PER_PAGE,
$this->page, 'connectionssettings', $this->page, 'connectionssettings',
@ -139,6 +141,50 @@ class OauthconnectionssettingsAction extends ConnectSettingsAction
return; return;
} }
if ($this->arg('revoke')) {
$this->revokeAccess($this->id);
// XXX: Show some indicator to the user of what's been done.
$this->showPage();
} else {
$this->clientError(_('Unexpected form submission.'), 401);
return false;
}
}
function revokeAccess($appId)
{
$cur = common_current_user();
$app = Oauth_application::staticGet('id', $appId);
if (empty($app)) {
$this->clientError(_('No such application.'), 404);
return false;
}
$appUser = Oauth_application_user::getByKeys($cur, $app);
if (empty($appUser)) {
$this->clientError(_('You are not a user of that application.'), 401);
return false;
}
$orig = clone($appUser);
$appUser->access_type = 0; // No access
$result = $appUser->update();
if (!$result) {
common_log_db_error($orig, 'UPDATE', __FILE__);
$this->clientError(_('Unable to revoke access for app: ' . $app->id));
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));
} }
function showEmptyListMessage() function showEmptyListMessage()

View File

@ -92,6 +92,7 @@ class ShowApplicationAction extends OwnerDesignAction
if ($cur->id != $this->owner->id) { if ($cur->id != $this->owner->id) {
$this->clientError(_('You are not the owner of this application.'), 401); $this->clientError(_('You are not the owner of this application.'), 401);
return false;
} }
return true; return true;

View File

@ -34,7 +34,7 @@ class Oauth_application_user extends Memcached_DataObject
$oau = new Oauth_application_user(); $oau = new Oauth_application_user();
$oau->profile_id = $user->id; $oau->profile_id = $user->id;
$oau->application_id = $app->id; $oau->application_id = $app->id;
$oau->limit(1); $oau->limit(1);
$result = $oau->find(true); $result = $oau->find(true);

View File

@ -358,7 +358,8 @@ class Profile extends Memcached_DataObject
'SELECT a.* ' . 'SELECT a.* ' .
'FROM oauth_application_user u, oauth_application a ' . 'FROM oauth_application_user u, oauth_application a ' .
'WHERE u.profile_id = %d ' . 'WHERE u.profile_id = %d ' .
'AND a.id = u.application_id ' . 'AND a.id = u.application_id ' .
'AND u.access_type > 0 ' .
'ORDER BY u.created DESC '; 'ORDER BY u.created DESC ';
if ($offset > 0) { if ($offset > 0) {

View File

@ -142,7 +142,19 @@ class ApplicationList extends Widget
$this->out->raw($txt); $this->out->raw($txt);
$this->out->elementEnd('li'); $this->out->elementEnd('li');
// XXX: Add revoke access button $this->out->elementStart('li', 'entity_revoke');
$this->out->elementStart('form', array('id' => 'form_revoke_app',
'class' => 'form_revoke_app',
'method' => 'POST',
'action' =>
common_local_url('oauthconnectionssettings')));
$this->out->elementStart('fieldset');
$this->out->hidden('id', $this->application->id);
$this->out->hidden('token', common_session_token());
$this->out->submit('revoke', _('Revoke'));
$this->out->elementEnd('fieldset');
$this->out->elementEnd('form');
$this->out->elementEnd('li');
} }
} }