cas.admin.inc in CAS 6.3
Same filename and directory in other branches
CAS module settings UI.
File
cas.admin.incView source
<?php
/**
* @file
* CAS module settings UI.
*/
/**
* Provides settings pages.
*/
function cas_admin_settings() {
$form['library'] = array(
'#type' => 'fieldset',
'#title' => t('Library (phpCAS)'),
'#collapsible' => TRUE,
);
if (module_exists('libraries')) {
// If Libraries API is enabled, print an information item.
$form['library']['cas_library_dir'] = array(
'#type' => 'item',
'#title' => t('Library directory'),
'#value' => t('Using <a href="@url">Libraries API</a>.', array(
'@url' => 'http://drupal.org/project/libraries',
)),
'#description' => t('Please ensure phpCAS is installed in a location compatible with Libraries API. For example, install phpCAS so that <em>sites/all/libraries/CAS/CAS.php</em> exists. See README.txt for more information.'),
'#after_build' => array(
'cas_library_version_check',
),
);
}
else {
// If Libraries API is not installed, display path settings.
$form['library']['cas_library_dir'] = array(
'#type' => 'textfield',
'#title' => t('Library directory'),
'#default_value' => variable_get('cas_library_dir', 'CAS'),
'#description' => t('Specify the path to the directory the CAS.php file resides in. Leave blank to load cas from your phpinclude path.'),
'#after_build' => array(
'cas_library_version_check',
),
);
}
$form['server'] = array(
'#type' => 'fieldset',
'#title' => t('CAS Server'),
'#collapsible' => TRUE,
'#collapsed' => FALSE,
);
$form['server']['cas_version'] = array(
'#type' => 'radios',
'#title' => t('Version'),
'#default_value' => variable_get('cas_version', '2.0'),
'#options' => array(
'1.0' => '1.0',
'2.0' => t('2.0 or higher'),
'S1' => t('SAML Version 1.1'),
),
);
$form['server']['cas_server'] = array(
'#type' => 'textfield',
'#title' => t('Hostname'),
'#default_value' => variable_get('cas_server', ''),
'#size' => 30,
// Hostnames can be 255 characters long.
'#maxlength' => 255,
'#description' => t('Hostname or IP Address of the CAS server.'),
);
$form['server']['cas_port'] = array(
'#type' => 'textfield',
'#title' => t('Port'),
'#default_value' => variable_get('cas_port', '443'),
'#size' => 5,
// The maximum port number is 65536, 5 digits.
'#maxlength' => 5,
'#description' => t('443 is the standard SSL port. 8443 is the standard non-root port for Tomcat.'),
);
$form['server']['cas_uri'] = array(
'#type' => 'textfield',
'#title' => t('URI'),
'#default_value' => variable_get('cas_uri', ''),
'#size' => 30,
'#description' => t('If CAS is not at the root of the host, include a URI (e.g., /cas).'),
);
$form['server']['cas_cert'] = array(
'#type' => 'textfield',
'#title' => t('Certificate Authority PEM Certificate'),
'#default_value' => variable_get('cas_cert', ''),
'#maxlength' => 255,
'#description' => t('The PEM certificate of the Certificate Authority that issued the certificate of the CAS server. If omitted, the certificate authority will not be verified.'),
);
$form['login'] = array(
'#type' => 'fieldset',
'#title' => t('Login form'),
'#collapsible' => TRUE,
'#collapsed' => TRUE,
);
$form['login']['cas_login_form'] = array(
'#type' => 'radios',
'#title' => t('Add CAS link to login forms'),
'#default_value' => variable_get('cas_login_form', CAS_NO_LINK),
'#options' => array(
CAS_NO_LINK => t('Do not add link to login forms'),
CAS_ADD_LINK => t('Add link to login forms'),
CAS_MAKE_DEFAULT => t('Make CAS login default on login forms'),
),
);
$form['login']['cas_login_invite'] = array(
'#type' => 'textfield',
'#title' => t('CAS Login invitation'),
'#default_value' => variable_get('cas_login_invite', CAS_LOGIN_INVITE_DEFAULT),
'#description' => t('Message users will see to invite them to log in with CAS credentials.'),
);
$form['login']['cas_login_drupal_invite'] = array(
'#type' => 'textfield',
'#title' => t('Drupal login invitation'),
'#default_value' => variable_get('cas_login_drupal_invite', CAS_LOGIN_DRUPAL_INVITE_DEFAULT),
'#description' => t('Message users will see to invite them to log in with Drupal credentials.'),
);
$form['login']['cas_login_redir_message'] = array(
'#type' => 'textfield',
'#title' => t('Redirection notification message'),
'#default_value' => variable_get('cas_login_redir_message', CAS_LOGIN_REDIR_MESSAGE),
'#description' => t('Message users see at the top of the CAS login form to warn them that they are being redirected to the CAS server.'),
);
// Setting for message displayed to user upon successfull login
$form['login']['cas_login_message'] = array(
'#type' => 'textfield',
'#title' => t('Successful login message'),
'#default_value' => variable_get('cas_login_message', 'Logged in via CAS as %cas_username.'),
'#description' => t('Message displayed when a user logs in successfully. <em>%cas_username</em> will be replaced with the user\'s name.'),
);
$form['account'] = array(
'#type' => 'fieldset',
'#title' => t('User accounts'),
'#collapsible' => TRUE,
'#collapsed' => TRUE,
);
$form['account']['cas_user_register'] = array(
'#type' => 'checkbox',
'#title' => t('Automatically create Drupal accounts'),
'#default_value' => variable_get('cas_user_register', 1),
'#description' => t('Whether a Drupal account is automatically created the first time a CAS user logs into the site. If disabled, you will need to pre-register Drupal accounts for authorized users.'),
);
$form['account']['cas_domain'] = array(
'#type' => 'textfield',
'#title' => t('E-mail address'),
'#field_prefix' => t('username@'),
'#default_value' => variable_get('cas_domain', ''),
'#size' => 30,
// Hostnames can be 255 characters long.
'#maxlength' => 255,
'#description' => t("If provided, automatically generate each new user's e-mail address. If omitted, the e-mail field will not be populated. Other modules may be used to populate the e-mail field from CAS attributes or LDAP servers."),
);
// Taken from Drupal's User module.
if (user_access('administer permissions')) {
$roles = array_map('check_plain', user_roles(TRUE));
$checkbox_authenticated = array(
'#type' => 'checkbox',
'#title' => $roles[DRUPAL_AUTHENTICATED_RID],
'#default_value' => TRUE,
'#disabled' => TRUE,
);
unset($roles[DRUPAL_AUTHENTICATED_RID]);
$form['account']['cas_auto_assigned_role'] = array(
'#type' => 'checkboxes',
'#title' => t('Roles'),
'#description' => t('The selected roles will be automatically assigned to each CAS user on login. Use this to automatically give CAS users additional privileges or to identify CAS users to other modules.'),
'#default_value' => variable_get('cas_auto_assigned_role', array()),
'#options' => $roles,
DRUPAL_AUTHENTICATED_RID => $checkbox_authenticated,
);
}
$form['account']['cas_hide_email'] = array(
'#type' => 'checkbox',
'#title' => t('Users cannot change email address'),
'#default_value' => variable_get('cas_hide_email', 0),
'#description' => t('Hide email address field on the edit user form.'),
);
$form['account']['cas_hide_password'] = array(
'#type' => 'checkbox',
'#title' => t('Users cannot change password'),
'#default_value' => variable_get('cas_hide_password', 0),
'#description' => t('Hide password field on the edit user form.'),
);
if (module_exists('persistent_login')) {
$form['account']['cas_allow_rememberme'] = array(
'#type' => 'checkbox',
'#title' => t('Users can stay logged in between sessions'),
'#default_value' => variable_get('cas_allow_rememberme', 0),
'#description' => t('If Persistent Login is enabled, users can choose to stay logged in between browser sessions'),
);
}
$form['pages'] = array(
'#type' => 'fieldset',
'#title' => t('Redirection'),
'#collapsible' => TRUE,
'#collapsed' => TRUE,
);
$form['pages']['cas_check_first'] = array(
'#type' => 'checkbox',
'#title' => t('Check with the CAS server to see if the user is already logged in?'),
'#default_value' => variable_get('cas_check_first', 0),
'#description' => t('This implements the <a href="@cas-gateway">Gateway feature</a> of the CAS Protocol. The check is only performed the first time a user visits your site, so that the local drupal logout is still useful for site admins.', array(
'@cas-gateway' => 'https://wiki.jasig.org/display/CAS/gateway',
)),
);
$form['pages']['cas_access'] = array(
'#type' => 'radios',
'#title' => t('Require CAS login for'),
'#default_value' => variable_get('cas_access', 0),
'#options' => array(
t('specific pages'),
t('all pages except specific pages'),
),
);
$form['pages']['cas_pages'] = array(
'#type' => 'textarea',
'#title' => t('Specific pages'),
'#default_value' => variable_get('cas_pages', ''),
'#cols' => 40,
'#rows' => 5,
'#description' => t("Enter one page per line as Drupal paths. The '*' character is a wildcard. Example paths are '<em>blog</em>' for the blog page and '<em>blog/*</em>' for every personal blog. '<em><front></em>' is the front page."),
);
$form['pages']['cas_exclude'] = array(
'#type' => 'textarea',
'#title' => t('Excluded Pages'),
'#default_value' => variable_get('cas_exclude', CAS_EXCLUDE),
'#cols' => 40,
'#rows' => 5,
'#description' => t("Indicates which pages will be ignored (no login checks). Enter one page per line as Drupal paths. The '*' character is a wildcard. Example paths are '<em>blog</em>' for the blog page and '<em>blog/*</em>' for every personal blog. '<em><front></em>' is the front page."),
);
$form['misc'] = array(
'#type' => 'fieldset',
'#title' => t('Login/Logout Destinations'),
'#collapsible' => TRUE,
'#collapsed' => TRUE,
);
// Settings for redirection upon first login
$form['misc']['cas_first_login_destination'] = array(
'#type' => 'textfield',
'#title' => t('Initial login destination'),
'#default_value' => variable_get('cas_first_login_destination', ''),
'#size' => 40,
'#maxlength' => 255,
'#description' => t("Drupal path or URL. Enter a destination if you want the user to be redirected to this page on their first CAS login. An example path is <em>blog</em> for the blog page, <em><front></em> for the front page, or <em>user</em> for the user's page."),
);
// Setting for page to return to after a CAS logout
$form['misc']['cas_logout_destination'] = array(
'#type' => 'textfield',
'#title' => t('Logout destination'),
'#default_value' => variable_get('cas_logout_destination', ''),
'#size' => 40,
'#maxlength' => 255,
'#description' => t("Drupal path or URL. Enter a destination if you want a user to be directed to this page after logging out of CAS, or leave blank to direct users back to the previous page. An example path is <em>blog</em> for the blog page or <em><front></em> for the front page."),
);
$form['misc']['cas_changePasswordURL'] = array(
'#type' => 'textfield',
'#title' => t('Change password URL'),
'#default_value' => variable_get('cas_changePasswordURL', ''),
'#maxlength' => 255,
'#description' => t('The URL users should use for changing their password. Leave blank to use the standard Drupal page.'),
);
$form['misc']['cas_registerURL'] = array(
'#type' => 'textfield',
'#title' => t('Registration URL'),
'#default_value' => variable_get('cas_registerURL', ''),
'#maxlength' => 255,
'#description' => t('The URL users should use for changing registering. Leave blank to use the standard Drupal page.'),
);
$form['advanced'] = array(
'#type' => 'fieldset',
'#title' => t('Miscellaneous & Experimental Settings'),
'#collapsible' => TRUE,
'#collapsed' => TRUE,
);
$form['advanced']['cas_proxy'] = array(
'#type' => 'checkbox',
'#title' => t('Initialize CAS as proxy'),
'#default_value' => variable_get('cas_proxy', 0),
'#description' => t('Initialize phpCAS as a proxy rather than a client. The proxy ticket returned by the CAS server allows access to external services as the CAS user.'),
);
if (defined('PHPCAS_VERSION') && version_compare(PHPCAS_VERSION, '1.3', '<')) {
$form['advanced']['cas_proxy_settings']['cas_pgtformat'] = array(
'#type' => 'radios',
'#title' => t('CAS PGT storage file format'),
'#default_value' => variable_get('cas_pgtformat', 'plain'),
'#options' => array(
'plain' => t('Plain Text'),
'xml' => t('XML'),
),
);
}
$form['advanced']['cas_proxy_settings']['cas_pgtpath'] = array(
'#type' => 'textfield',
'#title' => t('CAS PGT storage path'),
'#default_value' => variable_get('cas_pgtpath', ''),
'#maxlength' => 255,
'#description' => t("Only needed if 'Use CAS proxy initializer' is configured. Leave empty for default."),
);
$form['advanced']['cas_debugfile'] = array(
'#type' => 'textfield',
'#title' => t('CAS debugging output filename'),
'#default_value' => variable_get('cas_debugfile', ''),
'#maxlength' => 255,
'#description' => t("Leave empty if you don't want debugging output."),
);
return system_settings_form($form);
}
/**
* Checks that the library is installed in the location specified by loading the
* class and extracting the version.
*
* @param $element
* The form element containing the "library" fieldset.
* @param $form_state
* An array containing the form's state information.
*
* @return
* The modified form element containing the "library" fieldset.
*/
function cas_library_version_check($element, &$form_state) {
$path = module_exists('libraries') ? NULL : $element['#value'];
// Suppress errors if phpCAS cannot be loaded.
if ($version = @cas_phpcas_load($path)) {
$element['#suffix'] = '<div class="ok messages">' . t('phpCAS version %version successfully loaded.', array(
'%version' => $version,
)) . '</div>';
}
else {
$element['#suffix'] = '<div class="error messages">' . t('The phpCAS library was not found or could not be loaded.') . '</div>';
}
return $element;
}
Functions
Name | Description |
---|---|
cas_admin_settings | Provides settings pages. |
cas_library_version_check | Checks that the library is installed in the location specified by loading the class and extracting the version. |