You are here

shib_auth_admin.inc in Shibboleth Authentication 5.3

Generate the administration form of the Shibboleth authentication module

@returns HTML text of the administration form

File

shib_auth_admin.inc
View source
<?php

/**
 * @file
 * Generate the administration form of the Shibboleth authentication module
 *
 * @returns HTML text of the administration form
 */
function shib_auth_admin() {
  $form = array();
  $form['shib_handler_settings'] = array(
    '#type' => 'fieldset',
    '#title' => t('Shibboleth handler settings'),
    '#weight' => 0,
    '#collapsible' => FALSE,
  );
  $form['shib_attribute_settings'] = array(
    '#type' => 'fieldset',
    '#title' => t('Attribute settings'),
    '#weight' => 0,
    '#collapsible' => FALSE,
  );
  $form['shib_handler_settings']['shib_auth_handler_url'] = array(
    '#type' => 'textfield',
    '#title' => t('Shibboleth handler URL'),
    '#default_value' => variable_get('shib_auth_handler_url', '/Shibboleth.sso'),
    '#description' => t('The URL can be absolute or relative to the server base url: http://www.example.com/Shibboleth.sso; /Shibboleth.sso'),
  );
  $form['shib_handler_settings']['shib_auth_handler_protocol'] = array(
    '#type' => 'select',
    '#title' => t('Shibboleth handler protocol'),
    '#default_value' => variable_get('shib_auth_handler_protocol', 'https'),
    '#options' => array(
      'http' => t('HTTP'),
      'https' => t('HTTPS'),
    ),
    '#description' => t('This option will be effective only if the handler URL is a relative path.'),
  );
  $form['shib_handler_settings']['shib_auth_wayf_uri'] = array(
    '#type' => 'textfield',
    '#title' => t('WAYF location'),
    '#default_value' => variable_get('shib_auth_wayf_uri', '/WAYF/HREF'),
  );
  $form['shib_attribute_settings']['shib_auth_username_variable'] = array(
    '#type' => 'textfield',
    '#title' => t('Server variable for username'),
    '#default_value' => variable_get('shib_auth_username_variable', 'REMOTE_USER'),
  );
  $form['shib_attribute_settings']['shib_auth_username_email'] = array(
    '#type' => 'textfield',
    '#title' => t('Server variable for e-mail address'),
    '#default_value' => variable_get('shib_auth_username_email', 'HTTP_SHIB_MAIL'),
  );
  $form['shib_attribute_debug']['shib_auth_debug_state'] = array(
    '#type' => 'checkbox',
    '#title' => t('Enable DEBUG mode.'),
    '#default_value' => variable_get('shib_auth_debug_state', FALSE),
  );
  return system_settings_form($form);
}

// function shib_auth_admin()

/**
 * Clone an exists rule form based on new rule add form
 */
function shib_auth_clone_rule() {
  return shib_auth_edit_rule();
}

//function shib_auth_clone_rule()

/**
 * Submit the cloned rule based on new rule add submit
 */
function shib_auth_clone_rule_submit($form_id, $form_values) {
  shib_auth_new_rule_form_submit($form_id, $form_values);
}

/**
 * Delete a rule from the list.
 *
 * @param $rule_id Id of the rule what will be delete.
 */
function shib_auth_delete_rule($rule_id) {
  $result = db_query("DELETE FROM {shib_auth} WHERE id = %d", $rule_id);
  if ($result) {
    drupal_set_message('Rule <span style="font-weight: bold;">#' . $rule_id . '</span> has been deleted.', 'warning');
  }
  else {
    $message = 'Rule has not been deleted!';
    drupal_set_message(t($message), 'error');
    watchdog('shub_auth', $message, WATCHDOG_ERROR);
  }
  drupal_goto('admin/user/shib_auth/rules');
}

//function shib_auth_delete_rule()

/**
 * List the added rule(s)
 *
 * @return Rule list in a HTML table
 */
function shib_auth_list_rules() {
  $header = array(
    array(
      'data' => t('Attribute'),
      'field' => 'field',
    ),
    array(
      'data' => t('RegExp'),
      'field' => 'regexpression',
    ),
    array(
      'data' => t('Role(s)'),
      'field' => 'role',
    ),
    array(
      'data' => t('Actions'),
    ),
  );
  $tablesort_sql = 'SELECT * FROM {shib_auth}' . tablesort_sql($header);
  $rules = db_query($tablesort_sql);
  if (!$rules) {
    return t('There is no rule in the database');
  }
  $row = array();
  while ($rule = db_fetch_array($rules)) {
    $user_roles = user_roles(TRUE);
    $roles = unserialize($rule['role']);
    $roles_list = '';
    if (!empty($roles)) {
      $roles_list = implode(', ', $roles);
    }
    $links = l(t('Clone') . ' ', 'admin/user/shib_auth/rules/Clone/' . $rule['id']);
    $links .= l(t('Edit') . ' ', 'admin/user/shib_auth/rules/Edit/' . $rule['id']);
    $links .= l(t('Delete') . ' ', 'admin/user/shib_auth/rules/Delete/' . $rule['id']);
    $row[] = array(
      $rule['field'],
      $rule['regexpression'],
      $roles_list,
      $links,
    );
  }
  return theme_table($header, $row);
}

// function shib_auth_list_rules()

/**
 * Rule edit form basedon new rule form
 *
 * @return array rule edit form array
 */
function shib_auth_edit_rule() {
  $rule_id = arg(5);
  $rule = db_query("SELECT * FROM {shib_auth} WHERE id = %d", array(
    $rule_id,
  ));
  $exists_rule = db_fetch_array($rule);
  return shib_auth_new_rule_form($exists_rule);
}

//function shib_auth_edit_rule()

/**
 * Submit the edited rule.
 * 
 * @param $form_id
 *  Id of the form.
 * @param $form_values
 *   Values of the POSTed form.
 */
function shib_auth_edit_rule_submit($form_id, $form_values) {
  $roles = _role_normalize($form_values['roles']);
  $result = db_query("UPDATE {shib_auth} SET field = '%s', regexpression = '%s', role = '%s' WHERE id = %d", $form_values['field'], $form_values['regexpression'], serialize($roles), arg(5));
  if ($result) {
    drupal_set_message(t('Rule was save.'));
    drupal_goto('admin/user/shib_auth/rules');
  }
  else {
    $message = 'Rule was not save into database!';
    drupal_set_message(t($message));
    watchdog('shib_auth_error', $message, WATCHDOG_ERROR);
  }
}

/**
 * Add a new rule form.
 * 
 * @param $editing_rule
 *  If edit or clone a rule it has value otherwise it is an empty array.
 * @return
 *  form API compatible array
 */
function shib_auth_new_rule_form($editing_rule = array()) {
  $form = array();
  $form['field'] = array(
    '#title' => t('Shibboleth attribute name'),
    '#type' => 'textfield',
    '#default_value' => !empty($editing_rule['field']) ? $editing_rule['field'] : '',
    '#require' => TRUE,
    '#description' => t('More properly: <b>$_SERVER</b> field name; enable DEBUG mode to list available fields. <br/>Note that it might differ from your users\' fields.'),
  );
  $form['regexpression'] = array(
    '#title' => t('Value (regexp)'),
    '#type' => 'textfield',
    '#default_value' => !empty($editing_rule['regexpression']) ? $editing_rule['regexpression'] : '',
    '#require' => TRUE,
  );
  $roles = user_roles(TRUE);
  $edit_role = unserialize($editing_rule['role']);
  $form['roles'] = array(
    '#type' => 'checkboxes',
    '#title' => t('Roles'),
    '#default_value' => is_array($edit_role) ? array_keys($edit_role) : '',
    '#options' => $roles,
  );
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('@Action rule', array(
      '@Action' => arg(4),
    )),
  );

  //$form['#submit'][] = 'shib_auth_new_rule';
  return $form;
}

//function shib_auth_new_rule_form()

/** 
 * New rule add submit implementation
 * 
 * @param $form_id 
 *  Id of the form what you process.
 * @param $form_values 
 *  Form values.
 */
function shib_auth_new_rule_form_submit($form_id, $form_values) {
  $roles = _role_normalize($form_values['roles']);
  $result = db_query("INSERT INTO {shib_auth} " . "VALUES (%d, '%s', '%s', '%s' )", db_next_id('{shib_auth}_id'), $form_values['field'], $form_values['regexpression'], serialize($roles));
  if ($result) {
    drupal_set_message(t('Rule was save.'));
    drupal_goto('admin/user/shib_auth/rules');
  }
  else {
    $message = 'Rule was not save into database!';
    drupal_set_message(t($message));
    watchdog('shib_auth_error', $message, WATCHDOG_ERROR);
  }
}

// function shib_auth_new_rule_form_submit
function _role_normalize($role_id) {
  $user_role = user_roles(TRUE);
  $roles = array();
  foreach ($role_id as $key => $role_key) {
    if ($role_key !== 0) {
      $roles[$role_key] = $user_role[$role_key];
    }
  }
  return $roles;
}

Functions

Namesort descending Description
shib_auth_admin @file Generate the administration form of the Shibboleth authentication module
shib_auth_clone_rule Clone an exists rule form based on new rule add form
shib_auth_clone_rule_submit Submit the cloned rule based on new rule add submit
shib_auth_delete_rule Delete a rule from the list.
shib_auth_edit_rule Rule edit form basedon new rule form
shib_auth_edit_rule_submit Submit the edited rule.
shib_auth_list_rules List the added rule(s)
shib_auth_new_rule_form Add a new rule form.
shib_auth_new_rule_form_submit New rule add submit implementation
_role_normalize