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' => '
', '#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' => '
', ); } 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))); }