123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574 |
- <?php
- function _oauth_common_admin() {
- $form = array();
- $form['oauth_common_enable_provider'] = array(
- '#type' => 'checkbox',
- '#title' => t('Enable the oauth provider'),
- '#default_value' => variable_get('oauth_common_enable_provider', TRUE),
- '#description' => t('This option controls whether this site should act as a OAuth provider or not'),
- );
- $form['oauth_common_request_token_lifetime'] = array(
- '#type' => 'textfield',
- '#title' => t('Request token lifetime (in seconds)'),
- '#default_value' => variable_get('oauth_common_request_token_lifetime', 7200),
- );
- $form['#validate'][] = '_oauth_common_admin_settings_validate';
- return system_settings_form($form);
- }
- function _oauth_common_admin_settings_validate($form, $form_state) {
- $values = $form_state['values'];
- $lifetime = intval($values['oauth_common_request_token_lifetime'], 10);
- if (!$lifetime) {
- form_set_error('oauth_common_request_token_lifetime', t('The request token lifetime must be a non-zero integer value.'));
- }
- }
- /**
- * Output a list of contexts.
- */
- function oauth_common_list_context($js = NULL) {
- $header = array(
- array('data' => t('Title'), 'class' => array('oauth-common-contexts-title')),
- array('data' => t('Storage'), 'class' => array('oauth-common-contexts-storage')),
- array('data' => t('Operations'), 'class' => array('oauth-common-contexts-operations')),
- );
- $contexts = oauth_common_context_load_all();
- $rows = array();
- if (!$contexts) {
- $contexts = array();
- }
- foreach ($contexts as $context) {
- $operations = array();
- if (empty($context->disabled)) {
- $operations[] = array(
- 'title' => t('Edit'),
- 'href' => 'admin/config/services/oauth/' . $context->name . '/edit',
- );
- $operations[] = array(
- 'title' => t('Export'),
- 'href' => 'admin/config/services/oauth/' . $context->name . '/export',
- );
- }
- if ($context->export_type == (EXPORT_IN_CODE | EXPORT_IN_DATABASE)) {
- $operations[] = array(
- 'title' => t('Revert'),
- 'href' => 'admin/config/services/oauth/' . $context->name . '/delete',
- );
- }
- elseif ($context->export_type != EXPORT_IN_CODE) {
- $operations[] = array(
- 'title' => t('Delete'),
- 'href' => 'admin/config/services/oauth/' . $context->name . '/delete',
- );
- }
- elseif (empty($context->disabled)) {
- $operations[] = array(
- 'title' => t('Disable'),
- 'href' => 'admin/config/services/oauth/' . $context->name . '/disable',
- 'query' => drupal_get_destination(),
- );
- }
- else {
- $operations[] = array(
- 'title' => t('Enable'),
- 'href' => 'admin/config/services/oauth/' . $context->name . '/enable',
- 'query' => drupal_get_destination(),
- );
- }
- $rows[$context->name] = array(
- 'data' => array(
- 'title' => array(
- 'data' => check_plain($context->title),
- 'class' => array('oauth-common-contexts-title'),
- ),
- 'storage' => array(
- 'data' => ($context->export_type == EXPORT_IN_CODE) ? t('In code') : t('In database'),
- 'class' => array('oauth-common-contexts-storage'),
- ),
- 'operations' => array(
- 'data' => theme('links', array('links' => $operations)),
- 'class' => array('oauth-common-contexts-operations'),
- ),
- ),
- 'class' => array('oauth-common-contexts-' . $context->name)
- );
- if (!empty($context->disabled)) {
- $rows[$context->name]['class'][] = 'oauth-common-contexts-disabled';
- }
- }
- $table = theme('table', array(
- 'header' => $header,
- 'rows' => $rows,
- 'attributes' => array('id' => 'oauth-common-list-contexts')
- ));
- return $table;
- }
- /**
- * Handle the add context page.
- */
- function oauth_common_add_context() {
- $context = oauth_common_context_new();
- drupal_set_title(t('Add context'));
- if (!$context) {
- drupal_set_message(t("Can't create contexts, check that you've installed !ctools.", array(
- '!ctools' => l('Chaos tool suite', 'http://drupal.org/project/ctools'),
- )), 'error');
- $result = '';
- }
- else {
- $result = oauth_common_edit_context($context);
- }
- return $result;
- }
- /**
- * Edit an context.
- *
- * Called from both the add and edit points to provide for common flow.
- */
- function oauth_common_edit_context($context) {
- if (!is_object($context)) {
- $context = oauth_common_context_load($context);
- }
- if ($context && !empty($context->title)) {
- drupal_set_title($context->title);
- }
- return drupal_get_form('oauth_common_edit_form_context', $context);
- }
- /**
- * Form to edit the settings of an context.
- */
- function oauth_common_edit_form_context($form, &$form_state, $context) {
- $form['#attached']['css'] = array(
- drupal_get_path('module', 'oauth_common') . '/css/admin.css'
- );
- $form['cid'] = array(
- '#type' => 'value',
- '#value' => isset($context->cid) ? $context->cid : '',
- );
- $form['context_object'] = array(
- '#type' => 'value',
- '#value' => $context,
- );
- $form['title'] = array(
- '#type' => 'textfield',
- '#size' => 24,
- '#maxlength' => 100,
- '#default_value' => $context->title,
- '#title' => t('Context title'),
- '#required' => TRUE,
- );
- $form['name'] = array(
- '#type' => 'machine_name',
- '#size' => 24,
- '#maxlength' => 32,
- '#default_value' => $context->name,
- '#title' => t('Context name'),
- '#description' => t('A unique name used to identify this preset internally. It must be only be alpha characters and underscores. No spaces, numbers or uppercase characters.'),
- '#machine_name' => array(
- 'source' => array('title'),
- 'exists' => 'oauth_common_edit_form_context_exists',
- ),
- '#required' => TRUE,
- );
- $sign_methods = array(
- 'PLAINTEXT' => t('Plaintext'),
- );
- foreach (hash_algos() as $algo) {
- $sign_methods['HMAC-' . strtoupper($algo)] = 'HMAC-' . strtoupper($algo);
- }
- $form['signature_methods'] = array(
- '#type' => 'fieldset',
- '#title' => t('Signature methods'),
- '#collapsible' => TRUE,
- '#collapsed' => TRUE,
- '#tree' => TRUE,
- 'selected' => array(
- '#type' => 'checkboxes',
- '#title' => t('Supported signature methods'),
- '#options' => $sign_methods,
- '#default_value' => !empty($context->authorization_options['signature_methods']) ?
- $context->authorization_options['signature_methods'] :
- array('HMAC-SHA1', 'HMAC-SHA256', 'HMAC-SHA384', 'HMAC-SHA512'),
- )
- );
- $form['authorization_options'] = array(
- '#type' => 'fieldset',
- '#title' => t('Authorization options'),
- '#tree' => TRUE,
- '#collapsible' => TRUE,
- '#collapsed' => TRUE,
- );
- $form['authorization_options']['page_title'] = array(
- '#type' => 'textfield',
- '#title' => t('Page title'),
- '#description' => t('The title of the authorization page.'),
- '#size' => 40,
- '#maxlength' => 255,
- '#default_value' => empty($context->authorization_options['page_title']) ? '' : $context->authorization_options['page_title'],
- );
- $form['authorization_options']['message'] = array(
- '#type' => 'textarea',
- '#title' => t('Message'),
- '#description' => t('The message shown to the user when authorizing.'),
- '#default_value' => empty($context->authorization_options['message']) ? '' : $context->authorization_options['message'],
- );
- $form['authorization_options']['warning'] = array(
- '#type' => 'textarea',
- '#title' => t('Warning'),
- '#description' => t('The warning shown to the user when authorizing.'),
- '#default_value' => empty($context->authorization_options['warning']) ? '' : $context->authorization_options['warning'],
- );
- $form['authorization_options']['deny_access_title'] = array(
- '#type' => 'textfield',
- '#title' => t('Deny access title'),
- '#description' => t('The title of deny access link.'),
- '#size' => 40,
- '#maxlength' => 255,
- '#default_value' => empty($context->authorization_options['deny_access_title']) ? '' : $context->authorization_options['deny_access_title'],
- );
- $form['authorization_options']['grant_access_title'] = array(
- '#type' => 'textfield',
- '#title' => t('Grant access title'),
- '#description' => t('The title of grant access button.'),
- '#size' => 40,
- '#maxlength' => 255,
- '#default_value' => empty($context->authorization_options['grant_access_title']) ? '' : $context->authorization_options['grant_access_title'],
- );
- $form['authorization_options']['access_token_lifetime'] = array(
- '#type' => 'textfield',
- '#title' => t('Access token lifetime'),
- '#description' => t('The time, in seconds, for which an access token should be valid, use 0 to never expire access tokens.'),
- '#size' => 10,
- '#maxlength' => 255,
- '#default_value' => empty($context->authorization_options['access_token_lifetime']) ? 0 : $context->authorization_options['access_token_lifetime'],
- );
- $form['authorization_options']['disable_auth_level_selection'] = array(
- '#type' => 'checkbox',
- '#title' => t('Disable authorization level selection'),
- '#description' => t('If this is checked the user won\'t be able to choose the authorization level, and the default authorization level(s) will be used.'),
- '#default_value' => !empty($context->authorization_options['disable_auth_level_selection']),
- );
- $form['authorization_levels'] = array(
- '#type' => 'fieldset',
- '#title' => t('Authorization levels'),
- '#tree' => TRUE,
- '#prefix' => '<div id="auth-level-wrapper">',
- '#suffix' => '</div>',
- 'add_authorization_level' => array(
- '#type' => 'submit',
- '#value' => t('Add authorization level'),
- '#weight' => 10,
- '#submit' => array('oauth_common_edit_form_auth_level_ajax_add'),
- '#limit_validation_errors' => array(),
- '#ajax' => array(
- 'callback' => 'oauth_common_edit_form_auth_level_ajax_callback',
- 'wrapper' => 'auth-level-wrapper',
- )
- ),
- );
- foreach ($context->authorization_levels as $name => $level) {
- $title = !empty($name) ? check_plain($name) : t('New level');
- if ($title == '*') {
- $title = t('Full access');
- }
- $l = oauth_common_edit_form_auth_level($context, $title, $name, $level);
- $form['authorization_levels'][] = $l;
- }
- if (!isset($form_state['authorization_level_new'])) {
- $form_state['authorization_level_new'] = 0;
- }
- for ($i = 0; $i < $form_state['authorization_level_new']; $i++) {
- $form['authorization_levels'][] = oauth_common_edit_form_auth_level($context, t('Authorization level'));
- }
- $form['actions'] = array('#type' => 'actions');
- $form['actions']['submit'] = array(
- '#type' => 'submit',
- '#value' => t('Save'),
- );
- return $form;
- }
- /**
- * Helper function for constructing a auth level fieldset.
- *
- * @param object $context
- * @param int $idx
- * @param string $title
- * @param string $name
- * @param array $level
- * @return array.
- */
- function oauth_common_edit_form_auth_level($context, $title, $name = '', $level = array()) {
- $level = $level + array(
- 'title' => '',
- 'description' => '',
- );
- $element = array(
- "name" => array(
- '#type' => 'textfield',
- '#title' => t('Name'),
- '#description' => t('The name of the authorization level.'),
- '#size' => 40,
- '#maxlength' => 32,
- '#default_value' => $name,
- ),
- "title" => array(
- '#type' => 'textfield',
- '#title' => t('Title'),
- '#description' => t('The title of the authorization level.'),
- '#size' => 40,
- '#maxlength' => 100,
- '#default_value' => $level['title'],
- ),
- "default" => array(
- '#type' => 'checkbox',
- '#title' => t('Selected by default'),
- '#description' => t('Whether the authentication level should be checked by default.'),
- '#default_value' => is_array($context->authorization_options['default_authorization_levels']) && in_array($name, $context->authorization_options['default_authorization_levels']),
- ),
- "delete" => array(
- '#type' => 'checkbox',
- '#title' => t('Delete'),
- '#description' => t('Check this to delete the authorization level.'),
- '#default_value' => FALSE,
- ),
- "description" => array(
- '#type' => 'textarea',
- '#title' => t('Description'),
- '#description' => t('The description of the authorization level.'),
- '#default_value' => $level['description'],
- ),
- );
- return $element;
- }
- /**
- * Submit handler for adding auth levels
- *
- * @return void
- */
- function oauth_common_edit_form_auth_level_ajax_add($form, &$form_state) {
- $form_state['authorization_level_new']++;
- $form_state['rebuild'] = TRUE;
- }
- /**
- * AJAX callback for dealing with auth levels
- *
- * @return void
- */
- function oauth_common_edit_form_auth_level_ajax_callback($form, $form_state) {
- return $form['authorization_levels'];
- }
- /**
- * Check whether a given context exists.
- *
- * @param $name the name parameter for the context.
- * @return boolean
- */
- function oauth_common_edit_form_context_exists($name) {
- $exists = FALSE;
- if (!empty($name)) {
- $result = db_query('SELECT cid FROM {oauth_common_context} WHERE name = :name', array(
- ':name' => $name
- ))->fetchField();
- $exists = $result ? TRUE : FALSE;
- }
- return $exists;
- }
- /**
- * Validate submission of the preset edit form.
- */
- function oauth_common_edit_form_context_validate(&$form, &$form_state) {
- $values = $form_state['values'];
- // Check that the authorization level names are unique within the context
- $levels = array();
- $default_exists = FALSE;
- foreach ($values['authorization_levels'] as $key => $level) {
- if (is_numeric($key) && !empty($level['name']) && !$level['delete']) {
- if (!empty($levels[$level['name']])) {
- form_error($form['authorization_levels'][$key]['name'], t('Authorization level name must be unique.'));
- }
- else if (preg_match("/[^A-Za-z0-9_\*]/", $level['name'])) {
- form_error($form['authorization_levels'][$key]['name'], t('Authorization level name must be alphanumeric or underscores only.'));
- }
- if (empty($level['title'])) {
- form_error($form['authorization_levels'][$key]['title'], t('Authorization levels must have a title.'));
- }
- $default_exists = $default_exists || $level['default'];
- $levels[$level['name']] = TRUE;
- }
- }
- // Check that we actually got a number as access token lifetime
- if (!is_numeric($values['authorization_options']['access_token_lifetime'])) {
- form_error($form['authorization_options']['access_token_lifetime'], t('The access token lifetime must be numeric.'));
- }
- // Check that at least one default authorization level is checked when
- // authorization level selection is disabled.
- if (!$default_exists && $values['authorization_options']['disable_auth_level_selection']) {
- form_error($form['authorization_options']['disable_auth_level_selection'], t('You must select at least one default authorirization level if level selection is disabled.'));
- }
- }
- /**
- * Process submission of the mini panel edit form.
- */
- function oauth_common_edit_form_context_submit($form, &$form_state) {
- $context = $form_state['values']['context_object'];
- $values = $form_state['values'];
- $context->name = $values['name'];
- $context->title = $values['title'];
- $auth_options = array(
- 'access_token_lifetime' => 0,
- );
- foreach ($values['authorization_options'] as $key => $value) {
- $auth_options[$key] = empty($value) ? null : $value;
- }
- $context->authorization_options = $auth_options;
- // Collect the names of the selected signature methods.
- $sig_options = array();
- foreach ($values['signature_methods']['selected'] as $name => $selected) {
- if ($selected) {
- $sig_options[] = $name;
- }
- }
- $context->authorization_options['signature_methods'] = $sig_options;
- // Set the auth levels and default levels for the context
- $levels = array();
- $default_levels = array();
- foreach ($values['authorization_levels'] as $key => $level) {
- if (is_numeric($key) && !empty($level['name']) && !$level['delete']) {
- $name = $level['name'];
- if ($level['default']) {
- $default_levels[] = $name;
- }
- $levels[$name] = $level;
- }
- }
- $context->authorization_levels = $levels;
- $context->authorization_options['default_authorization_levels'] = $default_levels;
- oauth_common_context_save($context);
- if (empty($context->cid)) {
- drupal_set_message(t('Your new context %title has been saved.', array('%title' => $context->title)));
- $form_state['values']['cid'] = $context->cid;
- }
- else {
- drupal_set_message(t('Your changes have been saved.'));
- }
- $form_state['redirect'] = 'admin/config/services/oauth';
- }
- /**
- * Provide a form to confirm deletion of a context.
- */
- function oauth_common_delete_confirm_context($form, &$form_state, $context) {
- if (!is_object($context)) {
- $context = oauth_common_context_load($context);
- }
- if ($context->export_type == (EXPORT_IN_CODE | EXPORT_IN_DATABASE)) {
- $title = t('Are you sure you want to revert the context "@title"?', array('@title' => $context->title));
- $submit = t('Revert');
- }
- elseif ($context->export_type != EXPORT_IN_CODE) {
- $title = t('Are you sure you want to delete the context "@title"?', array('@title' => $context->title));
- $submit = t('Delete');
- }
- else {
- drupal_not_found();
- die;
- }
- $form['context'] = array('#type' => 'value', '#value' => $context->name);
- $form['cid'] = array('#type' => 'value', '#value' => $context->cid);
- return confirm_form($form,
- $title,
- !empty($_GET['destination']) ? $_GET['destination'] : 'admin/config/services/oauth',
- t('This action cannot be undone.'),
- $submit, t('Cancel')
- );
- }
- /**
- * Handle the submit button to delete a context.
- */
- function oauth_common_delete_confirm_context_submit($form, &$form_state) {
- $context = oauth_common_context_load($form_state['values']['context']);
- if ($context->cid == $form_state['values']['cid']) {
- oauth_common_context_delete($context);
- $form_state['redirect'] = 'admin/config/services/oauth';
- }
- }
- /**
- * Page callback to export a context to PHP code.
- */
- function oauth_common_export_context($form, &$form_state, $context) {
- if (!is_object($context)) {
- $context = oauth_common_context_load($context);
- }
- drupal_set_title($context->title);
- $code = oauth_common_context_export($context);
- $lines = substr_count($code, "\n") + 4;
- $form['code'] = array(
- '#type' => 'textarea',
- '#title' => $context->title,
- '#default_value' => $code,
- '#rows' => $lines,
- );
- return $form;
- }
|