123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289 |
- <?php
- /**
- * @file
- * Functions related to a user's authorization section
- */
- function oauth_common_page_user_authorizations($account) {
- $header = array(
- array('data' => t('Application'), 'class' => array("oauth-common-authorization-application")),
- array('data' => t('Key'), 'class' => array("oauth-common-authorization-key")),
- array('data' => t('Created'), 'class' => array("oauth-common-authorization-created")),
- array('data' => t('Expires'), 'class' => array("oauth-common-authorization-expires")),
- array('data' => t('Operations'), 'class' => array("oauth-common-authorization-operations")),
- );
- $access_tokens = oauth_common_get_user_provider_tokens($account->uid);
- $rows = array();
- foreach ($access_tokens as $token) {
- $consumer = $token->consumer;
- $data = array(
- 'application' => array(
- 'data' => check_plain($consumer->name),
- 'class' => array("oauth-common-authorization-application"),
- ),
- 'key' => array(
- 'data' => substr($token->key, 0, 6) . '...',
- 'class' => array("oauth-common-authorization-key"),
- ),
- 'created' => array(
- 'data' => format_date($token->created),
- 'class' => array("oauth-common-authorization-created"),
- ),
- );
- $operations = array();
- $operations[] = array(
- 'title' => t('Edit'),
- 'href' => sprintf('user/%d/oauth/authorizations/%s', $account->uid, $token->tid),
- 'query' => array('destination' => $_GET['q']),
- );
- $operations[] = array(
- 'title' => t('Delete'),
- 'href' => sprintf('user/%d/oauth/authorizations/%s', $account->uid, $token->tid) . '/delete',
- 'query' => array('destination' => $_GET['q']),
- );
- $data['expires'] = array(
- 'data' => $token->expires ? format_date($token->expires) : t('Never'),
- 'class' => array("oauth-common-authorization-expires"),
- );
- $rows[] = array(
- 'data' => $data + array(
- 'operations' => array(
- 'data' => theme('links', array('links' => $operations)),
- 'class' => array("oauth-common-authorization-operations"),
- ),
- ),
- );
- }
- $table = theme('table', array(
- 'header' => $header,
- 'rows' => $rows,
- 'attributes' => array('id' => 'oauth-common-list-authorization')
- ));
- return $table;
- }
- function oauth_common_authorization_add($consumer) {
- $token = new DrupalOAuthToken(user_password(32), user_password(32), $consumer, array(
- 'uid' => $account->uid,
- ));
- return drupal_get_form('oauth_common_form_authorization', $token);
- }
- /**
- * Provide a form to edit and add authorizations.
- *
- * Despite what appears above, this function is actually invoked by
- * `drupal_retrieve_form` (by way of `drupal_build_form`, by way of
- * `drupal_get_form`), so the second argument isn't the token, but a reference
- * to the form state. Luckily, PHP made that incredibly non-obvious by
- * neglecting to notify me that this function was being called with one too few
- * arguments. Go team.
- */
- function oauth_common_form_authorization($form_id, &$form_state, $token) {
- $form = array();
- $consumer = $token->consumer;
- $context = oauth_common_context_load($consumer->context);
- drupal_set_title(t('Authorization for @app', array('@app' => $consumer->name)), PASS_THROUGH);
- $form['token_object'] = array(
- '#type' => 'value',
- '#value' => $token,
- );
- $form['authorized'] = array(
- '#type' => 'checkbox',
- '#title' => t('Authorized'),
- '#default_value' => $token->authorized,
- );
- $form['created'] = array(
- '#type' => 'item',
- '#title' => t('Created'),
- '#markup' => format_date($token->created),
- );
- $form['changed'] = array(
- '#type' => 'item',
- '#title' => t('Changed'),
- '#markup' => format_date($token->changed),
- );
- $form['key'] = array(
- '#type' => 'item',
- '#title' => t('Key'),
- '#markup' => $token->key,
- );
- if ($token->in_database) {
- $form['secret'] = array(
- '#type' => 'item',
- '#prefix' => '<div id="token-secret-wrapper">',
- '#title' => t('Secret'),
- '#markup' => substr($token->secret, 0, 6) . '...',
- );
- $form['show_secret'] = array(
- '#type' => 'button',
- '#value' => t('Show secret'),
- '#ajax' => array(
- 'callback' => 'oauth_common_form_authorization_secret_ajax_callback',
- 'wrapper' => 'token-secret-wrapper',
- ),
- '#suffix' => '</div>',
- );
- }
- else {
- $form['secret'] = array(
- '#type' => 'item',
- '#title' => t('Secret'),
- '#markup' => $token->secret
- );
- }
- $form['allowed'] = array(
- '#type' => 'fieldset',
- '#title' => t('Permissions'),
- );
- global $user;
- oauth_common_permissions_form($user, $form['allowed'], $consumer, $context, $token->services);
- $form['actions'] = array('#type' => 'actions');
- $form['actions']['submit'] = array(
- '#type' => 'submit',
- '#value' => t('Save'),
- );
- return $form;
- }
- /**
- * AJAX callback for showing secrets
- *
- * @return void
- */
- function oauth_common_form_authorization_secret_ajax_callback($form, $form_state) {
- $form['secret']['#markup'] = $form_state['values']['token_object']->secret;
- $form['secret']['#prefix'] = '';
- return $form['secret'];
- }
- function oauth_common_permissions_form($account, &$form, $consumer, $context, $default_services = array('*')) {
- $tvars = array(
- '@appname' => $consumer->name,
- '@user' => $account->name,
- '@sitename' => variable_get('site_name', ''),
- );
- if ($context) {
- foreach ($context->authorization_levels as $name => $level) {
- $auth_opt = array(
- '#type' => 'checkbox',
- '#title' => t($level['title'], $tvars),
- '#description' => t($level['description'], $tvars),
- '#default_value' => in_array($name, $default_services),
- );
- $form['authorization']['levels'][$name] = $auth_opt;
- }
- }
- }
- function oauth_common_form_authorization_submit($form, &$form_state) {
- $values = $form_state['values'];
- $token = $values['token_object'];
- $consumer = $token->consumer;
- // Collect the authorization levels
- if (isset($values['levels'])) {
- $token->services = array_keys(array_filter($values['levels']));
- }
- $token->authorized = $values['authorized'];
- $token->write(TRUE);
- drupal_set_message(t('The @consumer token @token was updated.', array(
- '@consumer' => $consumer->name,
- '@token' => $token->key)));
- drupal_goto(sprintf('user/%d/applications', $token->uid));
- }
- /**
- * Provide a form for deleting an authorization.
- *
- * We've got the same symptom here that we do with
- * `oauth_common_form_authorization`, i.e., this is actually called by
- * `drupal_retrieve_form`.
- */
- function oauth_common_form_authorization_delete($form_id, &$form_state, $user, $token) {
- $consumer = $token->consumer;
- $cancel_url = 'user/%d/oauth/authorizations';
- if (!empty($_GET['destination'])) {
- $cancel_url = $_GET['destination'];
- }
- drupal_set_title(t('Deleting authorization for "@consumer"', array(
- '@consumer' => $consumer->name,
- )), PASS_THROUGH);
- $form = array(
- 'token_object' => array(
- '#type' => 'value',
- '#value' => $token,
- ),
- );
- $form['user'] = array(
- '#type' => 'value',
- '#value' => $user->uid,
- );
- $form['key'] = array(
- '#type' => 'value',
- '#value' => $token->key,
- );
- $form['description'] = array(
- '#type' => 'item',
- '#markup' => t('Are you sure that you want to delete the authorization for "@consumer"?', array(
- '@consumer' => $consumer->name,
- )),
- );
- $form['actions'] = array('#type' => 'actions');
- $form['actions']['cancel'] = array(
- '#markup' => l(t('Cancel'), sprintf($cancel_url, $user->uid, $token->key)),
- );
- $form['actions']['submit'] = array(
- '#type' => 'submit',
- '#value' => t('Delete'),
- );
- return $form;
- }
- function oauth_common_form_authorization_delete_submit($form, &$form_state) {
- $values = $form_state['values'];
- $token = $values['token_object'];
- $consumer = $token->consumer;
- $token->delete();
- drupal_set_message(t('The @consumer token @token was deleted.', array(
- '@consumer' => $consumer->name,
- '@token' => $token->key)));
- }
|