1 |
85ad3d82
|
Assos Assos
|
<?php
|
2 |
|
|
|
3 |
|
|
/**
|
4 |
|
|
* @file
|
5 |
|
|
* CAS module settings UI.
|
6 |
|
|
*/
|
7 |
|
|
|
8 |
|
|
/**
|
9 |
|
|
* Provides settings pages.
|
10 |
|
|
*/
|
11 |
|
|
function cas_admin_settings() {
|
12 |
|
|
|
13 |
|
|
$form['library'] = array(
|
14 |
|
|
'#type' => 'fieldset',
|
15 |
|
|
'#title' => t('Library (phpCAS)'),
|
16 |
|
|
'#collapsible' => TRUE,
|
17 |
|
|
);
|
18 |
|
|
if (module_exists('libraries')) {
|
19 |
|
|
// If Libraries API is enabled, print an information item.
|
20 |
|
|
$form['library']['cas_library_dir'] = array(
|
21 |
|
|
'#type' => 'item',
|
22 |
|
|
'#title' => t('Library directory'),
|
23 |
|
|
'#value' => t('Using <a href="@url">Libraries API</a>.', array('@url' => 'http://drupal.org/project/libraries')),
|
24 |
|
|
'#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.'),
|
25 |
|
|
'#after_build' => array('cas_library_version_check'),
|
26 |
|
|
);
|
27 |
|
|
}
|
28 |
|
|
else {
|
29 |
|
|
// If Libraries API is not installed, display path settings.
|
30 |
|
|
$form['library']['cas_library_dir'] = array(
|
31 |
|
|
'#type' => 'textfield',
|
32 |
|
|
'#title' => t('Library directory'),
|
33 |
|
|
'#default_value' => variable_get('cas_library_dir', 'CAS'),
|
34 |
|
|
'#description' => t('Specify the path to the directory the CAS.php file resides in. Leave blank to load cas from your phpinclude path.'),
|
35 |
|
|
'#after_build' => array('cas_library_version_check'),
|
36 |
|
|
);
|
37 |
|
|
}
|
38 |
|
|
|
39 |
|
|
|
40 |
|
|
$form['server'] = array(
|
41 |
|
|
'#type' => 'fieldset',
|
42 |
|
|
'#title' => t('CAS Server'),
|
43 |
|
|
'#collapsible' => TRUE,
|
44 |
|
|
'#collapsed' => FALSE,
|
45 |
|
|
);
|
46 |
|
|
|
47 |
|
|
$form['server']['cas_version'] = array(
|
48 |
|
|
'#type' => 'radios',
|
49 |
|
|
'#title' => t('Version'),
|
50 |
|
|
'#default_value' => variable_get('cas_version', '2.0'),
|
51 |
|
|
'#options' => array(
|
52 |
|
|
'1.0' => '1.0',
|
53 |
|
|
'2.0' => t('2.0 or higher'),
|
54 |
|
|
'S1' => t('SAML Version 1.1'),
|
55 |
|
|
),
|
56 |
|
|
);
|
57 |
|
|
|
58 |
|
|
$form['server']['cas_server'] = array(
|
59 |
|
|
'#type' => 'textfield',
|
60 |
|
|
'#title' => t('Hostname'),
|
61 |
|
|
'#default_value' => variable_get('cas_server', ''),
|
62 |
|
|
'#size' => 30,
|
63 |
|
|
// Hostnames can be 255 characters long.
|
64 |
|
|
'#maxlength' => 255,
|
65 |
|
|
'#description' => t('Hostname or IP Address of the CAS server.'),
|
66 |
|
|
);
|
67 |
|
|
|
68 |
|
|
$form['server']['cas_port'] = array(
|
69 |
|
|
'#type' => 'textfield',
|
70 |
|
|
'#title' => t('Port'),
|
71 |
|
|
'#default_value' => variable_get('cas_port', '443'),
|
72 |
|
|
'#size' => 5,
|
73 |
|
|
// The maximum port number is 65536, 5 digits.
|
74 |
|
|
'#maxlength' => 5,
|
75 |
|
|
'#description' => t('443 is the standard SSL port. 8443 is the standard non-root port for Tomcat.'),
|
76 |
|
|
);
|
77 |
|
|
|
78 |
|
|
$form['server']['cas_uri'] = array(
|
79 |
|
|
'#type' => 'textfield',
|
80 |
|
|
'#title' => t('URI'),
|
81 |
|
|
'#default_value' => variable_get('cas_uri', ''),
|
82 |
|
|
'#size' => 30,
|
83 |
|
|
'#description' => t('If CAS is not at the root of the host, include a URI (e.g., /cas).'),
|
84 |
|
|
);
|
85 |
|
|
|
86 |
|
|
$form['server']['cas_cert'] = array(
|
87 |
|
|
'#type' => 'textfield',
|
88 |
|
|
'#title' => t('Certificate Authority PEM Certificate'),
|
89 |
|
|
'#default_value' => variable_get('cas_cert', ''),
|
90 |
|
|
'#maxlength' => 255,
|
91 |
|
|
'#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.'),
|
92 |
|
|
);
|
93 |
|
|
|
94 |
|
|
$form['login'] = array(
|
95 |
|
|
'#type' => 'fieldset',
|
96 |
|
|
'#title' => t('Login form'),
|
97 |
|
|
'#collapsible' => TRUE,
|
98 |
|
|
'#collapsed' => TRUE,
|
99 |
|
|
);
|
100 |
|
|
|
101 |
|
|
$form['login']['cas_login_form'] = array(
|
102 |
|
|
'#type' => 'radios',
|
103 |
|
|
'#title' => t('Add CAS link to login forms'),
|
104 |
|
|
'#default_value' => variable_get('cas_login_form', CAS_NO_LINK),
|
105 |
|
|
'#options' => array(
|
106 |
|
|
CAS_NO_LINK => t('Do not add link to login forms'),
|
107 |
|
|
CAS_ADD_LINK => t('Add link to login forms'),
|
108 |
|
|
CAS_MAKE_DEFAULT => t('Make CAS login default on login forms')),
|
109 |
|
|
);
|
110 |
|
|
|
111 |
|
|
$form['login']['cas_login_invite'] = array(
|
112 |
|
|
'#type' => 'textfield',
|
113 |
|
|
'#title' => t('CAS Login invitation'),
|
114 |
|
|
'#default_value' => variable_get('cas_login_invite', CAS_LOGIN_INVITE_DEFAULT),
|
115 |
|
|
'#description' => t('Message users will see to invite them to log in with CAS credentials.'),
|
116 |
|
|
);
|
117 |
|
|
|
118 |
|
|
$form['login']['cas_login_drupal_invite'] = array(
|
119 |
|
|
'#type' => 'textfield',
|
120 |
|
|
'#title' => t('Drupal login invitation'),
|
121 |
|
|
'#default_value' => variable_get('cas_login_drupal_invite', CAS_LOGIN_DRUPAL_INVITE_DEFAULT),
|
122 |
|
|
'#description' => t('Message users will see to invite them to log in with Drupal credentials.'),
|
123 |
|
|
);
|
124 |
|
|
|
125 |
|
|
$form['login']['cas_login_redir_message'] = array(
|
126 |
|
|
'#type' => 'textfield',
|
127 |
|
|
'#title' => t('Redirection notification message'),
|
128 |
|
|
'#default_value' => variable_get('cas_login_redir_message', CAS_LOGIN_REDIR_MESSAGE),
|
129 |
|
|
'#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.'),
|
130 |
|
|
);
|
131 |
|
|
|
132 |
|
|
// Setting for message displayed to user upon successfull login
|
133 |
|
|
$form['login']['cas_login_message'] = array(
|
134 |
|
|
'#type' => 'textfield',
|
135 |
|
|
'#title' => t('Successful login message'),
|
136 |
|
|
'#default_value' => variable_get('cas_login_message', 'Logged in via CAS as %cas_username.'),
|
137 |
|
|
'#description' => t('Message displayed when a user logs in successfully. <em>%cas_username</em> will be replaced with the user\'s name.'),
|
138 |
|
|
);
|
139 |
|
|
|
140 |
|
|
|
141 |
|
|
$form['account'] = array(
|
142 |
|
|
'#type' => 'fieldset',
|
143 |
|
|
'#title' => t('User accounts'),
|
144 |
|
|
'#collapsible' => TRUE,
|
145 |
|
|
'#collapsed' => TRUE,
|
146 |
|
|
);
|
147 |
|
|
|
148 |
|
|
$form['account']['cas_user_register'] = array(
|
149 |
|
|
'#type' => 'checkbox',
|
150 |
|
|
'#title' => t('Automatically create Drupal accounts'),
|
151 |
|
|
'#default_value' => variable_get('cas_user_register', 1),
|
152 |
|
|
'#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.'),
|
153 |
|
|
);
|
154 |
|
|
|
155 |
|
|
$form['account']['cas_domain'] = array(
|
156 |
|
|
'#type' => 'textfield',
|
157 |
|
|
'#title' => t('E-mail address'),
|
158 |
|
|
'#field_prefix' => t('username@'),
|
159 |
|
|
'#default_value' => variable_get('cas_domain', ''),
|
160 |
|
|
'#size' => 30,
|
161 |
|
|
// Hostnames can be 255 characters long.
|
162 |
|
|
'#maxlength' => 255,
|
163 |
|
|
'#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."),
|
164 |
|
|
);
|
165 |
|
|
|
166 |
|
|
// Taken from Drupal's User module.
|
167 |
|
|
$roles = array_map('check_plain', user_roles(TRUE));
|
168 |
|
|
$checkbox_authenticated = array(
|
169 |
|
|
'#type' => 'checkbox',
|
170 |
|
|
'#title' => $roles[DRUPAL_AUTHENTICATED_RID],
|
171 |
|
|
'#default_value' => TRUE,
|
172 |
|
|
'#disabled' => TRUE,
|
173 |
|
|
);
|
174 |
|
|
unset($roles[DRUPAL_AUTHENTICATED_RID]);
|
175 |
|
|
$form['account']['cas_auto_assigned_role'] = array(
|
176 |
|
|
'#type' => 'checkboxes',
|
177 |
|
|
'#title' => t('Roles'),
|
178 |
|
|
'#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.'),
|
179 |
|
|
'#default_value' => variable_get('cas_auto_assigned_role', array()),
|
180 |
|
|
'#options' => $roles,
|
181 |
|
|
'#access' => user_access('administer permissions'),
|
182 |
|
|
DRUPAL_AUTHENTICATED_RID => $checkbox_authenticated,
|
183 |
|
|
);
|
184 |
|
|
|
185 |
|
|
$form['account']['cas_hide_email'] = array(
|
186 |
|
|
'#type' => 'checkbox',
|
187 |
|
|
'#title' => t('Users cannot change email address'),
|
188 |
|
|
'#default_value' => variable_get('cas_hide_email', 0),
|
189 |
|
|
'#description' => t('Hide email address field on the edit user form.'),
|
190 |
|
|
);
|
191 |
|
|
|
192 |
|
|
$form['account']['cas_hide_password'] = array(
|
193 |
|
|
'#type' => 'checkbox',
|
194 |
|
|
'#title' => t('Users cannot change password'),
|
195 |
|
|
'#default_value' => variable_get('cas_hide_password', 0),
|
196 |
|
|
'#description' => t('Hide password field on the edit user form. This also removes the requirement to enter your current password before changing your e-mail address.'),
|
197 |
|
|
);
|
198 |
|
|
|
199 |
|
|
if (module_exists('persistent_login')) {
|
200 |
|
|
$form['account']['cas_allow_rememberme'] = array(
|
201 |
|
|
'#type' => 'checkbox',
|
202 |
|
|
'#title' => t('Users can stay logged in between sessions'),
|
203 |
|
|
'#default_value' => variable_get('cas_allow_rememberme', 0),
|
204 |
|
|
'#description' => t('If Persistent Login is enabled, users can choose to stay logged in between browser sessions'),
|
205 |
|
|
);
|
206 |
|
|
}
|
207 |
|
|
|
208 |
|
|
$form['pages'] = array(
|
209 |
|
|
'#type' => 'fieldset',
|
210 |
|
|
'#title' => t('Redirection'),
|
211 |
|
|
'#collapsible' => TRUE,
|
212 |
|
|
'#collapsed' => TRUE,
|
213 |
|
|
);
|
214 |
|
|
|
215 |
|
|
$form['pages']['cas_check_first'] = array(
|
216 |
|
|
'#type' => 'checkbox',
|
217 |
|
|
'#title' => t('Check with the CAS server to see if the user is already logged in?'),
|
218 |
|
|
'#default_value' => variable_get('cas_check_first', 0),
|
219 |
|
|
'#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')),
|
220 |
|
|
);
|
221 |
|
|
|
222 |
|
|
$form['pages']['cas_access'] = array(
|
223 |
|
|
'#type' => 'radios',
|
224 |
|
|
'#title' => t('Require CAS login for'),
|
225 |
|
|
'#default_value' => variable_get('cas_access', 0),
|
226 |
|
|
'#options' => array(t('specific pages'), t('all pages except specific pages')),
|
227 |
|
|
);
|
228 |
|
|
|
229 |
|
|
$form['pages']['cas_pages'] = array(
|
230 |
|
|
'#type' => 'textarea',
|
231 |
|
|
'#title' => t('Specific pages'),
|
232 |
|
|
'#default_value' => variable_get('cas_pages', ''),
|
233 |
|
|
'#cols' => 40,
|
234 |
|
|
'#rows' => 5,
|
235 |
|
|
'#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."),
|
236 |
|
|
);
|
237 |
|
|
|
238 |
|
|
$form['pages']['cas_exclude'] = array(
|
239 |
|
|
'#type' => 'textarea',
|
240 |
|
|
'#title' => t('Excluded Pages'),
|
241 |
|
|
'#default_value' => variable_get('cas_exclude', CAS_EXCLUDE),
|
242 |
|
|
'#cols' => 40,
|
243 |
|
|
'#rows' => 5,
|
244 |
|
|
'#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."),
|
245 |
|
|
);
|
246 |
|
|
|
247 |
|
|
|
248 |
|
|
$form['misc'] = array(
|
249 |
|
|
'#type' => 'fieldset',
|
250 |
|
|
'#title' => t('Login/Logout Destinations'),
|
251 |
|
|
'#collapsible' => TRUE,
|
252 |
|
|
'#collapsed' => TRUE,
|
253 |
|
|
);
|
254 |
|
|
|
255 |
|
|
// Settings for redirection upon first login
|
256 |
|
|
$form['misc']['cas_first_login_destination'] = array(
|
257 |
|
|
'#type' => 'textfield',
|
258 |
|
|
'#title' => t('Initial login destination'),
|
259 |
|
|
'#default_value' => variable_get('cas_first_login_destination', ''),
|
260 |
|
|
'#size' => 40,
|
261 |
|
|
'#maxlength' => 255,
|
262 |
|
|
'#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."),
|
263 |
|
|
);
|
264 |
|
|
|
265 |
|
|
// Setting for page to return to after a CAS logout
|
266 |
|
|
$form['misc']['cas_logout_destination'] = array(
|
267 |
|
|
'#type' => 'textfield',
|
268 |
|
|
'#title' => t('Logout destination'),
|
269 |
|
|
'#default_value' => variable_get('cas_logout_destination', ''),
|
270 |
|
|
'#size' => 40,
|
271 |
|
|
'#maxlength' => 255,
|
272 |
|
|
'#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."),
|
273 |
|
|
);
|
274 |
|
|
|
275 |
|
|
$form['misc']['cas_changePasswordURL'] = array(
|
276 |
|
|
'#type' => 'textfield',
|
277 |
|
|
'#title' => t('Change password URL'),
|
278 |
|
|
'#default_value' => variable_get('cas_changePasswordURL', ''),
|
279 |
|
|
'#maxlength' => 255,
|
280 |
|
|
'#description' => t('The URL users should use for changing their password. Leave blank to use the standard Drupal page.'),
|
281 |
|
|
);
|
282 |
|
|
|
283 |
|
|
$form['misc']['cas_registerURL'] = array(
|
284 |
|
|
'#type' => 'textfield',
|
285 |
|
|
'#title' => t('Registration URL'),
|
286 |
|
|
'#default_value' => variable_get('cas_registerURL', ''),
|
287 |
|
|
'#maxlength' => 255,
|
288 |
|
|
'#description' => t('The URL users should use for changing registering. Leave blank to use the standard Drupal page.'),
|
289 |
|
|
);
|
290 |
|
|
|
291 |
|
|
|
292 |
|
|
$form['advanced'] = array(
|
293 |
|
|
'#type' => 'fieldset',
|
294 |
|
|
'#title' => t('Miscellaneous & Experimental Settings'),
|
295 |
|
|
'#collapsible' => TRUE,
|
296 |
|
|
'#collapsed' => TRUE,
|
297 |
|
|
);
|
298 |
|
|
$form['advanced']['cas_proxy'] = array(
|
299 |
|
|
'#type' => 'checkbox',
|
300 |
|
|
'#title' => t('Initialize CAS as proxy'),
|
301 |
|
|
'#default_value' => variable_get('cas_proxy', 0),
|
302 |
|
|
'#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.')
|
303 |
|
|
);
|
304 |
|
|
|
305 |
|
|
$form['advanced']['cas_proxy_settings'] = array(
|
306 |
|
|
'#type' => 'container',
|
307 |
|
|
'#states' => array(
|
308 |
|
|
'invisible' => array(
|
309 |
|
|
'input[name="cas_proxy"]' => array('checked' => FALSE),
|
310 |
|
|
),
|
311 |
|
|
),
|
312 |
|
|
);
|
313 |
|
|
$form['advanced']['cas_proxy_settings']['cas_pgtformat'] = array(
|
314 |
|
|
'#type' => 'radios',
|
315 |
|
|
'#title' => t('CAS PGT storage file format'),
|
316 |
|
|
'#default_value' => variable_get('cas_pgtformat', 'plain'),
|
317 |
|
|
'#options' => array('plain' => t('Plain Text'), 'xml' => t('XML')),
|
318 |
|
|
);
|
319 |
|
|
|
320 |
|
|
$form['advanced']['cas_proxy_settings']['cas_pgtpath'] = array(
|
321 |
|
|
'#type' => 'textfield',
|
322 |
|
|
'#title' => t('CAS PGT storage path'),
|
323 |
|
|
'#default_value' => variable_get('cas_pgtpath', ''),
|
324 |
|
|
'#maxlength' => 255,
|
325 |
|
|
'#description' => t("Only needed if 'Use CAS proxy initializer' is configured. Leave empty for default."),
|
326 |
|
|
);
|
327 |
|
|
|
328 |
|
|
$form['advanced']['cas_debugfile'] = array(
|
329 |
|
|
'#type' => 'textfield',
|
330 |
|
|
'#title' => t('CAS debugging output filename'),
|
331 |
|
|
'#default_value' => variable_get('cas_debugfile', ''),
|
332 |
|
|
'#maxlength' => 255,
|
333 |
|
|
'#description' => t("Leave empty if you don't want debugging output."),
|
334 |
|
|
);
|
335 |
|
|
|
336 |
|
|
return system_settings_form($form);
|
337 |
|
|
}
|
338 |
|
|
|
339 |
|
|
/**
|
340 |
|
|
* Checks that the library is installed in the location specified by loading the
|
341 |
|
|
* class and extracting the version.
|
342 |
|
|
*
|
343 |
|
|
* @param $element
|
344 |
|
|
* The form element containing the "library" fieldset.
|
345 |
|
|
* @param $form_state
|
346 |
|
|
* An array containing the form's state information.
|
347 |
|
|
*
|
348 |
|
|
* @return
|
349 |
|
|
* The modified form element containing the "library" fieldset.
|
350 |
|
|
*/
|
351 |
|
|
function cas_library_version_check($element, &$form_state) {
|
352 |
|
|
$path = module_exists('libraries') ? NULL : $element['#value'];
|
353 |
|
|
// Suppress errors if phpCAS cannot be loaded.
|
354 |
|
|
if ($version = @cas_phpcas_load($path)) {
|
355 |
|
|
$element['#suffix'] = '<div class="ok messages">' . t('phpCAS version %version successfully loaded.', array('%version' => $version)) . '</div>';
|
356 |
|
|
}
|
357 |
|
|
else {
|
358 |
|
|
$element['#suffix'] = '<div class="error messages">' . t('The phpCAS library was not found or could not be loaded.') . '</div>';
|
359 |
|
|
}
|
360 |
|
|
return $element;
|
361 |
|
|
} |