PluginProbe
Authorizer / 2.9.13
Authorizer v2.9.13
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.13, at src/authorizer/class-options.php

883 lines 39.5 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 Disable WordPress login.
181 $auth_settings['advanced_disable_wp_login'] = $auth_multisite_settings['advanced_disable_wp_login'];
182
183 // Override Users per page.
184 $auth_settings['advanced_users_per_page'] = $auth_multisite_settings['advanced_users_per_page'];
185
186 // Override Sort users by.
187 $auth_settings['advanced_users_sort_by'] = $auth_multisite_settings['advanced_users_sort_by'];
188
189 // Override Sort users order.
190 $auth_settings['advanced_users_sort_order'] = $auth_multisite_settings['advanced_users_sort_order'];
191
192 // Override Show Dashboard Widget.
193 $auth_settings['advanced_widget_enabled'] = $auth_multisite_settings['advanced_widget_enabled'];
194 }
195 }
196 return $auth_settings;
197 }
198
199
200 /**
201 * Set meaningful defaults for the plugin options.
202 *
203 * Note: This function is called on plugin activation.
204 */
205 public function set_default_options() {
206 global $wp_roles;
207
208 $auth_settings = get_option( 'auth_settings' );
209 if ( false === $auth_settings ) {
210 $auth_settings = array();
211 }
212
213 // Access Lists Defaults.
214 $auth_settings_access_users_pending = get_option( 'auth_settings_access_users_pending' );
215 if ( false === $auth_settings_access_users_pending ) {
216 $auth_settings_access_users_pending = array();
217 }
218 $auth_settings_access_users_approved = get_option( 'auth_settings_access_users_approved' );
219 if ( false === $auth_settings_access_users_approved ) {
220 $auth_settings_access_users_approved = array();
221 }
222 $auth_settings_access_users_blocked = get_option( 'auth_settings_access_users_blocked' );
223 if ( false === $auth_settings_access_users_blocked ) {
224 $auth_settings_access_users_blocked = array();
225 }
226
227 // Login Access Defaults.
228 if ( ! array_key_exists( 'access_who_can_login', $auth_settings ) ) {
229 $auth_settings['access_who_can_login'] = 'approved_users';
230 }
231 if ( ! array_key_exists( 'access_role_receive_pending_emails', $auth_settings ) ) {
232 $auth_settings['access_role_receive_pending_emails'] = '---';
233 }
234 if ( ! array_key_exists( 'access_pending_redirect_to_message', $auth_settings ) ) {
235 $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>';
236 }
237 if ( ! array_key_exists( 'access_blocked_redirect_to_message', $auth_settings ) ) {
238 $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>';
239 }
240 if ( ! array_key_exists( 'access_should_email_approved_users', $auth_settings ) ) {
241 $auth_settings['access_should_email_approved_users'] = '';
242 }
243 if ( ! array_key_exists( 'access_email_approved_users_subject', $auth_settings ) ) {
244 $auth_settings['access_email_approved_users_subject'] = sprintf(
245 /* TRANSLATORS: %s: Shortcode for name of site */
246 __( 'Welcome to %s!', 'authorizer' ),
247 '[site_name]'
248 );
249 }
250 if ( ! array_key_exists( 'access_email_approved_users_body', $auth_settings ) ) {
251 $auth_settings['access_email_approved_users_body'] = sprintf(
252 /* TRANSLATORS: 1: Shortcode for user email 2: Shortcode for site name 3: Shortcode for site URL */
253 __( "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' ),
254 '[user_email]',
255 '[site_name]',
256 '[site_url]'
257 );
258 }
259
260 // Public Access to Private Page Defaults.
261 if ( ! array_key_exists( 'access_who_can_view', $auth_settings ) ) {
262 $auth_settings['access_who_can_view'] = 'everyone';
263 }
264 if ( ! array_key_exists( 'access_public_pages', $auth_settings ) ) {
265 $auth_settings['access_public_pages'] = array();
266 }
267 if ( ! array_key_exists( 'access_redirect', $auth_settings ) ) {
268 $auth_settings['access_redirect'] = 'login';
269 }
270 if ( ! array_key_exists( 'access_public_warning', $auth_settings ) ) {
271 $auth_settings['access_public_warning'] = 'no_warning';
272 }
273 if ( ! array_key_exists( 'access_redirect_to_message', $auth_settings ) ) {
274 $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>';
275 }
276
277 // External Service Defaults.
278 if ( ! array_key_exists( 'access_default_role', $auth_settings ) ) {
279 // Set default role to 'student' if that role exists, 'subscriber' otherwise.
280 $all_roles = $wp_roles->roles;
281 $editable_roles = apply_filters( 'editable_roles', $all_roles );
282 if ( array_key_exists( 'student', $editable_roles ) ) {
283 $auth_settings['access_default_role'] = 'student';
284 } else {
285 $auth_settings['access_default_role'] = 'subscriber';
286 }
287 }
288
289 if ( ! array_key_exists( 'google', $auth_settings ) ) {
290 $auth_settings['google'] = '';
291 }
292 if ( ! array_key_exists( 'cas', $auth_settings ) ) {
293 $auth_settings['cas'] = '';
294 }
295 if ( ! array_key_exists( 'ldap', $auth_settings ) ) {
296 $auth_settings['ldap'] = '';
297 }
298
299 if ( ! array_key_exists( 'google_clientid', $auth_settings ) ) {
300 $auth_settings['google_clientid'] = '';
301 }
302 if ( ! array_key_exists( 'google_clientsecret', $auth_settings ) ) {
303 $auth_settings['google_clientsecret'] = '';
304 }
305 if ( ! array_key_exists( 'google_hosteddomain', $auth_settings ) ) {
306 $auth_settings['google_hosteddomain'] = '';
307 }
308
309 if ( ! array_key_exists( 'cas_custom_label', $auth_settings ) ) {
310 $auth_settings['cas_custom_label'] = 'CAS';
311 }
312 if ( ! array_key_exists( 'cas_host', $auth_settings ) ) {
313 $auth_settings['cas_host'] = '';
314 }
315 if ( ! array_key_exists( 'cas_port', $auth_settings ) ) {
316 $auth_settings['cas_port'] = '';
317 }
318 if ( ! array_key_exists( 'cas_path', $auth_settings ) ) {
319 $auth_settings['cas_path'] = '';
320 }
321 if ( ! array_key_exists( 'cas_version', $auth_settings ) ) {
322 $auth_settings['cas_version'] = 'SAML_VERSION_1_1';
323 }
324 if ( ! array_key_exists( 'cas_attr_email', $auth_settings ) ) {
325 $auth_settings['cas_attr_email'] = '';
326 }
327 if ( ! array_key_exists( 'cas_attr_first_name', $auth_settings ) ) {
328 $auth_settings['cas_attr_first_name'] = '';
329 }
330 if ( ! array_key_exists( 'cas_attr_last_name', $auth_settings ) ) {
331 $auth_settings['cas_attr_last_name'] = '';
332 }
333 if ( ! array_key_exists( 'cas_attr_update_on_login', $auth_settings ) ) {
334 $auth_settings['cas_attr_update_on_login'] = '';
335 }
336 if ( ! array_key_exists( 'cas_auto_login', $auth_settings ) ) {
337 $auth_settings['cas_auto_login'] = '';
338 }
339 if ( ! array_key_exists( 'cas_link_on_username', $auth_settings ) ) {
340 $auth_settings['cas_link_on_username'] = '';
341 }
342
343 if ( ! array_key_exists( 'ldap_host', $auth_settings ) ) {
344 $auth_settings['ldap_host'] = '';
345 }
346 if ( ! array_key_exists( 'ldap_port', $auth_settings ) ) {
347 $auth_settings['ldap_port'] = '389';
348 }
349 if ( ! array_key_exists( 'ldap_tls', $auth_settings ) ) {
350 $auth_settings['ldap_tls'] = '1';
351 }
352 if ( ! array_key_exists( 'ldap_search_base', $auth_settings ) ) {
353 $auth_settings['ldap_search_base'] = '';
354 }
355 if ( ! array_key_exists( 'ldap_uid', $auth_settings ) ) {
356 $auth_settings['ldap_uid'] = 'uid';
357 }
358 if ( ! array_key_exists( 'ldap_attr_email', $auth_settings ) ) {
359 $auth_settings['ldap_attr_email'] = '';
360 }
361 if ( ! array_key_exists( 'ldap_user', $auth_settings ) ) {
362 $auth_settings['ldap_user'] = '';
363 }
364 if ( ! array_key_exists( 'ldap_password', $auth_settings ) ) {
365 $auth_settings['ldap_password'] = '';
366 }
367 if ( ! array_key_exists( 'ldap_lostpassword_url', $auth_settings ) ) {
368 $auth_settings['ldap_lostpassword_url'] = '';
369 }
370 if ( ! array_key_exists( 'ldap_attr_first_name', $auth_settings ) ) {
371 $auth_settings['ldap_attr_first_name'] = '';
372 }
373 if ( ! array_key_exists( 'ldap_attr_last_name', $auth_settings ) ) {
374 $auth_settings['ldap_attr_last_name'] = '';
375 }
376 if ( ! array_key_exists( 'ldap_attr_update_on_login', $auth_settings ) ) {
377 $auth_settings['ldap_attr_update_on_login'] = '';
378 }
379
380 // Advanced defaults.
381 if ( ! array_key_exists( 'advanced_lockouts', $auth_settings ) ) {
382 $auth_settings['advanced_lockouts'] = array(
383 'attempts_1' => 10,
384 'duration_1' => 1,
385 'attempts_2' => 10,
386 'duration_2' => 10,
387 'reset_duration' => 120,
388 );
389 }
390 if ( ! array_key_exists( 'advanced_hide_wp_login', $auth_settings ) ) {
391 $auth_settings['advanced_hide_wp_login'] = '';
392 }
393 if ( ! array_key_exists( 'advanced_disable_wp_login', $auth_settings ) ) {
394 $auth_settings['advanced_disable_wp_login'] = '';
395 }
396 if ( ! array_key_exists( 'advanced_branding', $auth_settings ) ) {
397 $auth_settings['advanced_branding'] = 'default';
398 }
399 if ( ! array_key_exists( 'advanced_admin_menu', $auth_settings ) ) {
400 $auth_settings['advanced_admin_menu'] = 'top';
401 }
402 if ( ! array_key_exists( 'advanced_usermeta', $auth_settings ) ) {
403 $auth_settings['advanced_usermeta'] = '';
404 }
405 if ( ! array_key_exists( 'advanced_users_per_page', $auth_settings ) ) {
406 $auth_settings['advanced_users_per_page'] = 20;
407 }
408 if ( ! array_key_exists( 'advanced_users_sort_by', $auth_settings ) ) {
409 $auth_settings['advanced_users_sort_by'] = 'created';
410 }
411 if ( ! array_key_exists( 'advanced_users_sort_order', $auth_settings ) ) {
412 $auth_settings['advanced_users_sort_order'] = 'asc';
413 }
414 if ( ! array_key_exists( 'advanced_widget_enabled', $auth_settings ) ) {
415 $auth_settings['advanced_widget_enabled'] = '1';
416 }
417 if ( ! array_key_exists( 'advanced_override_multisite', $auth_settings ) ) {
418 $auth_settings['advanced_override_multisite'] = '';
419 }
420
421 // Save default options to database.
422 update_option( 'auth_settings', $auth_settings );
423 update_option( 'auth_settings_access_users_pending', $auth_settings_access_users_pending );
424 update_option( 'auth_settings_access_users_approved', $auth_settings_access_users_approved );
425 update_option( 'auth_settings_access_users_blocked', $auth_settings_access_users_blocked );
426
427 // Multisite defaults.
428 if ( is_multisite() ) {
429 $auth_multisite_settings = get_blog_option( get_network()->blog_id, 'auth_multisite_settings', array() );
430
431 if ( false === $auth_multisite_settings ) {
432 $auth_multisite_settings = array();
433 }
434 // Global switch for enabling multisite options.
435 if ( ! array_key_exists( 'multisite_override', $auth_multisite_settings ) ) {
436 $auth_multisite_settings['multisite_override'] = '';
437 }
438 // Access Lists Defaults.
439 $auth_multisite_settings_access_users_approved = get_blog_option( get_network()->blog_id, 'auth_multisite_settings_access_users_approved' );
440 if ( false === $auth_multisite_settings_access_users_approved ) {
441 $auth_multisite_settings_access_users_approved = array();
442 }
443 // Login Access Defaults.
444 if ( ! array_key_exists( 'access_who_can_login', $auth_multisite_settings ) ) {
445 $auth_multisite_settings['access_who_can_login'] = 'approved_users';
446 }
447 // View Access Defaults.
448 if ( ! array_key_exists( 'access_who_can_view', $auth_multisite_settings ) ) {
449 $auth_multisite_settings['access_who_can_view'] = 'everyone';
450 }
451 // External Service Defaults.
452 if ( ! array_key_exists( 'access_default_role', $auth_multisite_settings ) ) {
453 // Set default role to 'student' if that role exists, 'subscriber' otherwise.
454 $all_roles = $wp_roles->roles;
455 $editable_roles = apply_filters( 'editable_roles', $all_roles );
456 if ( array_key_exists( 'student', $editable_roles ) ) {
457 $auth_multisite_settings['access_default_role'] = 'student';
458 } else {
459 $auth_multisite_settings['access_default_role'] = 'subscriber';
460 }
461 }
462 if ( ! array_key_exists( 'google', $auth_multisite_settings ) ) {
463 $auth_multisite_settings['google'] = '';
464 }
465 if ( ! array_key_exists( 'cas', $auth_multisite_settings ) ) {
466 $auth_multisite_settings['cas'] = '';
467 }
468 if ( ! array_key_exists( 'ldap', $auth_multisite_settings ) ) {
469 $auth_multisite_settings['ldap'] = '';
470 }
471 if ( ! array_key_exists( 'google_clientid', $auth_multisite_settings ) ) {
472 $auth_multisite_settings['google_clientid'] = '';
473 }
474 if ( ! array_key_exists( 'google_clientsecret', $auth_multisite_settings ) ) {
475 $auth_multisite_settings['google_clientsecret'] = '';
476 }
477 if ( ! array_key_exists( 'google_hosteddomain', $auth_multisite_settings ) ) {
478 $auth_multisite_settings['google_hosteddomain'] = '';
479 }
480 if ( ! array_key_exists( 'cas_custom_label', $auth_multisite_settings ) ) {
481 $auth_multisite_settings['cas_custom_label'] = 'CAS';
482 }
483 if ( ! array_key_exists( 'cas_host', $auth_multisite_settings ) ) {
484 $auth_multisite_settings['cas_host'] = '';
485 }
486 if ( ! array_key_exists( 'cas_port', $auth_multisite_settings ) ) {
487 $auth_multisite_settings['cas_port'] = '';
488 }
489 if ( ! array_key_exists( 'cas_path', $auth_multisite_settings ) ) {
490 $auth_multisite_settings['cas_path'] = '';
491 }
492 if ( ! array_key_exists( 'cas_version', $auth_multisite_settings ) ) {
493 $auth_multisite_settings['cas_version'] = 'SAML_VERSION_1_1';
494 }
495 if ( ! array_key_exists( 'cas_attr_email', $auth_multisite_settings ) ) {
496 $auth_multisite_settings['cas_attr_email'] = '';
497 }
498 if ( ! array_key_exists( 'cas_attr_first_name', $auth_multisite_settings ) ) {
499 $auth_multisite_settings['cas_attr_first_name'] = '';
500 }
501 if ( ! array_key_exists( 'cas_attr_last_name', $auth_multisite_settings ) ) {
502 $auth_multisite_settings['cas_attr_last_name'] = '';
503 }
504 if ( ! array_key_exists( 'cas_attr_update_on_login', $auth_multisite_settings ) ) {
505 $auth_multisite_settings['cas_attr_update_on_login'] = '';
506 }
507 if ( ! array_key_exists( 'cas_auto_login', $auth_multisite_settings ) ) {
508 $auth_multisite_settings['cas_auto_login'] = '';
509 }
510 if ( ! array_key_exists( 'cas_link_on_username', $auth_multisite_settings ) ) {
511 $auth_multisite_settings['cas_link_on_username'] = '';
512 }
513 if ( ! array_key_exists( 'ldap_host', $auth_multisite_settings ) ) {
514 $auth_multisite_settings['ldap_host'] = '';
515 }
516 if ( ! array_key_exists( 'ldap_port', $auth_multisite_settings ) ) {
517 $auth_multisite_settings['ldap_port'] = '389';
518 }
519 if ( ! array_key_exists( 'ldap_tls', $auth_multisite_settings ) ) {
520 $auth_multisite_settings['ldap_tls'] = '1';
521 }
522 if ( ! array_key_exists( 'ldap_search_base', $auth_multisite_settings ) ) {
523 $auth_multisite_settings['ldap_search_base'] = '';
524 }
525 if ( ! array_key_exists( 'ldap_uid', $auth_multisite_settings ) ) {
526 $auth_multisite_settings['ldap_uid'] = 'uid';
527 }
528 if ( ! array_key_exists( 'ldap_attr_email', $auth_multisite_settings ) ) {
529 $auth_multisite_settings['ldap_attr_email'] = '';
530 }
531 if ( ! array_key_exists( 'ldap_user', $auth_multisite_settings ) ) {
532 $auth_multisite_settings['ldap_user'] = '';
533 }
534 if ( ! array_key_exists( 'ldap_password', $auth_multisite_settings ) ) {
535 $auth_multisite_settings['ldap_password'] = '';
536 }
537 if ( ! array_key_exists( 'ldap_lostpassword_url', $auth_multisite_settings ) ) {
538 $auth_multisite_settings['ldap_lostpassword_url'] = '';
539 }
540 if ( ! array_key_exists( 'ldap_attr_first_name', $auth_multisite_settings ) ) {
541 $auth_multisite_settings['ldap_attr_first_name'] = '';
542 }
543 if ( ! array_key_exists( 'ldap_attr_last_name', $auth_multisite_settings ) ) {
544 $auth_multisite_settings['ldap_attr_last_name'] = '';
545 }
546 if ( ! array_key_exists( 'ldap_attr_update_on_login', $auth_multisite_settings ) ) {
547 $auth_multisite_settings['ldap_attr_update_on_login'] = '';
548 }
549 // Advanced defaults.
550 if ( ! array_key_exists( 'advanced_lockouts', $auth_multisite_settings ) ) {
551 $auth_multisite_settings['advanced_lockouts'] = array(
552 'attempts_1' => 10,
553 'duration_1' => 1,
554 'attempts_2' => 10,
555 'duration_2' => 10,
556 'reset_duration' => 120,
557 );
558 }
559 if ( ! array_key_exists( 'advanced_hide_wp_login', $auth_multisite_settings ) ) {
560 $auth_multisite_settings['advanced_hide_wp_login'] = '';
561 }
562 if ( ! array_key_exists( 'advanced_disable_wp_login', $auth_multisite_settings ) ) {
563 $auth_multisite_settings['advanced_disable_wp_login'] = '';
564 }
565 if ( ! array_key_exists( 'advanced_users_per_page', $auth_multisite_settings ) ) {
566 $auth_multisite_settings['advanced_users_per_page'] = 20;
567 }
568 if ( ! array_key_exists( 'advanced_users_sort_by', $auth_multisite_settings ) ) {
569 $auth_multisite_settings['advanced_users_sort_by'] = 'created';
570 }
571 if ( ! array_key_exists( 'advanced_users_sort_order', $auth_multisite_settings ) ) {
572 $auth_multisite_settings['advanced_users_sort_order'] = 'asc';
573 }
574 if ( ! array_key_exists( 'advanced_widget_enabled', $auth_multisite_settings ) ) {
575 $auth_multisite_settings['advanced_widget_enabled'] = '1';
576 }
577 // Save default network options to database.
578 update_blog_option( get_network()->blog_id, 'auth_multisite_settings', $auth_multisite_settings );
579 update_blog_option( get_network()->blog_id, 'auth_multisite_settings_access_users_approved', $auth_multisite_settings_access_users_approved );
580 }
581
582 return $auth_settings;
583 }
584
585
586 /**
587 * List sanitizer.
588 *
589 * @param array $list Array of users to sanitize.
590 * @param string $side_effect Set to 'update roles' if role syncing should be performed.
591 * @param string $multisite_mode Set to 'multisite' to sync roles on all sites the user belongs to.
592 * @return array Array of sanitized users.
593 */
594 public function sanitize_user_list( $list, $side_effect = 'none', $multisite_mode = 'single' ) {
595 // If it's not a list, make it so.
596 if ( ! is_array( $list ) ) {
597 $list = array();
598 }
599 foreach ( $list as $key => $user_info ) {
600 if ( strlen( $user_info['email'] ) < 1 ) {
601 // Make sure there are no empty entries in the list.
602 unset( $list[ $key ] );
603 } elseif ( 'update roles' === $side_effect ) {
604 // Make sure the WordPress user accounts have the same role
605 // as that indicated in the list.
606 $wp_user = get_user_by( 'email', $user_info['email'] );
607 if ( $wp_user ) {
608 if ( is_multisite() && 'multisite' === $multisite_mode ) {
609 foreach ( get_blogs_of_user( $wp_user->ID ) as $blog ) {
610 add_user_to_blog( $blog->userblog_id, $wp_user->ID, $user_info['role'] );
611 }
612 } else {
613 $wp_user->set_role( $user_info['role'] );
614 }
615 }
616 }
617 }
618 return $list;
619 }
620
621
622 /**
623 * Settings sanitizer callback.
624 *
625 * @param array $auth_settings Authorizer settings array.
626 * @return array Sanitized Authorizer settings array.
627 */
628 public function sanitize_options( $auth_settings ) {
629 // Default to "Approved Users" login access restriction.
630 if ( ! in_array( $auth_settings['access_who_can_login'], array( 'external_users', 'approved_users' ), true ) ) {
631 $auth_settings['access_who_can_login'] = 'approved_users';
632 }
633
634 // Default to "Everyone" view access restriction.
635 if ( ! in_array( $auth_settings['access_who_can_view'], array( 'everyone', 'logged_in_users' ), true ) ) {
636 $auth_settings['access_who_can_view'] = 'everyone';
637 }
638
639 // Default to WordPress login access redirect.
640 // Note: this option doesn't exist in multisite options, so we first
641 // check to see if it exists.
642 if ( array_key_exists( 'access_redirect', $auth_settings ) && ! in_array( $auth_settings['access_redirect'], array( 'login', 'page', 'message' ), true ) ) {
643 $auth_settings['access_redirect'] = 'login';
644 }
645
646 // Default to warning message for anonymous users on public pages.
647 // Note: this option doesn't exist in multisite options, so we first
648 // check to see if it exists.
649 if ( array_key_exists( 'access_public_warning', $auth_settings ) && ! in_array( $auth_settings['access_public_warning'], array( 'no_warning', 'warning' ), true ) ) {
650 $auth_settings['access_public_warning'] = 'no_warning';
651 }
652
653 // Sanitize Send welcome email (checkbox: value can only be '1' or empty string).
654 $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' : '';
655
656 // Sanitize Enable Google Logins (checkbox: value can only be '1' or empty string).
657 $auth_settings['google'] = array_key_exists( 'google', $auth_settings ) && strlen( $auth_settings['google'] ) > 0 ? '1' : '';
658
659 // Sanitize Enable CAS Logins (checkbox: value can only be '1' or empty string).
660 $auth_settings['cas'] = array_key_exists( 'cas', $auth_settings ) && strlen( $auth_settings['cas'] ) > 0 ? '1' : '';
661
662 // Sanitize CAS Host setting.
663 $auth_settings['cas_host'] = filter_var( $auth_settings['cas_host'], FILTER_SANITIZE_URL );
664
665 // Sanitize CAS Port (int).
666 $auth_settings['cas_port'] = filter_var( $auth_settings['cas_port'], FILTER_SANITIZE_NUMBER_INT );
667
668 // Sanitize CAS attribute update (checkbox: value can only be '1' or empty string).
669 $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' : '';
670
671 // Sanitize CAS auto-login (checkbox: value can only be '1' or empty string).
672 $auth_settings['cas_auto_login'] = array_key_exists( 'cas_auto_login', $auth_settings ) && strlen( $auth_settings['cas_auto_login'] ) > 0 ? '1' : '';
673
674 // Sanitize CAS link on username (checkbox: value can only be '1' or empty string).
675 $auth_settings['cas_link_on_username'] = array_key_exists( 'cas_link_on_username', $auth_settings ) && strlen( $auth_settings['cas_link_on_username'] ) > 0 ? '1' : '';
676
677 // Sanitize Enable LDAP Logins (checkbox: value can only be '1' or empty string).
678 $auth_settings['ldap'] = array_key_exists( 'ldap', $auth_settings ) && strlen( $auth_settings['ldap'] ) > 0 ? '1' : '';
679
680 // Sanitize LDAP Port (int).
681 $auth_settings['ldap_port'] = filter_var( $auth_settings['ldap_port'], FILTER_SANITIZE_NUMBER_INT );
682
683 // Sanitize LDAP TLS (checkbox: value can only be '1' or empty string).
684 $auth_settings['ldap_tls'] = array_key_exists( 'ldap_tls', $auth_settings ) && strlen( $auth_settings['ldap_tls'] ) > 0 ? '1' : '';
685
686 // Sanitize LDAP attributes (basically make sure they don't have any parentheses).
687 $auth_settings['ldap_uid'] = filter_var( $auth_settings['ldap_uid'], FILTER_SANITIZE_EMAIL );
688
689 // Sanitize LDAP Lost Password URL.
690 $auth_settings['ldap_lostpassword_url'] = filter_var( $auth_settings['ldap_lostpassword_url'], FILTER_SANITIZE_URL );
691
692 // Obfuscate LDAP directory user password.
693 if ( strlen( $auth_settings['ldap_password'] ) > 0 ) {
694 // encrypt the directory user password for some minor obfuscation in the database.
695 $auth_settings['ldap_password'] = Helper::encrypt( $auth_settings['ldap_password'] );
696 }
697
698 // Sanitize LDAP attribute update (checkbox: value can only be '1' or empty string).
699 $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' : '';
700
701 // Make sure public pages is an empty array if it's empty.
702 // Note: this option doesn't exist in multisite options, so we first
703 // check to see if it exists.
704 if ( array_key_exists( 'access_public_pages', $auth_settings ) && ! is_array( $auth_settings['access_public_pages'] ) ) {
705 $auth_settings['access_public_pages'] = array();
706 }
707
708 // Make sure all lockout options are integers (attempts_1,
709 // duration_1, attempts_2, duration_2, reset_duration).
710 foreach ( $auth_settings['advanced_lockouts'] as $key => $value ) {
711 $auth_settings['advanced_lockouts'][ $key ] = filter_var( $value, FILTER_SANITIZE_NUMBER_INT );
712 }
713
714 // Sanitize Hide WordPress logins (checkbox: value can only be '1' or empty string).
715 $auth_settings['advanced_hide_wp_login'] = array_key_exists( 'advanced_hide_wp_login', $auth_settings ) && strlen( $auth_settings['advanced_hide_wp_login'] ) > 0 ? '1' : '';
716
717 // Sanitize Disable WordPress logins (checkbox: value can only be '1' or empty string).
718 $auth_settings['advanced_disable_wp_login'] = array_key_exists( 'advanced_disable_wp_login', $auth_settings ) && strlen( $auth_settings['advanced_disable_wp_login'] ) > 0 ? '1' : '';
719
720 // Sanitize Users per page (text: value can only int from 1 to MAX_INT).
721 $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;
722
723 // Sanitize Sort users by (select: value can be 'email', 'role', 'date_added', 'created').
724 if ( ! isset( $auth_settings['advanced_users_sort_by'] ) || ! in_array( $auth_settings['advanced_users_sort_by'], array( 'email', 'role', 'date_added', 'created' ), true ) ) {
725 $auth_settings['advanced_users_sort_by'] = 'created';
726 }
727
728 // Sanitize Sort users order (select: value can be 'asc', 'desc').
729 if ( ! isset( $auth_settings['advanced_users_sort_order'] ) || ! in_array( $auth_settings['advanced_users_sort_order'], array( 'asc', 'desc' ), true ) ) {
730 $auth_settings['advanced_users_sort_order'] = 'asc';
731 }
732
733 // Sanitize Show Dashboard Widget (checkbox: value can only be '1' or empty string).
734 $auth_settings['advanced_widget_enabled'] = array_key_exists( 'advanced_widget_enabled', $auth_settings ) && strlen( $auth_settings['advanced_widget_enabled'] ) > 0 ? '1' : '';
735
736 // Sanitize Override multisite options (checkbox: value can only be '1' or empty string).
737 $auth_settings['advanced_override_multisite'] = array_key_exists( 'advanced_override_multisite', $auth_settings ) && strlen( $auth_settings['advanced_override_multisite'] ) > 0 ? '1' : '';
738
739 return $auth_settings;
740 }
741
742
743 /**
744 * Sanitizes an array of user update commands coming from the AJAX handler in Authorizer Settings.
745 *
746 * Example $users array:
747 * array(
748 * array(
749 * edit_action: 'add' or 'remove' or 'change_role',
750 * email: 'johndoe@example.com',
751 * role: 'subscriber',
752 * date_added: 'Jun 2014',
753 * local_user: 'true' or 'false',
754 * multisite_user: 'true' or 'false',
755 * ),
756 * ...
757 * )
758 *
759 * @param array $users Users to edit.
760 * @param array $args Options (e.g., 'allow_wildcard_email' => true).
761 * @return array Sanitized users to edit.
762 */
763 public function sanitize_update_auth_users( $users = array(), $args = array() ) {
764 if ( ! is_array( $users ) ) {
765 $users = array();
766 }
767 if ( isset( $args['allow_wildcard_email'] ) && $args['allow_wildcard_email'] ) {
768 $users = array_map( array( $this, 'sanitize_update_auth_user_allow_wildcard_email' ), $users );
769 } else {
770 $users = array_map( array( $this, 'sanitize_update_auth_user' ), $users );
771 }
772
773 // Remove any entries that failed email address validation.
774 $users = array_filter( $users, array( $this, 'remove_invalid_auth_users' ) );
775
776 return $users;
777 }
778
779
780 /**
781 * Callback for array_map in sanitize_update_auth_users().
782 *
783 * @param array $user User data to sanitize.
784 * @return array Sanitized user data.
785 */
786 public function sanitize_update_auth_user( $user ) {
787 if ( array_key_exists( 'edit_action', $user ) ) {
788 $user['edit_action'] = sanitize_text_field( $user['edit_action'] );
789 }
790 if ( isset( $user['email'] ) ) {
791 $user['email'] = sanitize_email( $user['email'] );
792 }
793 if ( isset( $user['role'] ) ) {
794 $user['role'] = sanitize_text_field( $user['role'] );
795 }
796 if ( isset( $user['date_added'] ) ) {
797 $user['date_added'] = sanitize_text_field( $user['date_added'] );
798 }
799 if ( isset( $user['local_user'] ) ) {
800 $user['local_user'] = 'true' === $user['local_user'] ? 'true' : 'false';
801 }
802 if ( isset( $user['multisite_user'] ) ) {
803 $user['multisite_user'] = 'true' === $user['multisite_user'] ? 'true' : 'false';
804 }
805
806 return $user;
807 }
808
809
810 /**
811 * Settings print callback.
812 *
813 * @param string $args Args (e.g., multisite admin mode).
814 * @return void
815 */
816 public function print_section_info_tabs( $args = '' ) {
817 if ( Helper::NETWORK_CONTEXT === Helper::get_context( $args ) ) :
818 ?>
819 <h2 class="nav-tab-wrapper">
820 <a class="nav-tab nav-tab-access_lists nav-tab-active" href="javascript:chooseTab('access_lists' );"><?php esc_html_e( 'Access Lists', 'authorizer' ); ?></a>
821 <a class="nav-tab nav-tab-external" href="javascript:chooseTab('external' );"><?php esc_html_e( 'External Service', 'authorizer' ); ?></a>
822 <a class="nav-tab nav-tab-advanced" href="javascript:chooseTab('advanced' );"><?php esc_html_e( 'Advanced', 'authorizer' ); ?></a>
823 </h2>
824 <?php else : ?>
825 <h2 class="nav-tab-wrapper">
826 <a class="nav-tab nav-tab-access_lists nav-tab-active" href="javascript:chooseTab('access_lists' );"><?php esc_html_e( 'Access Lists', 'authorizer' ); ?></a>
827 <a class="nav-tab nav-tab-access_login" href="javascript:chooseTab('access_login' );"><?php esc_html_e( 'Login Access', 'authorizer' ); ?></a>
828 <a class="nav-tab nav-tab-access_public" href="javascript:chooseTab('access_public' );"><?php esc_html_e( 'Public Access', 'authorizer' ); ?></a>
829 <a class="nav-tab nav-tab-external" href="javascript:chooseTab('external' );"><?php esc_html_e( 'External Service', 'authorizer' ); ?></a>
830 <a class="nav-tab nav-tab-advanced" href="javascript:chooseTab('advanced' );"><?php esc_html_e( 'Advanced', 'authorizer' ); ?></a>
831 </h2>
832 <?php
833 endif;
834 }
835
836
837 /**
838 * This array filter will remove any users who failed email address validation
839 * (which would set their email to a blank string).
840 *
841 * @param array $user User data to check for a valid email.
842 * @return bool Whether to filter out the user.
843 */
844 protected function remove_invalid_auth_users( $user ) {
845 return isset( $user['email'] ) && strlen( $user['email'] ) > 0;
846 }
847
848
849 /**
850 * Callback for array_map in sanitize_update_auth_users().
851 *
852 * @param array $user User data to sanitize.
853 * @return array Sanitized user data.
854 */
855 protected function sanitize_update_auth_user_allow_wildcard_email( $user ) {
856 if ( array_key_exists( 'edit_action', $user ) ) {
857 $user['edit_action'] = sanitize_text_field( $user['edit_action'] );
858 }
859 if ( isset( $user['email'] ) ) {
860 if ( strpos( $user['email'], '@' ) === 0 ) {
861 $user['email'] = sanitize_text_field( $user['email'] );
862 } else {
863 $user['email'] = sanitize_email( $user['email'] );
864 }
865 }
866 if ( isset( $user['role'] ) ) {
867 $user['role'] = sanitize_text_field( $user['role'] );
868 }
869 if ( isset( $user['date_added'] ) ) {
870 $user['date_added'] = sanitize_text_field( $user['date_added'] );
871 }
872 if ( isset( $user['local_user'] ) ) {
873 $user['local_user'] = 'true' === $user['local_user'] ? 'true' : 'false';
874 }
875 if ( isset( $user['multisite_user'] ) ) {
876 $user['multisite_user'] = 'true' === $user['multisite_user'] ? 'true' : 'false';
877 }
878
879 return $user;
880 }
881
882 }
883