+ if ($this->arg('revoke')) {
+ $this->revokeAccess($this->oauth_token);
+ } else {
+ // TRANS: Client error when submitting a form with unexpected information.
+ $this->clientError(_('Unexpected form submission.'), 401);
+ return false;
+ }
+ }
+
+ /**
+ * Revoke an access token
+ *
+ * XXX: Confirm revoke before doing it
+ *
+ * @param int $appId the ID of the application
+ *
+ */
+ function revokeAccess($token)
+ {
+ $cur = common_current_user();
+
+ $appUser = Oauth_application_user::getByUserAndToken($cur, $token);
+
+ if (empty($appUser)) {
+ // TRANS: Client error when trying to revoke access for an application while not being a user of it.
+ $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);
+
+ $result = $appUser->delete();
+
+ if (!$result) {
+ common_log_db_error($orig, 'DELETE', __FILE__);
+ // TRANS: Client error when revoking access has failed for some reason.
+ // TRANS: %s is the application ID revoking access failed for.
+ $this->clientError(sprintf(_('Unable to revoke access for application: %s.'), $app->id));
+ return false;
+ }
+
+ $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(
+ // TRANS: Success message after revoking access for an application.
+ // TRANS: %1$s is the application name, %2$s is the first part of the user token.
+ _('You have successfully revoked access for %1$s and the access token starting with %2$s.'),
+ $app->name,
+ substr($appUser->token, 0, 7)
+ );
+
+ $this->showForm($msg, true);