PluginProbe
Authorizer / 2.9.3
Authorizer v2.9.3
3.15.3 3.15.2 3.15.1 3.15.0 3.14.3 3.14.4 3.14.2 3.14.1 2.8.1 2.8.2 2.8.3 2.8.4 2.8.5 2.8.6 2.8.7 2.8.8 2.9.0 2.9.1 2.9.10 2.9.11 2.9.12 2.9.13 2.9.2 2.9.3 2.9.6 All 126 releases
authorizer / src / authorizer / class-options.php

class-options.php in Authorizer 2.9.3, at src/authorizer/class-options.php

874 lines 38.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Authorizer
4 *
5 * @license GPL-2.0+
6 * @link https://github.com/uhm-coe/authorizer
7 * @package authorizer
8 */
9
10 namespace Authorizer;
11
12 use Authorizer\Helper;
13
14 /**
15 * Contains functions for rendering the Access Lists tab in Authorizer Settings.
16 */
17 class Options extends Static_Instance {
18
19 /**
20 * Retrieves a specific plugin option from db. Multisite enabled.
21 *
22 * @param string $option Option name.
23 * @param string $admin_mode Helper::NETWORK_CONTEXT will retrieve the multisite value.
24 * @param string $override_mode 'allow override' will retrieve the multisite value if it exists.
25 * @param string $print_mode 'print overlay' will output overlay that hides this option on the settings page.
26 * @return mixed Option value, or null on failure.
27 */
28 public function get( $option, $admin_mode = Helper::SINGLE_CONTEXT, $override_mode = 'no override', $print_mode = 'no overlay' ) {
29 // Special case for user lists (they are saved seperately to prevent concurrency issues).
30 if ( in_array( $option, array( 'access_users_pending', 'access_users_approved', 'access_users_blocked' ), true ) ) {
31 $list = Helper::NETWORK_CONTEXT === $admin_mode ? array() : get_option( 'auth_settings_' . $option );
32 if ( is_multisite() && Helper::NETWORK_CONTEXT === $admin_mode ) {
33 $list = get_blog_option( get_network()->blog_id, 'auth_multisite_settings_' . $option, array() );
34 }
35 return $list;
36 }
37
38 // Get all plugin options.
39 $auth_settings = $this->get_all( $admin_mode, $override_mode );
40
41 // Set option to null if it wasn't found.
42 if ( ! array_key_exists( $option, $auth_settings ) ) {
43 return null;
44 }
45
46 // If requested and appropriate, print the overlay hiding the
47 // single site option that is overridden by a multisite option.
48 if (
49 Helper::NETWORK_CONTEXT !== $admin_mode &&
50 'allow override' === $override_mode &&
51 'print overlay' === $print_mode &&
52 array_key_exists( 'multisite_override', $auth_settings ) &&
53 '1' === $auth_settings['multisite_override'] &&
54 ( ! array_key_exists( 'advanced_override_multisite', $auth_settings ) || 1 !== intval( $auth_settings['advanced_override_multisite'] ) )
55 ) {
56 // Get original plugin options (not overridden value). We'll
57 // show this old value behind the disabled overlay.
58 // $auth_settings = $this->get_all( $admin_mode, 'no override' );
59 // (This feature is disabled).
60 //
61 $name = "auth_settings[$option]";
62 $id = "auth_settings_$option";
63 ?>
64 <div id="overlay-hide-auth_settings_<?php echo esc_attr( $option ); ?>" class="auth_multisite_override_overlay">
65 <span class="overlay-note">
66 <?php esc_html_e( 'This setting is overridden by a', 'authorizer' ); ?> <a href="<?php echo esc_attr( network_admin_url( 'admin.php?page=authorizer' ) ); ?>"><?php esc_html_e( 'multisite option', 'authorizer' ); ?></a>.
67 </span>
68 </div>
69 <?php
70 }
71
72 // If we're getting an option in a site that has overridden the multisite override, make
73 // sure we are returning the option value from that site (not the multisite value).
74 if ( array_key_exists( 'advanced_override_multisite', $auth_settings ) && 1 === intval( $auth_settings['advanced_override_multisite'] ) ) {
75 $auth_settings = $this->get_all( $admin_mode, 'no override' );
76 }
77
78 // Set option to null if it wasn't found.
79 if ( ! array_key_exists( $option, $auth_settings ) ) {
80 return null;
81 }
82
83 return $auth_settings[ $option ];
84 }
85
86 /**
87 * Retrieves all plugin options from db. Multisite enabled.
88 *
89 * @param string $admin_mode Helper::NETWORK_CONTEXT will retrieve the multisite value.
90 * @param string $override_mode 'allow override' will retrieve the multisite value if it exists.
91 * @return mixed Option value, or null on failure.
92 */
93 public function get_all( $admin_mode = Helper::SINGLE_CONTEXT, $override_mode = 'no override' ) {
94 // Grab plugin settings (skip if in Helper::NETWORK_CONTEXT mode).
95 $auth_settings = Helper::NETWORK_CONTEXT === $admin_mode ? array() : get_option( 'auth_settings' );
96
97 // Initialize to default values if the plugin option doesn't exist.
98 if ( false === $auth_settings ) {
99 $auth_settings = $this->set_default_options();
100 }
101
102 // Merge multisite options if we're in a network and the current site hasn't overridden multisite settings.
103 if ( is_multisite() && ( ! array_key_exists( 'advanced_override_multisite', $auth_settings ) || 1 !== intval( $auth_settings['advanced_override_multisite'] ) ) ) {
104 // Get multisite options.
105 $auth_multisite_settings = get_blog_option( get_network()->blog_id, 'auth_multisite_settings', array() );
106
107 // Return the multisite options if we're viewing the network admin options page.
108 // Otherwise override options with their multisite equivalents.
109 if ( Helper::NETWORK_CONTEXT === $admin_mode ) {
110 $auth_settings = $auth_multisite_settings;
111 } elseif (
112 'allow override' === $override_mode &&
113 array_key_exists( 'multisite_override', $auth_multisite_settings ) &&
114 '1' === $auth_multisite_settings['multisite_override']
115 ) {
116 // Keep track of the multisite override selection.
117 $auth_settings['multisite_override'] = $auth_multisite_settings['multisite_override'];
118
119 /**
120 * Note: the options below should be the complete list of overridden
121 * options. It is *not* the complete list of all options (some options
122 * don't have a multisite equivalent).
123 */
124
125 /**
126 * Note: access_users_approved, access_users_pending, and
127 * access_users_blocked do not get overridden. However, since
128 * access_users_approved has a multisite equivalent, you must retrieve
129 * them both seperately. This is done because the two lists should be
130 * treated differently.
131 *
132 * $approved_users = $options->get( 'access_users_approved', Helper::SINGLE_CONTEXT );
133 * $ms_approved_users = $options->get( 'access_users_approved', Helper::NETWORK_CONTEXT );
134 */
135
136 // Override external services (google, cas, or ldap) and associated options.
137 $auth_settings['google'] = $auth_multisite_settings['google'];
138 $auth_settings['google_clientid'] = $auth_multisite_settings['google_clientid'];
139 $auth_settings['google_clientsecret'] = $auth_multisite_settings['google_clientsecret'];
140 $auth_settings['google_hosteddomain'] = $auth_multisite_settings['google_hosteddomain'];
141 $auth_settings['cas'] = $auth_multisite_settings['cas'];
142 $auth_settings['cas_custom_label'] = $auth_multisite_settings['cas_custom_label'];
143 $auth_settings['cas_host'] = $auth_multisite_settings['cas_host'];
144 $auth_settings['cas_port'] = $auth_multisite_settings['cas_port'];
145 $auth_settings['cas_path'] = $auth_multisite_settings['cas_path'];
146 $auth_settings['cas_version'] = $auth_multisite_settings['cas_version'];
147 $auth_settings['cas_attr_email'] = $auth_multisite_settings['cas_attr_email'];
148 $auth_settings['cas_attr_first_name'] = $auth_multisite_settings['cas_attr_first_name'];
149 $auth_settings['cas_attr_last_name'] = $auth_multisite_settings['cas_attr_last_name'];
150 $auth_settings['cas_attr_update_on_login'] = $auth_multisite_settings['cas_attr_update_on_login'];
151 $auth_settings['cas_auto_login'] = $auth_multisite_settings['cas_auto_login'];
152 $auth_settings['cas_link_on_username'] = $auth_multisite_settings['cas_link_on_username'];
153 $auth_settings['ldap'] = $auth_multisite_settings['ldap'];
154 $auth_settings['ldap_host'] = $auth_multisite_settings['ldap_host'];
155 $auth_settings['ldap_port'] = $auth_multisite_settings['ldap_port'];
156 $auth_settings['ldap_tls'] = $auth_multisite_settings['ldap_tls'];
157 $auth_settings['ldap_search_base'] = $auth_multisite_settings['ldap_search_base'];
158 $auth_settings['ldap_uid'] = $auth_multisite_settings['ldap_uid'];
159 $auth_settings['ldap_attr_email'] = $auth_multisite_settings['ldap_attr_email'];
160 $auth_settings['ldap_user'] = $auth_multisite_settings['ldap_user'];
161 $auth_settings['ldap_password'] = $auth_multisite_settings['ldap_password'];
162 $auth_settings['ldap_lostpassword_url'] = $auth_multisite_settings['ldap_lostpassword_url'];
163 $auth_settings['ldap_attr_first_name'] = $auth_multisite_settings['ldap_attr_first_name'];
164 $auth_settings['ldap_attr_last_name'] = $auth_multisite_settings['ldap_attr_last_name'];
165 $auth_settings['ldap_attr_update_on_login'] = $auth_multisite_settings['ldap_attr_update_on_login'];
166
167 // Override access_who_can_login and access_who_can_view.
168 $auth_settings['access_who_can_login'] = $auth_multisite_settings['access_who_can_login'];
169 $auth_settings['access_who_can_view'] = $auth_multisite_settings['access_who_can_view'];
170
171 // Override access_default_role.
172 $auth_settings['access_default_role'] = $auth_multisite_settings['access_default_role'];
173
174 // Override lockouts.
175 $auth_settings['advanced_lockouts'] = $auth_multisite_settings['advanced_lockouts'];
176
177 // Override Hide WordPress login.
178 $auth_settings['advanced_hide_wp_login'] = $auth_multisite_settings['advanced_hide_wp_login'];
179
180 // Override Users per page.
181 $auth_settings['advanced_users_per_page'] = $auth_multisite_settings['advanced_users_per_page'];
182
183 // Override Sort users by.
184 $auth_settings['advanced_users_sort_by'] = $auth_multisite_settings['advanced_users_sort_by'];
185
186 // Override Sort users order.
187 $auth_settings['advanced_users_sort_order'] = $auth_multisite_settings['advanced_users_sort_order'];
188
189 // Override Show Dashboard Widget.
190 $auth_settings['advanced_widget_enabled'] = $auth_multisite_settings['advanced_widget_enabled'];
191 }
192 }
193 return $auth_settings;
194 }
195
196
197 /**
198 * Set meaningful defaults for the plugin options.
199 *
200 * Note: This function is called on plugin activation.
201 */
202 public function set_default_options() {
203 global $wp_roles;
204
205 $auth_settings = get_option( 'auth_settings' );
206 if ( false === $auth_settings ) {
207 $auth_settings = array();
208 }
209
210 // Access Lists Defaults.
211 $auth_settings_access_users_pending = get_option( 'auth_settings_access_users_pending' );
212 if ( false === $auth_settings_access_users_pending ) {
213 $auth_settings_access_users_pending = array();
214 }
215 $auth_settings_access_users_approved = get_option( 'auth_settings_access_users_approved' );
216 if ( false === $auth_settings_access_users_approved ) {
217 $auth_settings_access_users_approved = array();
218 }
219 $auth_settings_access_users_blocked = get_option( 'auth_settings_access_users_blocked' );
220 if ( false === $auth_settings_access_users_blocked ) {
221 $auth_settings_access_users_blocked = array();
222 }
223
224 // Login Access Defaults.
225 if ( ! array_key_exists( 'access_who_can_login', $auth_settings ) ) {
226 $auth_settings['access_who_can_login'] = 'approved_users';
227 }
228 if ( ! array_key_exists( 'access_role_receive_pending_emails', $auth_settings ) ) {
229 $auth_settings['access_role_receive_pending_emails'] = '---';
230 }
231 if ( ! array_key_exists( 'access_pending_redirect_to_message', $auth_settings ) ) {
232 $auth_settings['access_pending_redirect_to_message'] = '<p>' . __( "You're not currently allowed to view this site. Your administrator has been notified, and once he/she has approved your request, you will be able to log in. If you need any other help, please contact your administrator.", 'authorizer' ) . '</p>';
233 }
234 if ( ! array_key_exists( 'access_blocked_redirect_to_message', $auth_settings ) ) {
235 $auth_settings['access_blocked_redirect_to_message'] = '<p>' . __( "You're not currently allowed to log into this site. If you think this is a mistake, please contact your administrator.", 'authorizer' ) . '</p>';
236 }
237 if ( ! array_key_exists( 'access_should_email_approved_users', $auth_settings ) ) {
238 $auth_settings['access_should_email_approved_users'] = '';
239 }
240 if ( ! array_key_exists( 'access_email_approved_users_subject', $auth_settings ) ) {
241 $auth_settings['access_email_approved_users_subject'] = sprintf(
242 /* TRANSLATORS: %s: Shortcode for name of site */
243 __( 'Welcome to %s!', 'authorizer' ),
244 '[site_name]'
245 );
246 }
247 if ( ! array_key_exists( 'access_email_approved_users_body', $auth_settings ) ) {
248 $auth_settings['access_email_approved_users_body'] = sprintf(
249 /* TRANSLATORS: 1: Shortcode for user email 2: Shortcode for site name 3: Shortcode for site URL */
250 __( "Hello %1\$s,\nWelcome to %2\$s! You now have access to all content on the site. Please visit us here:\n%3\$s\n", 'authorizer' ),
251 '[user_email]',
252 '[site_name]',
253 '[site_url]'
254 );
255 }
256
257 // Public Access to Private Page Defaults.
258 if ( ! array_key_exists( 'access_who_can_view', $auth_settings ) ) {
259 $auth_settings['access_who_can_view'] = 'everyone';
260 }
261 if ( ! array_key_exists( 'access_public_pages', $auth_settings ) ) {
262 $auth_settings['access_public_pages'] = array();
263 }
264 if ( ! array_key_exists( 'access_redirect', $auth_settings ) ) {
265 $auth_settings['access_redirect'] = 'login';
266 }
267 if ( ! array_key_exists( 'access_public_warning', $auth_settings ) ) {
268 $auth_settings['access_public_warning'] = 'no_warning';
269 }
270 if ( ! array_key_exists( 'access_redirect_to_message', $auth_settings ) ) {
271 $auth_settings['access_redirect_to_message'] = '<p>' . __( 'Notice: You are browsing this site anonymously, and only have access to a portion of its content.', 'authorizer' ) . '</p>';
272 }
273
274 // External Service Defaults.
275 if ( ! array_key_exists( 'access_default_role', $auth_settings ) ) {
276 // Set default role to 'student' if that role exists, 'subscriber' otherwise.
277 $all_roles = $wp_roles->roles;
278 $editable_roles = apply_filters( 'editable_roles', $all_roles );
279 if ( array_key_exists( 'student', $editable_roles ) ) {
280 $auth_settings['access_default_role'] = 'student';
281 } else {
282 $auth_settings['access_default_role'] = 'subscriber';
283 }
284 }
285
286 if ( ! array_key_exists( 'google', $auth_settings ) ) {
287 $auth_settings['google'] = '';
288 }
289 if ( ! array_key_exists( 'cas', $auth_settings ) ) {
290 $auth_settings['cas'] = '';
291 }
292 if ( ! array_key_exists( 'ldap', $auth_settings ) ) {
293 $auth_settings['ldap'] = '';
294 }
295
296 if ( ! array_key_exists( 'google_clientid', $auth_settings ) ) {
297 $auth_settings['google_clientid'] = '';
298 }
299 if ( ! array_key_exists( 'google_clientsecret', $auth_settings ) ) {
300 $auth_settings['google_clientsecret'] = '';
301 }
302 if ( ! array_key_exists( 'google_hosteddomain', $auth_settings ) ) {
303 $auth_settings['google_hosteddomain'] = '';
304 }
305
306 if ( ! array_key_exists( 'cas_custom_label', $auth_settings ) ) {
307 $auth_settings['cas_custom_label'] = 'CAS';
308 }
309 if ( ! array_key_exists( 'cas_host', $auth_settings ) ) {
310 $auth_settings['cas_host'] = '';
311 }
312 if ( ! array_key_exists( 'cas_port', $auth_settings ) ) {
313 $auth_settings['cas_port'] = '';
314 }
315 if ( ! array_key_exists( 'cas_path', $auth_settings ) ) {
316 $auth_settings['cas_path'] = '';
317 }
318 if ( ! array_key_exists( 'cas_version', $auth_settings ) ) {
319 $auth_settings['cas_version'] = 'SAML_VERSION_1_1';
320 }
321 if ( ! array_key_exists( 'cas_attr_email', $auth_settings ) ) {
322 $auth_settings['cas_attr_email'] = '';
323 }
324 if ( ! array_key_exists( 'cas_attr_first_name', $auth_settings ) ) {
325 $auth_settings['cas_attr_first_name'] = '';
326 }
327 if ( ! array_key_exists( 'cas_attr_last_name', $auth_settings ) ) {
328 $auth_settings['cas_attr_last_name'] = '';
329 }
330 if ( ! array_key_exists( 'cas_attr_update_on_login', $auth_settings ) ) {
331 $auth_settings['cas_attr_update_on_login'] = '';
332 }
333 if ( ! array_key_exists( 'cas_auto_login', $auth_settings ) ) {
334 $auth_settings['cas_auto_login'] = '';
335 }
336 if ( ! array_key_exists( 'cas_link_on_username', $auth_settings ) ) {
337 $auth_settings['cas_link_on_username'] = '';
338 }
339
340 if ( ! array_key_exists( 'ldap_host', $auth_settings ) ) {
341 $auth_settings['ldap_host'] = '';
342 }
343 if ( ! array_key_exists( 'ldap_port', $auth_settings ) ) {
344 $auth_settings['ldap_port'] = '389';
345 }
346 if ( ! array_key_exists( 'ldap_tls', $auth_settings ) ) {
347 $auth_settings['ldap_tls'] = '1';
348 }
349 if ( ! array_key_exists( 'ldap_search_base', $auth_settings ) ) {
350 $auth_settings['ldap_search_base'] = '';
351 }
352 if ( ! array_key_exists( 'ldap_uid', $auth_settings ) ) {
353 $auth_settings['ldap_uid'] = 'uid';
354 }
355 if ( ! array_key_exists( 'ldap_attr_email', $auth_settings ) ) {
356 $auth_settings['ldap_attr_email'] = '';
357 }
358 if ( ! array_key_exists( 'ldap_user', $auth_settings ) ) {
359 $auth_settings['ldap_user'] = '';
360 }
361 if ( ! array_key_exists( 'ldap_password', $auth_settings ) ) {
362 $auth_settings['ldap_password'] = '';
363 }
364 if ( ! array_key_exists( 'ldap_lostpassword_url', $auth_settings ) ) {
365 $auth_settings['ldap_lostpassword_url'] = '';
366 }
367 if ( ! array_key_exists( 'ldap_attr_first_name', $auth_settings ) ) {
368 $auth_settings['ldap_attr_first_name'] = '';
369 }
370 if ( ! array_key_exists( 'ldap_attr_last_name', $auth_settings ) ) {
371 $auth_settings['ldap_attr_last_name'] = '';
372 }
373 if ( ! array_key_exists( 'ldap_attr_update_on_login', $auth_settings ) ) {
374 $auth_settings['ldap_attr_update_on_login'] = '';
375 }
376
377 // Advanced defaults.
378 if ( ! array_key_exists( 'advanced_lockouts', $auth_settings ) ) {
379 $auth_settings['advanced_lockouts'] = array(
380 'attempts_1' => 10,
381 'duration_1' => 1,
382 'attempts_2' => 10,
383 'duration_2' => 10,
384 'reset_duration' => 120,
385 );
386 }
387 if ( ! array_key_exists( 'advanced_hide_wp_login', $auth_settings ) ) {
388 $auth_settings['advanced_hide_wp_login'] = '';
389 }
390 if ( ! array_key_exists( 'advanced_branding', $auth_settings ) ) {
391 $auth_settings['advanced_branding'] = 'default';
392 }
393 if ( ! array_key_exists( 'advanced_admin_menu', $auth_settings ) ) {
394 $auth_settings['advanced_admin_menu'] = 'top';
395 }
396 if ( ! array_key_exists( 'advanced_usermeta', $auth_settings ) ) {
397 $auth_settings['advanced_usermeta'] = '';
398 }
399 if ( ! array_key_exists( 'advanced_users_per_page', $auth_settings ) ) {
400 $auth_settings['advanced_users_per_page'] = 20;
401 }
402 if ( ! array_key_exists( 'advanced_users_sort_by', $auth_settings ) ) {
403 $auth_settings['advanced_users_sort_by'] = 'created';
404 }
405 if ( ! array_key_exists( 'advanced_users_sort_order', $auth_settings ) ) {
406 $auth_settings['advanced_users_sort_order'] = 'asc';
407 }
408 if ( ! array_key_exists( 'advanced_widget_enabled', $auth_settings ) ) {
409 $auth_settings['advanced_widget_enabled'] = '1';
410 }
411 if ( ! array_key_exists( 'advanced_override_multisite', $auth_settings ) ) {
412 $auth_settings['advanced_override_multisite'] = '';
413 }
414
415 // Save default options to database.
416 update_option( 'auth_settings', $auth_settings );
417 update_option( 'auth_settings_access_users_pending', $auth_settings_access_users_pending );
418 update_option( 'auth_settings_access_users_approved', $auth_settings_access_users_approved );
419 update_option( 'auth_settings_access_users_blocked', $auth_settings_access_users_blocked );
420
421 // Multisite defaults.
422 if ( is_multisite() ) {
423 $auth_multisite_settings = get_blog_option( get_network()->blog_id, 'auth_multisite_settings', array() );
424
425 if ( false === $auth_multisite_settings ) {
426 $auth_multisite_settings = array();
427 }
428 // Global switch for enabling multisite options.
429 if ( ! array_key_exists( 'multisite_override', $auth_multisite_settings ) ) {
430 $auth_multisite_settings['multisite_override'] = '';
431 }
432 // Access Lists Defaults.
433 $auth_multisite_settings_access_users_approved = get_blog_option( get_network()->blog_id, 'auth_multisite_settings_access_users_approved' );
434 if ( false === $auth_multisite_settings_access_users_approved ) {
435 $auth_multisite_settings_access_users_approved = array();
436 }
437 // Login Access Defaults.
438 if ( ! array_key_exists( 'access_who_can_login', $auth_multisite_settings ) ) {
439 $auth_multisite_settings['access_who_can_login'] = 'approved_users';
440 }
441 // View Access Defaults.
442 if ( ! array_key_exists( 'access_who_can_view', $auth_multisite_settings ) ) {
443 $auth_multisite_settings['access_who_can_view'] = 'everyone';
444 }
445 // External Service Defaults.
446 if ( ! array_key_exists( 'access_default_role', $auth_multisite_settings ) ) {
447 // Set default role to 'student' if that role exists, 'subscriber' otherwise.
448 $all_roles = $wp_roles->roles;
449 $editable_roles = apply_filters( 'editable_roles', $all_roles );
450 if ( array_key_exists( 'student', $editable_roles ) ) {
451 $auth_multisite_settings['access_default_role'] = 'student';
452 } else {
453 $auth_multisite_settings['access_default_role'] = 'subscriber';
454 }
455 }
456 if ( ! array_key_exists( 'google', $auth_multisite_settings ) ) {
457 $auth_multisite_settings['google'] = '';
458 }
459 if ( ! array_key_exists( 'cas', $auth_multisite_settings ) ) {
460 $auth_multisite_settings['cas'] = '';
461 }
462 if ( ! array_key_exists( 'ldap', $auth_multisite_settings ) ) {
463 $auth_multisite_settings['ldap'] = '';
464 }
465 if ( ! array_key_exists( 'google_clientid', $auth_multisite_settings ) ) {
466 $auth_multisite_settings['google_clientid'] = '';
467 }
468 if ( ! array_key_exists( 'google_clientsecret', $auth_multisite_settings ) ) {
469 $auth_multisite_settings['google_clientsecret'] = '';
470 }
471 if ( ! array_key_exists( 'google_hosteddomain', $auth_multisite_settings ) ) {
472 $auth_multisite_settings['google_hosteddomain'] = '';
473 }
474 if ( ! array_key_exists( 'cas_custom_label', $auth_multisite_settings ) ) {
475 $auth_multisite_settings['cas_custom_label'] = 'CAS';
476 }
477 if ( ! array_key_exists( 'cas_host', $auth_multisite_settings ) ) {
478 $auth_multisite_settings['cas_host'] = '';
479 }
480 if ( ! array_key_exists( 'cas_port', $auth_multisite_settings ) ) {
481 $auth_multisite_settings['cas_port'] = '';
482 }
483 if ( ! array_key_exists( 'cas_path', $auth_multisite_settings ) ) {
484 $auth_multisite_settings['cas_path'] = '';
485 }
486 if ( ! array_key_exists( 'cas_version', $auth_multisite_settings ) ) {
487 $auth_multisite_settings['cas_version'] = 'SAML_VERSION_1_1';
488 }
489 if ( ! array_key_exists( 'cas_attr_email', $auth_multisite_settings ) ) {
490 $auth_multisite_settings['cas_attr_email'] = '';
491 }
492 if ( ! array_key_exists( 'cas_attr_first_name', $auth_multisite_settings ) ) {
493 $auth_multisite_settings['cas_attr_first_name'] = '';
494 }
495 if ( ! array_key_exists( 'cas_attr_last_name', $auth_multisite_settings ) ) {
496 $auth_multisite_settings['cas_attr_last_name'] = '';
497 }
498 if ( ! array_key_exists( 'cas_attr_update_on_login', $auth_multisite_settings ) ) {
499 $auth_multisite_settings['cas_attr_update_on_login'] = '';
500 }
501 if ( ! array_key_exists( 'cas_auto_login', $auth_multisite_settings ) ) {
502 $auth_multisite_settings['cas_auto_login'] = '';
503 }
504 if ( ! array_key_exists( 'cas_link_on_username', $auth_multisite_settings ) ) {
505 $auth_multisite_settings['cas_link_on_username'] = '';
506 }
507 if ( ! array_key_exists( 'ldap_host', $auth_multisite_settings ) ) {
508 $auth_multisite_settings['ldap_host'] = '';
509 }
510 if ( ! array_key_exists( 'ldap_port', $auth_multisite_settings ) ) {
511 $auth_multisite_settings['ldap_port'] = '389';
512 }
513 if ( ! array_key_exists( 'ldap_tls', $auth_multisite_settings ) ) {
514 $auth_multisite_settings['ldap_tls'] = '1';
515 }
516 if ( ! array_key_exists( 'ldap_search_base', $auth_multisite_settings ) ) {
517 $auth_multisite_settings['ldap_search_base'] = '';
518 }
519 if ( ! array_key_exists( 'ldap_uid', $auth_multisite_settings ) ) {
520 $auth_multisite_settings['ldap_uid'] = 'uid';
521 }
522 if ( ! array_key_exists( 'ldap_attr_email', $auth_multisite_settings ) ) {
523 $auth_multisite_settings['ldap_attr_email'] = '';
524 }
525 if ( ! array_key_exists( 'ldap_user', $auth_multisite_settings ) ) {
526 $auth_multisite_settings['ldap_user'] = '';
527 }
528 if ( ! array_key_exists( 'ldap_password', $auth_multisite_settings ) ) {
529 $auth_multisite_settings['ldap_password'] = '';
530 }
531 if ( ! array_key_exists( 'ldap_lostpassword_url', $auth_multisite_settings ) ) {
532 $auth_multisite_settings['ldap_lostpassword_url'] = '';
533 }
534 if ( ! array_key_exists( 'ldap_attr_first_name', $auth_multisite_settings ) ) {
535 $auth_multisite_settings['ldap_attr_first_name'] = '';
536 }
537 if ( ! array_key_exists( 'ldap_attr_last_name', $auth_multisite_settings ) ) {
538 $auth_multisite_settings['ldap_attr_last_name'] = '';
539 }
540 if ( ! array_key_exists( 'ldap_attr_update_on_login', $auth_multisite_settings ) ) {
541 $auth_multisite_settings['ldap_attr_update_on_login'] = '';
542 }
543 // Advanced defaults.
544 if ( ! array_key_exists( 'advanced_lockouts', $auth_multisite_settings ) ) {
545 $auth_multisite_settings['advanced_lockouts'] = array(
546 'attempts_1' => 10,
547 'duration_1' => 1,
548 'attempts_2' => 10,
549 'duration_2' => 10,
550 'reset_duration' => 120,
551 );
552 }
553 if ( ! array_key_exists( 'advanced_hide_wp_login', $auth_multisite_settings ) ) {
554 $auth_multisite_settings['advanced_hide_wp_login'] = '';
555 }
556 if ( ! array_key_exists( 'advanced_users_per_page', $auth_multisite_settings ) ) {
557 $auth_multisite_settings['advanced_users_per_page'] = 20;
558 }
559 if ( ! array_key_exists( 'advanced_users_sort_by', $auth_multisite_settings ) ) {
560 $auth_multisite_settings['advanced_users_sort_by'] = 'created';
561 }
562 if ( ! array_key_exists( 'advanced_users_sort_order', $auth_multisite_settings ) ) {
563 $auth_multisite_settings['advanced_users_sort_order'] = 'asc';
564 }
565 if ( ! array_key_exists( 'advanced_widget_enabled', $auth_multisite_settings ) ) {
566 $auth_multisite_settings['advanced_widget_enabled'] = '1';
567 }
568 // Save default network options to database.
569 update_blog_option( get_network()->blog_id, 'auth_multisite_settings', $auth_multisite_settings );
570 update_blog_option( get_network()->blog_id, 'auth_multisite_settings_access_users_approved', $auth_multisite_settings_access_users_approved );
571 }
572
573 return $auth_settings;
574 }
575
576
577 /**
578 * List sanitizer.
579 *
580 * @param array $list Array of users to sanitize.
581 * @param string $side_effect Set to 'update roles' if role syncing should be performed.
582 * @param string $multisite_mode Set to 'multisite' to sync roles on all sites the user belongs to.
583 * @return array Array of sanitized users.
584 */
585 public function sanitize_user_list( $list, $side_effect = 'none', $multisite_mode = 'single' ) {
586 // If it's not a list, make it so.
587 if ( ! is_array( $list ) ) {
588 $list = array();
589 }
590 foreach ( $list as $key => $user_info ) {
591 if ( strlen( $user_info['email'] ) < 1 ) {
592 // Make sure there are no empty entries in the list.
593 unset( $list[ $key ] );
594 } elseif ( 'update roles' === $side_effect ) {
595 // Make sure the WordPress user accounts have the same role
596 // as that indicated in the list.
597 $wp_user = get_user_by( 'email', $user_info['email'] );
598 if ( $wp_user ) {
599 if ( is_multisite() && 'multisite' === $multisite_mode ) {
600 foreach ( get_blogs_of_user( $wp_user->ID ) as $blog ) {
601 add_user_to_blog( $blog->userblog_id, $wp_user->ID, $user_info['role'] );
602 }
603 } else {
604 $wp_user->set_role( $user_info['role'] );
605 }
606 }
607 }
608 }
609 return $list;
610 }
611
612
613 /**
614 * Settings sanitizer callback.
615 *
616 * @param array $auth_settings Authorizer settings array.
617 * @return array Sanitized Authorizer settings array.
618 */
619 public function sanitize_options( $auth_settings ) {
620 // Default to "Approved Users" login access restriction.
621 if ( ! in_array( $auth_settings['access_who_can_login'], array( 'external_users', 'approved_users' ), true ) ) {
622 $auth_settings['access_who_can_login'] = 'approved_users';
623 }
624
625 // Default to "Everyone" view access restriction.
626 if ( ! in_array( $auth_settings['access_who_can_view'], array( 'everyone', 'logged_in_users' ), true ) ) {
627 $auth_settings['access_who_can_view'] = 'everyone';
628 }
629
630 // Default to WordPress login access redirect.
631 // Note: this option doesn't exist in multisite options, so we first
632 // check to see if it exists.
633 if ( array_key_exists( 'access_redirect', $auth_settings ) && ! in_array( $auth_settings['access_redirect'], array( 'login', 'page', 'message' ), true ) ) {
634 $auth_settings['access_redirect'] = 'login';
635 }
636
637 // Default to warning message for anonymous users on public pages.
638 // Note: this option doesn't exist in multisite options, so we first
639 // check to see if it exists.
640 if ( array_key_exists( 'access_public_warning', $auth_settings ) && ! in_array( $auth_settings['access_public_warning'], array( 'no_warning', 'warning' ), true ) ) {
641 $auth_settings['access_public_warning'] = 'no_warning';
642 }
643
644 // Sanitize Send welcome email (checkbox: value can only be '1' or empty string).
645 $auth_settings['access_should_email_approved_users'] = array_key_exists( 'access_should_email_approved_users', $auth_settings ) && strlen( $auth_settings['access_should_email_approved_users'] ) > 0 ? '1' : '';
646
647 // Sanitize Enable Google Logins (checkbox: value can only be '1' or empty string).
648 $auth_settings['google'] = array_key_exists( 'google', $auth_settings ) && strlen( $auth_settings['google'] ) > 0 ? '1' : '';
649
650 // Sanitize Enable CAS Logins (checkbox: value can only be '1' or empty string).
651 $auth_settings['cas'] = array_key_exists( 'cas', $auth_settings ) && strlen( $auth_settings['cas'] ) > 0 ? '1' : '';
652
653 // Sanitize CAS Host setting.
654 $auth_settings['cas_host'] = filter_var( $auth_settings['cas_host'], FILTER_SANITIZE_URL );
655
656 // Sanitize CAS Port (int).
657 $auth_settings['cas_port'] = filter_var( $auth_settings['cas_port'], FILTER_SANITIZE_NUMBER_INT );
658
659 // Sanitize CAS attribute update (checkbox: value can only be '1' or empty string).
660 $auth_settings['cas_attr_update_on_login'] = array_key_exists( 'cas_attr_update_on_login', $auth_settings ) && strlen( $auth_settings['cas_attr_update_on_login'] ) > 0 ? '1' : '';
661
662 // Sanitize CAS auto-login (checkbox: value can only be '1' or empty string).
663 $auth_settings['cas_auto_login'] = array_key_exists( 'cas_auto_login', $auth_settings ) && strlen( $auth_settings['cas_auto_login'] ) > 0 ? '1' : '';
664
665 // Sanitize CAS link on username (checkbox: value can only be '1' or empty string).
666 $auth_settings['cas_link_on_username'] = array_key_exists( 'cas_link_on_username', $auth_settings ) && strlen( $auth_settings['cas_link_on_username'] ) > 0 ? '1' : '';
667
668 // Sanitize Enable LDAP Logins (checkbox: value can only be '1' or empty string).
669 $auth_settings['ldap'] = array_key_exists( 'ldap', $auth_settings ) && strlen( $auth_settings['ldap'] ) > 0 ? '1' : '';
670
671 // Sanitize LDAP Host setting.
672 $auth_settings['ldap_host'] = filter_var( $auth_settings['ldap_host'], FILTER_SANITIZE_URL );
673
674 // Sanitize LDAP Port (int).
675 $auth_settings['ldap_port'] = filter_var( $auth_settings['ldap_port'], FILTER_SANITIZE_NUMBER_INT );
676
677 // Sanitize LDAP TLS (checkbox: value can only be '1' or empty string).
678 $auth_settings['ldap_tls'] = array_key_exists( 'ldap_tls', $auth_settings ) && strlen( $auth_settings['ldap_tls'] ) > 0 ? '1' : '';
679
680 // Sanitize LDAP attributes (basically make sure they don't have any parentheses).
681 $auth_settings['ldap_uid'] = filter_var( $auth_settings['ldap_uid'], FILTER_SANITIZE_EMAIL );
682
683 // Sanitize LDAP Lost Password URL.
684 $auth_settings['ldap_lostpassword_url'] = filter_var( $auth_settings['ldap_lostpassword_url'], FILTER_SANITIZE_URL );
685
686 // Obfuscate LDAP directory user password.
687 if ( strlen( $auth_settings['ldap_password'] ) > 0 ) {
688 // encrypt the directory user password for some minor obfuscation in the database.
689 $auth_settings['ldap_password'] = Helper::encrypt( $auth_settings['ldap_password'] );
690 }
691
692 // Sanitize LDAP attribute update (checkbox: value can only be '1' or empty string).
693 $auth_settings['ldap_attr_update_on_login'] = array_key_exists( 'ldap_attr_update_on_login', $auth_settings ) && strlen( $auth_settings['ldap_attr_update_on_login'] ) > 0 ? '1' : '';
694
695 // Make sure public pages is an empty array if it's empty.
696 // Note: this option doesn't exist in multisite options, so we first
697 // check to see if it exists.
698 if ( array_key_exists( 'access_public_pages', $auth_settings ) && ! is_array( $auth_settings['access_public_pages'] ) ) {
699 $auth_settings['access_public_pages'] = array();
700 }
701
702 // Make sure all lockout options are integers (attempts_1,
703 // duration_1, attempts_2, duration_2, reset_duration).
704 foreach ( $auth_settings['advanced_lockouts'] as $key => $value ) {
705 $auth_settings['advanced_lockouts'][ $key ] = filter_var( $value, FILTER_SANITIZE_NUMBER_INT );
706 }
707
708 // Sanitize Hide WordPress logins (checkbox: value can only be '1' or empty string).
709 $auth_settings['advanced_hide_wp_login'] = array_key_exists( 'advanced_hide_wp_login', $auth_settings ) && strlen( $auth_settings['advanced_hide_wp_login'] ) > 0 ? '1' : '';
710
711 // Sanitize Users per page (text: value can only int from 1 to MAX_INT).
712 $auth_settings['advanced_users_per_page'] = array_key_exists( 'advanced_users_per_page', $auth_settings ) && intval( $auth_settings['advanced_users_per_page'] ) > 0 ? intval( $auth_settings['advanced_users_per_page'] ) : 1;
713
714 // Sanitize Sort users by (select: value can be 'email', 'role', 'date_added', 'created').
715 if ( ! isset( $auth_settings['advanced_users_sort_by'] ) || ! in_array( $auth_settings['advanced_users_sort_by'], array( 'email', 'role', 'date_added', 'created' ), true ) ) {
716 $auth_settings['advanced_users_sort_by'] = 'created';
717 }
718
719 // Sanitize Sort users order (select: value can be 'asc', 'desc').
720 if ( ! isset( $auth_settings['advanced_users_sort_order'] ) || ! in_array( $auth_settings['advanced_users_sort_order'], array( 'asc', 'desc' ), true ) ) {
721 $auth_settings['advanced_users_sort_order'] = 'asc';
722 }
723
724 // Sanitize Show Dashboard Widget (checkbox: value can only be '1' or empty string).
725 $auth_settings['advanced_widget_enabled'] = array_key_exists( 'advanced_widget_enabled', $auth_settings ) && strlen( $auth_settings['advanced_widget_enabled'] ) > 0 ? '1' : '';
726
727 // Sanitize Override multisite options (checkbox: value can only be '1' or empty string).
728 $auth_settings['advanced_override_multisite'] = array_key_exists( 'advanced_override_multisite', $auth_settings ) && strlen( $auth_settings['advanced_override_multisite'] ) > 0 ? '1' : '';
729
730 return $auth_settings;
731 }
732
733
734 /**
735 * Sanitizes an array of user update commands coming from the AJAX handler in Authorizer Settings.
736 *
737 * Example $users array:
738 * array(
739 * array(
740 * edit_action: 'add' or 'remove' or 'change_role',
741 * email: 'johndoe@example.com',
742 * role: 'subscriber',
743 * date_added: 'Jun 2014',
744 * local_user: 'true' or 'false',
745 * multisite_user: 'true' or 'false',
746 * ),
747 * ...
748 * )
749 *
750 * @param array $users Users to edit.
751 * @param array $args Options (e.g., 'allow_wildcard_email' => true).
752 * @return array Sanitized users to edit.
753 */
754 public function sanitize_update_auth_users( $users = array(), $args = array() ) {
755 if ( ! is_array( $users ) ) {
756 $users = array();
757 }
758 if ( isset( $args['allow_wildcard_email'] ) && $args['allow_wildcard_email'] ) {
759 $users = array_map( array( $this, 'sanitize_update_auth_user_allow_wildcard_email' ), $users );
760 } else {
761 $users = array_map( array( $this, 'sanitize_update_auth_user' ), $users );
762 }
763
764 // Remove any entries that failed email address validation.
765 $users = array_filter( $users, array( $this, 'remove_invalid_auth_users' ) );
766
767 return $users;
768 }
769
770
771 /**
772 * Callback for array_map in sanitize_update_auth_users().
773 *
774 * @param array $user User data to sanitize.
775 * @return array Sanitized user data.
776 */
777 public function sanitize_update_auth_user( $user ) {
778 if ( array_key_exists( 'edit_action', $user ) ) {
779 $user['edit_action'] = sanitize_text_field( $user['edit_action'] );
780 }
781 if ( isset( $user['email'] ) ) {
782 $user['email'] = sanitize_email( $user['email'] );
783 }
784 if ( isset( $user['role'] ) ) {
785 $user['role'] = sanitize_text_field( $user['role'] );
786 }
787 if ( isset( $user['date_added'] ) ) {
788 $user['date_added'] = sanitize_text_field( $user['date_added'] );
789 }
790 if ( isset( $user['local_user'] ) ) {
791 $user['local_user'] = 'true' === $user['local_user'] ? 'true' : 'false';
792 }
793 if ( isset( $user['multisite_user'] ) ) {
794 $user['multisite_user'] = 'true' === $user['multisite_user'] ? 'true' : 'false';
795 }
796
797 return $user;
798 }
799
800
801 /**
802 * Settings print callback.
803 *
804 * @param string $args Args (e.g., multisite admin mode).
805 * @return void
806 */
807 public function print_section_info_tabs( $args = '' ) {
808 if ( Helper::NETWORK_CONTEXT === Helper::get_context( $args ) ) :
809 ?>
810 <h2 class="nav-tab-wrapper">
811 <a class="nav-tab nav-tab-access_lists nav-tab-active" href="javascript:chooseTab('access_lists' );"><?php esc_html_e( 'Access Lists', 'authorizer' ); ?></a>
812 <a class="nav-tab nav-tab-external" href="javascript:chooseTab('external' );"><?php esc_html_e( 'External Service', 'authorizer' ); ?></a>
813 <a class="nav-tab nav-tab-advanced" href="javascript:chooseTab('advanced' );"><?php esc_html_e( 'Advanced', 'authorizer' ); ?></a>
814 </h2>
815 <?php else : ?>
816 <h2 class="nav-tab-wrapper">
817 <a class="nav-tab nav-tab-access_lists nav-tab-active" href="javascript:chooseTab('access_lists' );"><?php esc_html_e( 'Access Lists', 'authorizer' ); ?></a>
818 <a class="nav-tab nav-tab-access_login" href="javascript:chooseTab('access_login' );"><?php esc_html_e( 'Login Access', 'authorizer' ); ?></a>
819 <a class="nav-tab nav-tab-access_public" href="javascript:chooseTab('access_public' );"><?php esc_html_e( 'Public Access', 'authorizer' ); ?></a>
820 <a class="nav-tab nav-tab-external" href="javascript:chooseTab('external' );"><?php esc_html_e( 'External Service', 'authorizer' ); ?></a>
821 <a class="nav-tab nav-tab-advanced" href="javascript:chooseTab('advanced' );"><?php esc_html_e( 'Advanced', 'authorizer' ); ?></a>
822 </h2>
823 <?php
824 endif;
825 }
826
827
828 /**
829 * This array filter will remove any users who failed email address validation
830 * (which would set their email to a blank string).
831 *
832 * @param array $user User data to check for a valid email.
833 * @return bool Whether to filter out the user.
834 */
835 protected function remove_invalid_auth_users( $user ) {
836 return isset( $user['email'] ) && strlen( $user['email'] ) > 0;
837 }
838
839
840 /**
841 * Callback for array_map in sanitize_update_auth_users().
842 *
843 * @param array $user User data to sanitize.
844 * @return array Sanitized user data.
845 */
846 protected function sanitize_update_auth_user_allow_wildcard_email( $user ) {
847 if ( array_key_exists( 'edit_action', $user ) ) {
848 $user['edit_action'] = sanitize_text_field( $user['edit_action'] );
849 }
850 if ( isset( $user['email'] ) ) {
851 if ( strpos( $user['email'], '@' ) === 0 ) {
852 $user['email'] = sanitize_text_field( $user['email'] );
853 } else {
854 $user['email'] = sanitize_email( $user['email'] );
855 }
856 }
857 if ( isset( $user['role'] ) ) {
858 $user['role'] = sanitize_text_field( $user['role'] );
859 }
860 if ( isset( $user['date_added'] ) ) {
861 $user['date_added'] = sanitize_text_field( $user['date_added'] );
862 }
863 if ( isset( $user['local_user'] ) ) {
864 $user['local_user'] = 'true' === $user['local_user'] ? 'true' : 'false';
865 }
866 if ( isset( $user['multisite_user'] ) ) {
867 $user['multisite_user'] = 'true' === $user['multisite_user'] ? 'true' : 'false';
868 }
869
870 return $user;
871 }
872
873 }
874