PluginProbe
Authorizer / 3.6.0
Authorizer v3.6.0
3.16.0 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 All 127 releases
← All changes | js/authorizer.js +214 -66 2.8.13.6.0 View file →
@@ -19,9 +19,9 @@
19 19 function refreshApprovedUserList( currentPage, searchTerm ) {
20 20 var $list = $( '#list_auth_settings_access_users_approved' );
21 21 var $spinner = $( '<span class="spinner is-active"></span>' ).css({
22 22 position: 'relative',
23 - top: '45%',
23 + top: '40%',
24 24 left: '-240px',
25 25 });
26 26 var $overlay = $( '<div id="list_auth_settings_access_users_approved_overlay"></div>' ).css({
27 27 'background-color': '#f1f1f1',
@@ -27,9 +27,9 @@
27 27 'background-color': '#f1f1f1',
28 28 'z-index': 1,
29 29 opacity: 0.8,
30 30 position: 'absolute',
31 - top: $list.position().top,
31 + top: $list.position().top + parseInt( $list.css( 'margin-top' ) ),
32 32 left: $list.position().left,
33 33 width: $list.width(),
34 34 height: $list.height(),
35 35 });
@@ -102,35 +102,35 @@
102 102
103 103 // Update first page button.
104 104 var $first = $( '.first-page' );
105 105 if ( $first.is( 'a' ) && currentPage <= 1 ) {
106 - $first.replaceWith( '<span class="first-page tablenav-pages-navspan" aria-hidden="true">&laquo;</span>' );
106 + $first.replaceWith( '<span class="button disabled first-page tablenav-pages-navspan" aria-hidden="true">&laquo;</span>' );
107 107 } else if ( $first.is( 'span' ) && currentPage > 1 ) {
108 - $first.replaceWith( '<a class="first-page" href="' + updateQueryStringParameter( window.location.href, 'paged', '1' ) + '"><span class="screen-reader-text">' + authL10n.first_page + '</span><span aria-hidden="true">&laquo;</span></a>' );
108 + $first.replaceWith( '<a class="button first-page" href="' + updateQueryStringParameter( window.location.href, 'paged', '1' ) + '"><span class="screen-reader-text">' + authL10n.first_page + '</span><span aria-hidden="true">&laquo;</span></a>' );
109 109 }
110 110
111 111 // Update prev page button.
112 112 var $prev = $( '.prev-page' );
113 113 if ( $prev.is( 'a' ) && currentPage <= 1 ) {
114 - $prev.replaceWith( '<span class="prev-page tablenav-pages-navspan" aria-hidden="true">&lsaquo;</span>' );
114 + $prev.replaceWith( '<span class="button disabled prev-page tablenav-pages-navspan" aria-hidden="true">&lsaquo;</span>' );
115 115 } else if ( currentPage > 1 ) {
116 - $prev.replaceWith( '<a class="prev-page" href="' + updateQueryStringParameter( window.location.href, 'paged', currentPage - 1 ) + '"><span class="screen-reader-text">' + authL10n.prev_page + '</span><span aria-hidden="true">&lsaquo;</span></a>' );
116 + $prev.replaceWith( '<a class="button prev-page" href="' + updateQueryStringParameter( window.location.href, 'paged', currentPage - 1 ) + '"><span class="screen-reader-text">' + authL10n.prev_page + '</span><span aria-hidden="true">&lsaquo;</span></a>' );
117 117 }
118 118
119 119 // Update next button.
120 120 var $next = $( '.next-page' );
121 121 if ( $next.is( 'a' ) && currentPage >= totalPages ) {
122 - $next.replaceWith( '<span class="next-page tablenav-pages-navspan" aria-hidden="true">&rsaquo;</span>' );
122 + $next.replaceWith( '<span class="button disabled next-page tablenav-pages-navspan" aria-hidden="true">&rsaquo;</span>' );
123 123 } else if ( currentPage < totalPages ) {
124 - $next.replaceWith( '<a class="next-page" href="' + updateQueryStringParameter( window.location.href, 'paged', currentPage + 1 ) + '"><span class="screen-reader-text">' + authL10n.next_page + '</span><span aria-hidden="true">&rsaquo;</span></a>' );
124 + $next.replaceWith( '<a class="button next-page" href="' + updateQueryStringParameter( window.location.href, 'paged', currentPage + 1 ) + '"><span class="screen-reader-text">' + authL10n.next_page + '</span><span aria-hidden="true">&rsaquo;</span></a>' );
125 125 }
126 126
127 127 // Update last button.
128 128 var $last = $( '.last-page' );
129 129 if ( $last.is( 'a' ) && currentPage >= totalPages ) {
130 - $last.replaceWith( '<span class="last-page tablenav-pages-navspan" aria-hidden="true">&raquo;</span>' );
130 + $last.replaceWith( '<span class="button disabled last-page tablenav-pages-navspan" aria-hidden="true">&raquo;</span>' );
131 131 } else if ( $last.is( 'span' ) && currentPage < totalPages ) {
132 - $last.replaceWith( '<a class="last-page" href="' + updateQueryStringParameter( window.location.href, 'paged', totalPages ) + '"><span class="screen-reader-text">' + authL10n.next_page + '</span><span aria-hidden="true">&raquo;</span></a>' );
132 + $last.replaceWith( '<a class="button last-page" href="' + updateQueryStringParameter( window.location.href, 'paged', totalPages ) + '"><span class="screen-reader-text">' + authL10n.next_page + '</span><span aria-hidden="true">&raquo;</span></a>' );
133 133 }
134 134 }
135 135
136 136 // Make changes to one of the user lists (pending, approved, blocked) via ajax.
@@ -198,9 +198,9 @@
198 198 nonce: nonce,
199 199 }, function( response ) {
200 200 // Server responded, but if success isn't true it failed to save.
201 201 var succeeded = response.success;
202 - var spinnerText = succeeded ? authL10n.saved + '.' : '<span style="color: red;">' + authL10n.failed + '.</span>';
202 + var spinnerText = succeeded ? authL10n.saved + '.' : '<span class="attention">' + authL10n.failed + '.</span>';
203 203 var spinnerWait = succeeded ? 500 : 2000;
204 204
205 205 // Remove any new user entries that were rejected by the server.
206 206 if ( response.invalid_emails.length > 0 ) {
@@ -206,9 +206,9 @@
206 206 if ( response.invalid_emails.length > 0 ) {
207 207 for ( var i = 0; i < response.invalid_emails.length; i++ ) {
208 208 var duplicateEmail = response.invalid_emails[i];
209 209 $( 'li.new-user .auth-email[value="' + duplicateEmail + '"]' )
210 - .siblings( '.spinner' ).addClass( 'duplicate' ).append( '<span class="spinner-text" style="color: red;">' + authL10n.duplicate + '.</span>' )
210 + .siblings( '.spinner' ).addClass( 'duplicate' ).append( '<span class="spinner-text"><span class="attention">' + authL10n.duplicate + '.</span></span>' )
211 211 .parent().fadeOut( spinnerWait, function() { $( this ).remove(); }); // jshint ignore:line
212 212 }
213 213 }
214 214
@@ -222,9 +222,9 @@
222 222 $( 'html' ).removeClass( 'busy' );
223 223 }).fail( function() {
224 224 // Fail fires if the server doesn't respond or responds with 500 codes
225 225 var succeeded = false;
226 - var spinnerText = succeeded ? authL10n.saved + '.' : '<span style="color: red;">' + authL10n.failed + '.</span>';
226 + var spinnerText = succeeded ? authL10n.saved + '.' : '<span class="attention">' + authL10n.failed + '.</span>';
227 227 var spinnerWait = succeeded ? 500 : 2000;
228 228 $( 'form .spinner:not(:has(.spinner-text))' ).append( '<span class="spinner-text">' + spinnerText + '</span>' ).delay( spinnerWait ).hide( animationSpeed, function() {
229 229 $( this ).remove();
230 230 });
@@ -253,12 +253,11 @@
253 253 'z-index': 1,
254 254 opacity: 0.8,
255 255 position: 'absolute',
256 256 top: settings.position().top,
257 - left: settings.position().left - 20,
258 - width: '100%',
259 - height: settings.height(),
260 - 'padding-left': 20,
257 + left: settings.position().left,
258 + width: settings.width(),
259 + height: settings.height() + 50,
261 260 });
262 261 overlay.show();
263 262 }
264 263 }
@@ -274,16 +273,15 @@
274 273 // Helper function to hide/show wordpress option
275 274 function animateOption( action, option ) {
276 275 if ( action === 'show' ) {
277 276 $( 'div.animated_wrapper', option ).slideDown( animationSpeed );
278 - $( 'th', option ).animate({ padding: '20px 10px 20px 0' }, { duration: animationSpeed });
279 - $( 'td', option ).animate({ padding: '15px 10px' }, { duration: animationSpeed });
277 + $( 'th, td', option ).removeClass( 'hide-animate hide-no-animate' );
280 278 } else if ( action === 'hide' ) {
281 279 $( 'div.animated_wrapper', option ).slideUp( animationSpeed );
282 - $( 'td, th', option ).animate({ padding: '0px' }, { duration: animationSpeed });
280 + $( 'td, th', option ).addClass( 'hide-animate' );
283 281 } else if ( action === 'hide_immediately' ) {
284 282 $( 'div.animated_wrapper', option ).hide();
285 - $( 'td, th', option ).css({ padding: '0px' });
283 + $( 'td, th', option ).addClass( 'hide-no-animate' );
286 284 }
287 285 }
288 286
289 287 // Helper function to grab a querystring param value by name
@@ -329,12 +327,14 @@
329 327 }
330 328 return matchingValues;
331 329 }
332 330
333 - // Helper function to check if an email address is valid.
334 - function validEmail( email ) {
331 + // Helper function to check if an email address is valid. If allowWildcardEmail
332 + // is true, then any string starting with an @ is valid.
333 + function validEmail( email, allowWildcardEmail ) {
334 + allowWildcardEmail = typeof allowWildcardEmail !== 'undefined' ? allowWildcardEmail : false;
335 335 var re = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
336 - return email.length > 0 && re.test( email );
336 + return email.length > 0 && ( re.test( email ) || email.startsWith( '@' ) );
337 337 }
338 338
339 339 // Helper function to set or update a querystring value.
340 340 function updateQueryStringParameter( uri, key, value ) {
@@ -382,8 +382,17 @@
382 382 var auth_settings_access_public_pages = $( '#auth_settings_access_public_pages' ).closest( 'tr' );
383 383 var auth_settings_access_redirect_to_login = $( '#radio_auth_settings_access_redirect_to_login' ).closest( 'tr' );
384 384 var auth_settings_access_public_warning = $( '#radio_auth_settings_access_public_warning' ).closest( 'tr' );
385 385 var auth_settings_access_redirect_to_message = $( '#wp-auth_settings_access_redirect_to_message-wrap' ).closest( 'tr' );
386 + var auth_settings_external_oauth2_provider = $( '#auth_settings_oauth2_provider' ).closest( 'tr' );
387 + var auth_settings_external_oauth2_custom_label = $( '#auth_settings_oauth2_custom_label' ).closest( 'tr' );
388 + var auth_settings_external_oauth2_clientid = $( '#auth_settings_oauth2_clientid' ).closest( 'tr' );
389 + var auth_settings_external_oauth2_clientsecret = $( '#auth_settings_oauth2_clientsecret' ).closest( 'tr' );
390 + var auth_settings_external_oauth2_hosteddomain = $( '#auth_settings_oauth2_hosteddomain' ).closest( 'tr' );
391 + var auth_settings_external_oauth2_tenant_id = $( '#auth_settings_oauth2_tenant_id' ).closest( 'tr' );
392 + var auth_settings_external_oauth2_url_authorize = $( '#auth_settings_oauth2_url_authorize' ).closest( 'tr' );
393 + var auth_settings_external_oauth2_url_token = $( '#auth_settings_oauth2_url_token' ).closest( 'tr' );
394 + var auth_settings_external_oauth2_url_resource = $( '#auth_settings_oauth2_url_resource' ).closest( 'tr' );
386 395 var auth_settings_external_google_clientid = $( '#auth_settings_google_clientid' ).closest( 'tr' );
387 396 var auth_settings_external_google_clientsecret = $( '#auth_settings_google_clientsecret' ).closest( 'tr' );
388 397 var auth_settings_external_google_hosteddomain = $( '#auth_settings_google_hosteddomain' ).closest( 'tr' );
389 398 var auth_settings_external_cas_custom_label = $( '#auth_settings_cas_custom_label' ).closest( 'tr' );
@@ -389,8 +398,9 @@
389 398 var auth_settings_external_cas_custom_label = $( '#auth_settings_cas_custom_label' ).closest( 'tr' );
390 399 var auth_settings_external_cas_host = $( '#auth_settings_cas_host' ).closest( 'tr' );
391 400 var auth_settings_external_cas_port = $( '#auth_settings_cas_port' ).closest( 'tr' );
392 401 var auth_settings_external_cas_path = $( '#auth_settings_cas_path' ).closest( 'tr' );
402 + var auth_settings_external_cas_method = $( '#auth_settings_cas_method' ).closest( 'tr' );
393 403 var auth_settings_external_cas_version = $( '#auth_settings_cas_version' ).closest( 'tr' );
394 404 var auth_settings_external_cas_attr_email = $( '#auth_settings_cas_attr_email' ).closest( 'tr' );
395 405 var auth_settings_external_cas_attr_first_name = $( '#auth_settings_cas_attr_first_name' ).closest( 'tr' );
396 406 var auth_settings_external_cas_attr_last_name = $( '#auth_settings_cas_attr_last_name' ).closest( 'tr' );
@@ -395,11 +405,13 @@
395 405 var auth_settings_external_cas_attr_first_name = $( '#auth_settings_cas_attr_first_name' ).closest( 'tr' );
396 406 var auth_settings_external_cas_attr_last_name = $( '#auth_settings_cas_attr_last_name' ).closest( 'tr' );
397 407 var auth_settings_external_cas_attr_update_on_login = $( '#auth_settings_cas_attr_update_on_login' ).closest( 'tr' );
398 408 var auth_settings_external_cas_auto_login = $( '#auth_settings_cas_auto_login' ).closest( 'tr' );
409 + var auth_settings_external_cas_link_on_username = $( '#auth_settings_cas_link_on_username' ).closest( 'tr' );
399 410 var auth_settings_external_ldap_host = $( '#auth_settings_ldap_host' ).closest( 'tr' );
400 411 var auth_settings_external_ldap_port = $( '#auth_settings_ldap_port' ).closest( 'tr' );
401 412 var auth_settings_external_ldap_search_base = $( '#auth_settings_ldap_search_base' ).closest( 'tr' );
413 + var auth_settings_external_ldap_search_filter = $( '#auth_settings_ldap_search_filter' ).closest( 'tr' );
402 414 var auth_settings_external_ldap_uid = $( '#auth_settings_ldap_uid' ).closest( 'tr' );
403 415 var auth_settings_external_ldap_attr_email = $( '#auth_settings_ldap_attr_email' ).closest( 'tr' );
404 416 var auth_settings_external_ldap_user = $( '#auth_settings_ldap_user' ).closest( 'tr' );
405 417 var auth_settings_external_ldap_password = $( '#auth_settings_ldap_password' ).closest( 'tr' );
@@ -407,8 +419,9 @@
407 419 var auth_settings_external_ldap_lostpassword_url = $( '#auth_settings_ldap_lostpassword_url' ).closest( 'tr' );
408 420 var auth_settings_external_ldap_attr_first_name = $( '#auth_settings_ldap_attr_first_name' ).closest( 'tr' );
409 421 var auth_settings_external_ldap_attr_last_name = $( '#auth_settings_ldap_attr_last_name' ).closest( 'tr' );
410 422 var auth_settings_external_ldap_attr_update_on_login = $( '#auth_settings_ldap_attr_update_on_login' ).closest( 'tr' );
423 + var auth_settings_external_ldap_test_user = $( '#auth_settings_ldap_test_user' ).closest( 'tr' );
411 424 /* eslint-enable */
412 425
413 426 // Wrap the th and td in the rows above so we can animate their heights (can't animate tr heights with jquery)
414 427 $( 'th, td', auth_settings_access_role_receive_pending_emails ).wrapInner( '<div class="animated_wrapper" />' );
@@ -420,8 +433,17 @@
420 433 $( 'th, td', auth_settings_access_public_pages ).wrapInner( '<div class="animated_wrapper" />' );
421 434 $( 'th, td', auth_settings_access_redirect_to_login ).wrapInner( '<div class="animated_wrapper" />' );
422 435 $( 'th, td', auth_settings_access_public_warning ).wrapInner( '<div class="animated_wrapper" />' );
423 436 $( 'th, td', auth_settings_access_redirect_to_message ).wrapInner( '<div class="animated_wrapper" />' );
437 + $( 'th, td', auth_settings_external_oauth2_provider ).wrapInner( '<div class="animated_wrapper" />' );
438 + $( 'th, td', auth_settings_external_oauth2_custom_label ).wrapInner( '<div class="animated_wrapper" />' );
439 + $( 'th, td', auth_settings_external_oauth2_clientid ).wrapInner( '<div class="animated_wrapper" />' );
440 + $( 'th, td', auth_settings_external_oauth2_clientsecret ).wrapInner( '<div class="animated_wrapper" />' );
441 + $( 'th, td', auth_settings_external_oauth2_hosteddomain ).wrapInner( '<div class="animated_wrapper" />' );
442 + $( 'th, td', auth_settings_external_oauth2_tenant_id ).wrapInner( '<div class="animated_wrapper" />' );
443 + $( 'th, td', auth_settings_external_oauth2_url_authorize ).wrapInner( '<div class="animated_wrapper" />' );
444 + $( 'th, td', auth_settings_external_oauth2_url_token ).wrapInner( '<div class="animated_wrapper" />' );
445 + $( 'th, td', auth_settings_external_oauth2_url_resource ).wrapInner( '<div class="animated_wrapper" />' );
424 446 $( 'th, td', auth_settings_external_google_clientid ).wrapInner( '<div class="animated_wrapper" />' );
425 447 $( 'th, td', auth_settings_external_google_clientsecret ).wrapInner( '<div class="animated_wrapper" />' );
426 448 $( 'th, td', auth_settings_external_google_hosteddomain ).wrapInner( '<div class="animated_wrapper" />' );
427 449 $( 'th, td', auth_settings_external_cas_custom_label ).wrapInner( '<div class="animated_wrapper" />' );
@@ -427,8 +449,9 @@
427 449 $( 'th, td', auth_settings_external_cas_custom_label ).wrapInner( '<div class="animated_wrapper" />' );
428 450 $( 'th, td', auth_settings_external_cas_host ).wrapInner( '<div class="animated_wrapper" />' );
429 451 $( 'th, td', auth_settings_external_cas_port ).wrapInner( '<div class="animated_wrapper" />' );
430 452 $( 'th, td', auth_settings_external_cas_path ).wrapInner( '<div class="animated_wrapper" />' );
453 + $( 'th, td', auth_settings_external_cas_method ).wrapInner( '<div class="animated_wrapper" />' );
431 454 $( 'th, td', auth_settings_external_cas_version ).wrapInner( '<div class="animated_wrapper" />' );
432 455 $( 'th, td', auth_settings_external_cas_attr_email ).wrapInner( '<div class="animated_wrapper" />' );
433 456 $( 'th, td', auth_settings_external_cas_attr_first_name ).wrapInner( '<div class="animated_wrapper" />' );
434 457 $( 'th, td', auth_settings_external_cas_attr_last_name ).wrapInner( '<div class="animated_wrapper" />' );
@@ -433,11 +456,13 @@
433 456 $( 'th, td', auth_settings_external_cas_attr_first_name ).wrapInner( '<div class="animated_wrapper" />' );
434 457 $( 'th, td', auth_settings_external_cas_attr_last_name ).wrapInner( '<div class="animated_wrapper" />' );
435 458 $( 'th, td', auth_settings_external_cas_attr_update_on_login ).wrapInner( '<div class="animated_wrapper" />' );
436 459 $( 'th, td', auth_settings_external_cas_auto_login ).wrapInner( '<div class="animated_wrapper" />' );
460 + $( 'th, td', auth_settings_external_cas_link_on_username ).wrapInner( '<div class="animated_wrapper" />' );
437 461 $( 'th, td', auth_settings_external_ldap_host ).wrapInner( '<div class="animated_wrapper" />' );
438 462 $( 'th, td', auth_settings_external_ldap_port ).wrapInner( '<div class="animated_wrapper" />' );
439 463 $( 'th, td', auth_settings_external_ldap_search_base ).wrapInner( '<div class="animated_wrapper" />' );
464 + $( 'th, td', auth_settings_external_ldap_search_filter ).wrapInner( '<div class="animated_wrapper" />' );
440 465 $( 'th, td', auth_settings_external_ldap_uid ).wrapInner( '<div class="animated_wrapper" />' );
441 466 $( 'th, td', auth_settings_external_ldap_attr_email ).wrapInner( '<div class="animated_wrapper" />' );
442 467 $( 'th, td', auth_settings_external_ldap_user ).wrapInner( '<div class="animated_wrapper" />' );
443 468 $( 'th, td', auth_settings_external_ldap_password ).wrapInner( '<div class="animated_wrapper" />' );
@@ -445,16 +470,10 @@
445 470 $( 'th, td', auth_settings_external_ldap_lostpassword_url ).wrapInner( '<div class="animated_wrapper" />' );
446 471 $( 'th, td', auth_settings_external_ldap_attr_first_name ).wrapInner( '<div class="animated_wrapper" />' );
447 472 $( 'th, td', auth_settings_external_ldap_attr_last_name ).wrapInner( '<div class="animated_wrapper" />' );
448 473 $( 'th, td', auth_settings_external_ldap_attr_update_on_login ).wrapInner( '<div class="animated_wrapper" />' );
474 + $( 'th, td', auth_settings_external_ldap_test_user ).wrapInner( '<div class="animated_wrapper" />' );
449 475
450 - // If we're viewing the dashboard widget, reset a couple of the relevant
451 - // option variables (since they aren't nested in table rows).
452 - if ( $( '#auth_dashboard_widget' ).length ) {
453 - // Remove the helper link, since there are no tabs on the dashboard widget
454 - $( '#dashboard_link_approved_users' ).contents().unwrap();
455 - }
456 -
457 476 // Hide settings unless "Only approved users" is checked
458 477 if ( ! $( '#radio_auth_settings_access_who_can_login_approved_users' ).is( ':checked' ) ) {
459 478 animateOption( 'hide_immediately', auth_settings_access_role_receive_pending_emails );
460 479 animateOption( 'hide_immediately', auth_settings_access_pending_redirect_to_message );
@@ -475,8 +494,29 @@
475 494 animateOption( 'hide_immediately', auth_settings_access_public_warning );
476 495 animateOption( 'hide_immediately', auth_settings_access_redirect_to_message );
477 496 }
478 497
498 + // Hide OAuth2 options if unchecked.
499 + if ( ! $( '#auth_settings_oauth2' ).is( ':checked' ) ) {
500 + animateOption( 'hide_immediately', auth_settings_external_oauth2_provider );
501 + animateOption( 'hide_immediately', auth_settings_external_oauth2_custom_label );
502 + animateOption( 'hide_immediately', auth_settings_external_oauth2_clientid );
503 + animateOption( 'hide_immediately', auth_settings_external_oauth2_clientsecret );
504 + animateOption( 'hide_immediately', auth_settings_external_oauth2_hosteddomain );
505 + }
506 +
507 + // Hide OAuth2 generic options if generic isn't chosen.
508 + if ( ! $( '#auth_settings_oauth2' ).is( ':checked' ) || 'generic' !== $( '#auth_settings_oauth2_provider' ).val() ) {
509 + animateOption( 'hide_immediately', auth_settings_external_oauth2_url_authorize );
510 + animateOption( 'hide_immediately', auth_settings_external_oauth2_url_token );
511 + animateOption( 'hide_immediately', auth_settings_external_oauth2_url_resource );
512 + }
513 +
514 + // Hide OAuth2 Tenant ID if azure isn't chosen.
515 + if ( ! $( '#auth_settings_oauth2' ).is( ':checked' ) || 'azure' !== $( '#auth_settings_oauth2_provider' ).val() ) {
516 + animateOption( 'hide_immediately', auth_settings_external_oauth2_tenant_id );
517 + }
518 +
479 519 // Hide Google options if unchecked
480 520 if ( ! $( '#auth_settings_google' ).is( ':checked' ) ) {
481 521 animateOption( 'hide_immediately', auth_settings_external_google_clientid );
482 522 animateOption( 'hide_immediately', auth_settings_external_google_clientsecret );
@@ -488,8 +528,9 @@
488 528 animateOption( 'hide_immediately', auth_settings_external_cas_custom_label );
489 529 animateOption( 'hide_immediately', auth_settings_external_cas_host );
490 530 animateOption( 'hide_immediately', auth_settings_external_cas_port );
491 531 animateOption( 'hide_immediately', auth_settings_external_cas_path );
532 + animateOption( 'hide_immediately', auth_settings_external_cas_method );
492 533 animateOption( 'hide_immediately', auth_settings_external_cas_version );
493 534 animateOption( 'hide_immediately', auth_settings_external_cas_attr_email );
494 535 animateOption( 'hide_immediately', auth_settings_external_cas_attr_first_name );
495 536 animateOption( 'hide_immediately', auth_settings_external_cas_attr_last_name );
@@ -494,8 +535,9 @@
494 535 animateOption( 'hide_immediately', auth_settings_external_cas_attr_first_name );
495 536 animateOption( 'hide_immediately', auth_settings_external_cas_attr_last_name );
496 537 animateOption( 'hide_immediately', auth_settings_external_cas_attr_update_on_login );
497 538 animateOption( 'hide_immediately', auth_settings_external_cas_auto_login );
539 + animateOption( 'hide_immediately', auth_settings_external_cas_link_on_username );
498 540 }
499 541
500 542 // Hide LDAP options if unchecked
501 543 if ( ! $( '#auth_settings_ldap' ).is( ':checked' ) ) {
@@ -501,8 +543,9 @@
501 543 if ( ! $( '#auth_settings_ldap' ).is( ':checked' ) ) {
502 544 animateOption( 'hide_immediately', auth_settings_external_ldap_host );
503 545 animateOption( 'hide_immediately', auth_settings_external_ldap_port );
504 546 animateOption( 'hide_immediately', auth_settings_external_ldap_search_base );
547 + animateOption( 'hide_immediately', auth_settings_external_ldap_search_filter );
505 548 animateOption( 'hide_immediately', auth_settings_external_ldap_uid );
506 549 animateOption( 'hide_immediately', auth_settings_external_ldap_attr_email );
507 550 animateOption( 'hide_immediately', auth_settings_external_ldap_user );
508 551 animateOption( 'hide_immediately', auth_settings_external_ldap_password );
@@ -510,12 +553,13 @@
510 553 animateOption( 'hide_immediately', auth_settings_external_ldap_lostpassword_url );
511 554 animateOption( 'hide_immediately', auth_settings_external_ldap_attr_first_name );
512 555 animateOption( 'hide_immediately', auth_settings_external_ldap_attr_last_name );
513 556 animateOption( 'hide_immediately', auth_settings_external_ldap_attr_update_on_login );
557 + animateOption( 'hide_immediately', auth_settings_external_ldap_test_user );
514 558 }
515 559
516 560 // Event handler: Hide "Handle unauthorized visitors" option if access is granted to "Everyone"
517 - $( 'input[name="auth_settings[access_who_can_login]"]' ).change( function() {
561 + $( 'input[name="auth_settings[access_who_can_login]"]' ).on( 'change', function() {
518 562 // Hide settings unless "Only approved users" is checked
519 563 var action = $( '#radio_auth_settings_access_who_can_login_approved_users' ).is( ':checked' ) ? 'show' : 'hide';
520 564 animateOption( action, auth_settings_access_role_receive_pending_emails );
521 565 animateOption( action, auth_settings_access_pending_redirect_to_message );
@@ -526,9 +570,9 @@
526 570 animateOption( action, auth_settings_access_email_approved_users_body );
527 571 });
528 572
529 573 // Event handler: Hide Welcome email body/subject options if "Send welcome email" is off.
530 - $( 'input[name="auth_settings[access_should_email_approved_users]"]' ).change( function() {
574 + $( 'input[name="auth_settings[access_should_email_approved_users]"]' ).on( 'change', function() {
531 575 var action = $( this ).is( ':checked' ) ? 'show' : 'hide';
532 576 animateOption( action, auth_settings_access_email_approved_users_subject );
533 577 animateOption( action, auth_settings_access_email_approved_users_body );
534 578 });
@@ -533,9 +577,9 @@
533 577 animateOption( action, auth_settings_access_email_approved_users_body );
534 578 });
535 579
536 580 // Event handler: Hide "Handle unauthorized visitors" option if access is granted to "Everyone"
537 - $( 'input[name="auth_settings[access_who_can_view]"]' ).change( function() {
581 + $( 'input[name="auth_settings[access_who_can_view]"]' ).on( 'change', function() {
538 582 var action = $( '#radio_auth_settings_access_who_can_view_everyone' ).is( ':checked' ) ? 'hide' : 'show';
539 583 animateOption( action, auth_settings_access_redirect_to_login );
540 584 animateOption( action, auth_settings_access_redirect_to_message );
541 585 animateOption( action, auth_settings_access_public_pages );
@@ -541,10 +585,30 @@
541 585 animateOption( action, auth_settings_access_public_pages );
542 586 animateOption( action, auth_settings_access_public_warning );
543 587 });
544 588
589 + // Event handler: Show/hide OAuth2 options based on checkbox.
590 + $( 'input[name="auth_settings[oauth2]"]' ).on( 'change', function() {
591 + var action = $( this ).is( ':checked' ) ? 'show' : 'hide';
592 + animateOption( action, auth_settings_external_oauth2_provider );
593 + animateOption( action, auth_settings_external_oauth2_custom_label );
594 + animateOption( action, auth_settings_external_oauth2_clientid );
595 + animateOption( action, auth_settings_external_oauth2_clientsecret );
596 + animateOption( action, auth_settings_external_oauth2_hosteddomain );
597 + });
598 +
599 + // Event handler: Show/hide OAuth2 generic options based on provider.
600 + $( 'select[name="auth_settings[oauth2_provider]"]' ).on( 'change', function() {
601 + var action = 'generic' === $( this ).val() ? 'show' : 'hide';
602 + animateOption( action, auth_settings_external_oauth2_url_authorize );
603 + animateOption( action, auth_settings_external_oauth2_url_token );
604 + animateOption( action, auth_settings_external_oauth2_url_resource );
605 + action = 'azure' === $( this ).val() ? 'show' : 'hide';
606 + animateOption( action, auth_settings_external_oauth2_tenant_id );
607 + });
608 +
545 609 // Event handler: Show/hide Google options based on checkbox
546 - $( 'input[name="auth_settings[google]"]' ).change( function() {
610 + $( 'input[name="auth_settings[google]"]' ).on( 'change', function() {
547 611 var action = $( this ).is( ':checked' ) ? 'show' : 'hide';
548 612 animateOption( action, auth_settings_external_google_clientid );
549 613 animateOption( action, auth_settings_external_google_clientsecret );
550 614 animateOption( action, auth_settings_external_google_hosteddomain );
@@ -550,14 +614,15 @@
550 614 animateOption( action, auth_settings_external_google_hosteddomain );
551 615 });
552 616
553 617 // Event handler: Show/hide CAS options based on checkbox
554 - $( 'input[name="auth_settings[cas]"]' ).change( function() {
618 + $( 'input[name="auth_settings[cas]"]' ).on( 'change', function() {
555 619 var action = $( this ).is( ':checked' ) ? 'show' : 'hide';
556 620 animateOption( action, auth_settings_external_cas_custom_label );
557 621 animateOption( action, auth_settings_external_cas_host );
558 622 animateOption( action, auth_settings_external_cas_port );
559 623 animateOption( action, auth_settings_external_cas_path );
624 + animateOption( action, auth_settings_external_cas_method );
560 625 animateOption( action, auth_settings_external_cas_version );
561 626 animateOption( action, auth_settings_external_cas_attr_email );
562 627 animateOption( action, auth_settings_external_cas_attr_first_name );
563 628 animateOption( action, auth_settings_external_cas_attr_last_name );
@@ -562,16 +627,18 @@
562 627 animateOption( action, auth_settings_external_cas_attr_first_name );
563 628 animateOption( action, auth_settings_external_cas_attr_last_name );
564 629 animateOption( action, auth_settings_external_cas_attr_update_on_login );
565 630 animateOption( action, auth_settings_external_cas_auto_login );
631 + animateOption( action, auth_settings_external_cas_link_on_username );
566 632 });
567 633
568 634 // Event handler: Show/hide LDAP options based on checkbox
569 - $( 'input[name="auth_settings[ldap]"]' ).change( function() {
635 + $( 'input[name="auth_settings[ldap]"]' ).on( 'change', function() {
570 636 var action = $( this ).is( ':checked' ) ? 'show' : 'hide';
571 637 animateOption( action, auth_settings_external_ldap_host );
572 638 animateOption( action, auth_settings_external_ldap_port );
573 639 animateOption( action, auth_settings_external_ldap_search_base );
640 + animateOption( action, auth_settings_external_ldap_search_filter );
574 641 animateOption( action, auth_settings_external_ldap_uid );
575 642 animateOption( action, auth_settings_external_ldap_attr_email );
576 643 animateOption( action, auth_settings_external_ldap_user );
577 644 animateOption( action, auth_settings_external_ldap_password );
@@ -579,10 +646,30 @@
579 646 animateOption( action, auth_settings_external_ldap_lostpassword_url );
580 647 animateOption( action, auth_settings_external_ldap_attr_first_name );
581 648 animateOption( action, auth_settings_external_ldap_attr_last_name );
582 649 animateOption( action, auth_settings_external_ldap_attr_update_on_login );
650 + animateOption( action, auth_settings_external_ldap_test_user );
583 651 });
584 652
653 + // Event handler: Test LDAP settings.
654 + $( '#ldap_test_user_submit' ).on( 'click', function( event ) {
655 + event.preventDefault();
656 + $( 'html' ).addClass( 'busy' );
657 + $( '#ldap_test_user_spinner' ).addClass( 'is-active' );
658 +
659 + $.post( ajaxurl, {
660 + action: 'auth_settings_ldap_test_user',
661 + username: $( 'input[name="auth_settings[ldap_test_user]"]' ).val(),
662 + password: $( 'input#auth_settings_ldap_test_pass' ).val(),
663 + nonce: $( '#nonce_save_auth_settings' ).val(),
664 + }).done( function ( data ) {
665 + $( '#ldap_test_user_result' ).show().val( data.message );
666 + }).always( function () {
667 + $( 'html' ).removeClass( 'busy' );
668 + $( '#ldap_test_user_spinner' ).removeClass( 'is-active' );
669 + });
670 + } );
671 +
585 672 // Show save button if usermeta field is modified.
586 673 $( 'form input.auth-usermeta' ).on( 'keyup', function( event ) {
587 674 // Don't do anything if tab or arrow keys were pressed.
588 675 if ( event.which === 9 || event.which === 37 || event.which === 38 || event.which === 39 || event.which === 40 ) {
@@ -621,22 +708,26 @@
621 708 selectableHeader: '<div class="custom-header">' + authL10n.private_pages + '</div>',
622 709 selectionHeader: '<div class="custom-header">' + authL10n.public_pages + '</div>',
623 710 });
624 711
625 - // Switch to the first tab (or the tab indicated in sessionStorage, or the querystring).
626 - var tab = '';
627 - if ( getQuerystringValuesByKey( 'tab' ).length > 0 ) {
628 - tab = getQuerystringValuesByKey( 'tab' )[0];
629 - } else if ( sessionStorage.getItem( 'tab' ) ) {
630 - tab = sessionStorage.getItem( 'tab' );
712 + // Switch to the first tab (or the tab indicated in sessionStorage, or the
713 + // querystring). Note: only do this on the settings page, not the dashboard
714 + // widget.
715 + if ( ! $( '#auth_dashboard_widget' ).length ) {
716 + var tab = '';
717 + if ( getQuerystringValuesByKey( 'tab' ).length > 0 ) {
718 + tab = getQuerystringValuesByKey( 'tab' )[0];
719 + } else if ( sessionStorage.getItem( 'tab' ) ) {
720 + tab = sessionStorage.getItem( 'tab' );
721 + }
722 + if ( $.inArray( tab, [ 'access_lists', 'access_login', 'access_public', 'external', 'advanced' ] ) < 0 ) {
723 + tab = 'access_lists';
724 + }
725 + window.chooseTab( tab, animationSpeed );
631 726 }
632 - if ( $.inArray( tab, [ 'access_lists', 'access_login', 'access_public', 'external', 'advanced' ] ) < 0 ) {
633 - tab = 'access_lists';
634 - }
635 - window.chooseTab( tab, animationSpeed );
636 727
637 728 // Hide/show multisite settings based on override checkbox.
638 - $( 'input[name="auth_settings[multisite_override]"]' ).change( function() {
729 + $( 'input[name="auth_settings[multisite_override]"]' ).on( 'change', function() {
639 730 hideMultisiteSettingsIfDisabled();
640 731 });
641 732 hideMultisiteSettingsIfDisabled();
642 733
@@ -686,9 +777,12 @@
686 777 // Enable growable textarea for new user field.
687 778 $( 'textarea#new_approved_user_email' ).autogrow();
688 779
689 780 // Enable growable textarea for config fields.
781 + $( 'textarea#auth_settings_ldap_host' ).autogrow();
690 782 $( 'textarea#auth_settings_ldap_search_base' ).autogrow();
783 + $( 'textarea#auth_settings_ldap_search_filter' ).autogrow();
784 + $( 'textarea#auth_settings_oauth2_hosteddomain' ).autogrow();
691 785 $( 'textarea#auth_settings_google_hosteddomain' ).autogrow();
692 786
693 787 });
694 788
@@ -723,8 +817,11 @@
723 817
724 818 // Save user's active tab to sessionStorage (so we can restore it on reload).
725 819 // Note: session storage persists until the browser tab is closed.
726 820 sessionStorage.setItem( 'tab', listName );
821 +
822 + // Check whether to fade logo.
823 + fadeLogo();
727 824 };
728 825
729 826 // Hide (with overlay) site options if overridden by a multisite option.
730 827 window.hideMultisiteOverriddenOptions = function() {
@@ -736,10 +833,8 @@
736 833 'background-color': '#f1f1f1',
737 834 'z-index': 1,
738 835 opacity: 0.8,
739 836 position: 'absolute',
740 - top: optionContainerToHide.position().top,
741 - left: optionContainerToHide.position().left,
742 837 width: '100%',
743 838 height: optionContainerToHide.height(),
744 839 });
745 840 $( this ).show();
@@ -780,15 +875,14 @@
780 875 usermeta: usermeta,
781 876 nonce: nonce,
782 877 }, function( response ) {
783 878 var succeeded = response === 'success';
784 - var spinnerText = succeeded ? authL10n.saved + '.' : '<span style="color: red;">' + authL10n.failed + '.</span>';
879 + var spinnerText = succeeded ? authL10n.saved + '.' : '<span class="attention">' + authL10n.failed + '.</span>';
785 880 var spinnerWait = succeeded ? 500 : 2000;
786 881
787 882 // Enable inputs, remove spinner.
788 883 $caller.removeAttr( 'disabled' );
789 884 $usermeta.removeAttr( 'disabled' );
790 - $caller.css( 'display', 'none' );
791 885 $( 'form .spinner:not(:has(.spinner-text))' ).animate( { width: '60px' }, 'fast' ).append( '<span class="spinner-text">' + spinnerText + '</span>' ).delay( spinnerWait ).hide( animationSpeed, function() {
792 886 $( this ).remove();
793 887 });
794 888 $( 'html' ).removeClass( 'busy' );
@@ -794,15 +888,14 @@
794 888 $( 'html' ).removeClass( 'busy' );
795 889
796 890 }).fail( function() {
797 891 var succeeded = false;
798 - var spinnerText = succeeded ? authL10n.saved + '.' : '<span style="color: red;">' + authL10n.failed + '.</span>';
892 + var spinnerText = succeeded ? authL10n.saved + '.' : '<span class="attention">' + authL10n.failed + '.</span>';
799 893 var spinnerWait = succeeded ? 500 : 2000;
800 894
801 895 // Enable inputs, remove spinner.
802 896 $caller.removeAttr( 'disabled' );
803 897 $usermeta.removeAttr( 'disabled' );
804 - $caller.css( 'display', 'none' );
805 898 $( 'form .spinner:not(:has(.spinner-text))' ).animate( { width: '60px' }, 'fast' ).append( '<span class="spinner-text">' + spinnerText + '</span>' ).delay( spinnerWait ).hide( animationSpeed, function() {
806 899 $( this ).remove();
807 900 });
808 901 $( 'html' ).removeClass( 'busy' );
@@ -844,9 +937,10 @@
844 937 // Skip email address validation if adding from pending list (not user-editable).
845 938 var skipValidation = $( caller ).parent().parent().attr( 'id' ) === 'list_auth_settings_access_users_pending';
846 939
847 940 // Skip email address validation if we're banning an existing user (since they're already in a list).
848 - skipValidation = skipValidation || $( caller ).attr( 'id' ).indexOf( 'block_user' ) > -1;
941 + var blockingNewUser = $( caller ).attr( 'id' ).indexOf( 'block_user_new' ) > -1;
942 + skipValidation = skipValidation || ( $( caller ).attr( 'id' ).indexOf( 'block_user' ) > -1 && ! blockingNewUser );
849 943
850 944 // Set default for multisite flag (run different save routine if multisite)
851 945 isMultisite = 'undefined' !== typeof isMultisite ? isMultisite : false;
852 946
@@ -878,9 +972,9 @@
878 972 // Remove any invalid email addresses.
879 973 if ( ! skipValidation ) {
880 974 // Check if the email(s) being added is well-formed.
881 975 emails = emails.filter( function( emailToValidate ) {
882 - return validEmail( emailToValidate );
976 + return validEmail( emailToValidate, blockingNewUser );
883 977 });
884 978 // Remove any duplicates in the list of emails to add.
885 979 emails = removeDuplicatesFromArrayOfStrings( emails );
886 980 }
@@ -914,11 +1008,12 @@
914 1008 })
915 1009 );
916 1010
917 1011 // Add the new item.
918 - var authJsPrefix = isMultisite ? 'authMultisite' : 'auth';
919 - var localIcon = shouldCreateLocalAccount ? '&nbsp;<a title="' + authL10n.local_wordpress_user + '" class="auth-local-user"><span class="glyphicon glyphicon-user"></span></a>' : '';
920 - var banButton = list === 'approved' && ! isMultisite ? '<a class="button" id="block_user_' + nextId + '" onclick="' + authJsPrefix + 'AddUser( this, \'blocked\', false ); ' + authJsPrefix + 'IgnoreUser( this, \'approved\' );" title="' + authL10n.block_ban_user + '"><span class="glyphicon glyphicon-ban-circle"></span></a>' : '';
1012 + var authJsPrefix = isMultisite ? 'authMultisite' : 'auth';
1013 + var multisiteIcon = isMultisite ? '<a title="WordPress Multisite user" class="button disabled auth-multisite-user dashicons-before dashicons-admin-site"></a>' : '';
1014 + var banButton = isMultisite || 'approved' !== list ? '' : '<a class="button button-primary dashicons-before dashicons-remove" id="block_user_' + nextId + '" onclick="' + authJsPrefix + 'AddUser( this, \'blocked\', false ); ' + authJsPrefix + 'IgnoreUser( this, \'approved\' );" title="' + authL10n.block_ban_user + '"></a>';
1015 + var ignoreButton = '<a class="button dashicons-before dashicons-no" id="ignore_user_' + nextId + '" onclick="' + authJsPrefix + 'IgnoreUser( this, \'' + list + '\' );" title="' + authL10n.remove_user + '"></a>';
921 1016 $( ' \
922 1017 <li id="new_user_' + nextId + '" class="new-user" style="display: none;"> \
923 1018 <input type="text" id="auth_settings_access_users_' + list + '_' + nextId + '" name="auth_settings[access_users_' + list + '][' + nextId + '][email]" value="' + user.email + '" readonly="true" class="auth-email" /> \
924 1019 <select name="auth_settings[access_users_' + list + '][' + nextId + '][role]" class="auth-role" onchange="' + authJsPrefix + 'ChangeRole( this );"> \
@@ -923,11 +1018,9 @@
923 1018 <input type="text" id="auth_settings_access_users_' + list + '_' + nextId + '" name="auth_settings[access_users_' + list + '][' + nextId + '][email]" value="' + user.email + '" readonly="true" class="auth-email" /> \
924 1019 <select name="auth_settings[access_users_' + list + '][' + nextId + '][role]" class="auth-role" onchange="' + authJsPrefix + 'ChangeRole( this );"> \
925 1020 </select> \
926 1021 <input type="text" name="auth_settings[access_users_' + list + '][' + nextId + '][date_added]" value="' + getShortDate() + '" readonly="true" class="auth-date-added" /> \
927 - ' + banButton + ' \
928 - <a class="button" id="ignore_user_' + nextId + '" onclick="' + authJsPrefix + 'IgnoreUser( this, \'' + list + '\' );" title="' + authL10n.remove_user + '"><span class="glyphicon glyphicon-remove"></span></a> \
929 - ' + localIcon + ' \
1022 + ' + multisiteIcon + banButton + ignoreButton + ' \
930 1023 <span class="spinner is-active"></span> \
931 1024 </li> \
932 1025 ' ).appendTo( '#list_auth_settings_access_users_' + list ).slideDown( 250 );
933 1026
@@ -1036,8 +1129,10 @@
1036 1129 var nonce_save_auth_settings = $( '#nonce_save_auth_settings' ).val();
1037 1130
1038 1131 var multisite_override = $( '#auth_settings_multisite_override' ).is( ':checked' ) ? '1' : '';
1039 1132
1133 + var prevent_override_multisite = $( '#auth_settings_prevent_override_multisite' ).is( ':checked' ) ? '1' : '';
1134 +
1040 1135 var access_who_can_login = $( 'form input[name="auth_settings[access_who_can_login]"]:checked' ).val();
1041 1136
1042 1137 var access_who_can_view = $( 'form input[name="auth_settings[access_who_can_view]"]:checked' ).val();
1043 1138
@@ -1052,8 +1147,19 @@
1052 1147 });
1053 1148
1054 1149 var access_default_role = $( '#auth_settings_access_default_role' ).val();
1055 1150
1151 + var oauth2 = $( '#auth_settings_oauth2' ).is( ':checked' ) ? '1' : '';
1152 + var oauth2_provider = $( '#auth_settings_oauth2_provider' ).val();
1153 + var oauth2_custom_label = $( '#auth_settings_oauth2_custom_label' ).val();
1154 + var oauth2_clientid = $( '#auth_settings_oauth2_clientid' ).val();
1155 + var oauth2_clientsecret = $( '#auth_settings_oauth2_clientsecret' ).val();
1156 + var oauth2_hosteddomain = $( '#auth_settings_oauth2_hosteddomain' ).val();
1157 + var oauth2_tenant_id = $( '#auth_settings_oauth2_tenant_id' ).val();
1158 + var oauth2_url_authorize = $( '#auth_settings_oauth2_url_authorize' ).val();
1159 + var oauth2_url_token = $( '#auth_settings_oauth2_url_token' ).val();
1160 + var oauth2_url_resource = $( '#auth_settings_oauth2_url_resource' ).val();
1161 +
1056 1162 var google = $( '#auth_settings_google' ).is( ':checked' ) ? '1' : '';
1057 1163 var google_clientid = $( '#auth_settings_google_clientid' ).val();
1058 1164 var google_clientsecret = $( '#auth_settings_google_clientsecret' ).val();
1059 1165 var google_hosteddomain = $( '#auth_settings_google_hosteddomain' ).val();
@@ -1062,19 +1168,22 @@
1062 1168 var cas_custom_label = $( '#auth_settings_cas_custom_label' ).val();
1063 1169 var cas_host = $( '#auth_settings_cas_host' ).val();
1064 1170 var cas_port = $( '#auth_settings_cas_port' ).val();
1065 1171 var cas_path = $( '#auth_settings_cas_path' ).val();
1172 + var cas_method = $( '#auth_settings_cas_method' ).val();
1066 1173 var cas_version = $( '#auth_settings_cas_version' ).val();
1067 1174 var cas_attr_email = $( '#auth_settings_cas_attr_email' ).val();
1068 1175 var cas_attr_first_name = $( '#auth_settings_cas_attr_first_name' ).val();
1069 1176 var cas_attr_last_name = $( '#auth_settings_cas_attr_last_name' ).val();
1070 - var cas_attr_update_on_login = $( '#auth_settings_cas_attr_update_on_login' ).is( ':checked' ) ? '1' : '';
1177 + var cas_attr_update_on_login = $( '#auth_settings_cas_attr_update_on_login' ).val();
1071 1178 var cas_auto_login = $( '#auth_settings_cas_auto_login' ).is( ':checked' ) ? '1' : '';
1179 + var cas_link_on_username = $( '#auth_settings_cas_link_on_username' ).is( ':checked' ) ? '1' : '';
1072 1180
1073 1181 var ldap = $( '#auth_settings_ldap' ).is( ':checked' ) ? '1' : '';
1074 1182 var ldap_host = $( '#auth_settings_ldap_host' ).val();
1075 1183 var ldap_port = $( '#auth_settings_ldap_port' ).val();
1076 1184 var ldap_search_base = $( '#auth_settings_ldap_search_base' ).val();
1185 + var ldap_search_filter = $( '#auth_settings_ldap_search_filter' ).val();
1077 1186 var ldap_uid = $( '#auth_settings_ldap_uid' ).val();
1078 1187 var ldap_attr_email = $( '#auth_settings_ldap_attr_email' ).val();
1079 1188 var ldap_user = $( '#auth_settings_ldap_user' ).val();
1080 1189 var ldap_password = $( '#auth_settings_ldap_password' ).val();
@@ -1081,9 +1190,10 @@
1081 1190 var ldap_tls = $( '#auth_settings_ldap_tls' ).is( ':checked' ) ? '1' : '';
1082 1191 var ldap_lostpassword_url = $( '#auth_settings_ldap_lostpassword_url' ).val();
1083 1192 var ldap_attr_first_name = $( '#auth_settings_ldap_attr_first_name' ).val();
1084 1193 var ldap_attr_last_name = $( '#auth_settings_ldap_attr_last_name' ).val();
1085 - var ldap_attr_update_on_login = $( '#auth_settings_ldap_attr_update_on_login' ).is( ':checked' ) ? '1' : '';
1194 + var ldap_attr_update_on_login = $( '#auth_settings_ldap_attr_update_on_login' ).val();
1195 + var ldap_test_user = $( '#auth_settings_ldap_test_user' ).val();
1086 1196
1087 1197 var advanced_lockouts = {
1088 1198 attempts_1: $( '#auth_settings_advanced_lockouts_attempts_1' ).val(),
1089 1199 duration_1: $( '#auth_settings_advanced_lockouts_duration_1' ).val(),
@@ -1091,8 +1201,9 @@
1091 1201 duration_2: $( '#auth_settings_advanced_lockouts_duration_2' ).val(),
1092 1202 reset_duration: $( '#auth_settings_advanced_lockouts_reset_duration' ).val(),
1093 1203 };
1094 1204 var advanced_hide_wp_login = $( '#auth_settings_advanced_hide_wp_login' ).is( ':checked' ) ? '1' : '';
1205 + var advanced_disable_wp_login = $( '#auth_settings_advanced_disable_wp_login' ).is( ':checked' ) ? '1' : '';
1095 1206 var advanced_widget_enabled = $( '#auth_settings_advanced_widget_enabled' ).is( ':checked' ) ? '1' : '';
1096 1207 var advanced_users_per_page = $( '#auth_settings_advanced_users_per_page' ).val();
1097 1208 var advanced_users_sort_by = $( '#auth_settings_advanced_users_sort_by' ).val();
1098 1209 var advanced_users_sort_order = $( '#auth_settings_advanced_users_sort_order' ).val();
@@ -1100,12 +1211,23 @@
1100 1211 $.post( ajaxurl, {
1101 1212 action: 'save_auth_multisite_settings',
1102 1213 nonce: nonce_save_auth_settings,
1103 1214 multisite_override: multisite_override,
1215 + prevent_override_multisite: prevent_override_multisite,
1104 1216 access_who_can_login: access_who_can_login,
1105 1217 access_who_can_view: access_who_can_view,
1106 1218 access_users_approved: access_users_approved,
1107 1219 access_default_role: access_default_role,
1220 + oauth2: oauth2,
1221 + oauth2_provider: oauth2_provider,
1222 + oauth2_custom_label: oauth2_custom_label,
1223 + oauth2_clientid: oauth2_clientid,
1224 + oauth2_clientsecret: oauth2_clientsecret,
1225 + oauth2_hosteddomain: oauth2_hosteddomain,
1226 + oauth2_tenant_id: oauth2_tenant_id,
1227 + oauth2_url_authorize: oauth2_url_authorize,
1228 + oauth2_url_token: oauth2_url_token,
1229 + oauth2_url_resource: oauth2_url_resource,
1108 1230 google: google,
1109 1231 google_clientid: google_clientid,
1110 1232 google_clientsecret: google_clientsecret,
1111 1233 google_hosteddomain: google_hosteddomain,
@@ -1113,8 +1235,9 @@
1113 1235 cas_custom_label: cas_custom_label,
1114 1236 cas_host: cas_host,
1115 1237 cas_port: cas_port,
1116 1238 cas_path: cas_path,
1239 + cas_method: cas_method,
1117 1240 cas_version: cas_version,
1118 1241 cas_attr_email: cas_attr_email,
1119 1242 cas_attr_first_name: cas_attr_first_name,
1120 1243 cas_attr_last_name: cas_attr_last_name,
@@ -1119,12 +1242,14 @@
1119 1242 cas_attr_first_name: cas_attr_first_name,
1120 1243 cas_attr_last_name: cas_attr_last_name,
1121 1244 cas_attr_update_on_login: cas_attr_update_on_login,
1122 1245 cas_auto_login: cas_auto_login,
1246 + cas_link_on_username: cas_link_on_username,
1123 1247 ldap: ldap,
1124 1248 ldap_host: ldap_host,
1125 1249 ldap_port: ldap_port,
1126 1250 ldap_search_base: ldap_search_base,
1251 + ldap_search_filter: ldap_search_filter,
1127 1252 ldap_uid: ldap_uid,
1128 1253 ldap_attr_email: ldap_attr_email,
1129 1254 ldap_user: ldap_user,
1130 1255 ldap_password: ldap_password,
@@ -1132,10 +1257,12 @@
1132 1257 ldap_lostpassword_url: ldap_lostpassword_url,
1133 1258 ldap_attr_first_name: ldap_attr_first_name,
1134 1259 ldap_attr_last_name: ldap_attr_last_name,
1135 1260 ldap_attr_update_on_login: ldap_attr_update_on_login,
1261 + ldap_test_user: ldap_test_user,
1136 1262 advanced_lockouts: advanced_lockouts,
1137 1263 advanced_hide_wp_login: advanced_hide_wp_login,
1264 + advanced_disable_wp_login: advanced_disable_wp_login,
1138 1265 advanced_users_per_page: advanced_users_per_page,
1139 1266 advanced_users_sort_by: advanced_users_sort_by,
1140 1267 advanced_users_sort_order: advanced_users_sort_order,
1141 1268 advanced_widget_enabled: advanced_widget_enabled,
@@ -1140,9 +1267,9 @@
1140 1267 advanced_users_sort_order: advanced_users_sort_order,
1141 1268 advanced_widget_enabled: advanced_widget_enabled,
1142 1269 }, function( response ) {
1143 1270 var succeeded = response === 'success';
1144 - var spinnerText = succeeded ? authL10n.saved + '.' : '<span style="color: red;">' + authL10n.failed + '.</span>';
1271 + var spinnerText = succeeded ? authL10n.saved + '.' : '<span class="attention">' + authL10n.failed + '.</span>';
1145 1272 var spinnerWait = succeeded ? 500 : 2000;
1146 1273 $( 'form .spinner:not(:has(.spinner-text))' ).append( '<span class="spinner-text">' + spinnerText + '</span>' ).delay( spinnerWait ).hide( animationSpeed, function() {
1147 1274 $( this ).remove();
1148 1275 });
@@ -1152,9 +1279,9 @@
1152 1279 $( 'html' ).removeClass( 'busy' );
1153 1280 }).fail( function() {
1154 1281 // Fail fires if the server doesn't respond
1155 1282 var succeeded = false;
1156 - var spinnerText = succeeded ? authL10n.saved + '.' : '<span style="color: red;">' + authL10n.failed + '.</span>';
1283 + var spinnerText = succeeded ? authL10n.saved + '.' : '<span class="attention">' + authL10n.failed + '.</span>';
1157 1284 var spinnerWait = succeeded ? 500 : 2000;
1158 1285 $( 'form .spinner:not(:has(.spinner-text))' ).append( '<span class="spinner-text">' + spinnerText + '</span>' ).delay( spinnerWait ).hide( animationSpeed, function() {
1159 1286 $( this ).remove();
1160 1287 });
@@ -1164,8 +1291,29 @@
1164 1291 $( 'html' ).removeClass( 'busy' );
1165 1292 });
1166 1293 };
1167 1294 /* eslint-enable camelcase */
1295 +
1296 + // Fade in/out Authorizer logo in bottom right on Settings.
1297 + $(document).on( 'scroll', function () {
1298 + fadeLogo();
1299 + });
1300 +
1301 + function fadeLogo() {
1302 + if ( getScrollPercent() < 90 ) {
1303 + $( '#wpwrap' ).removeClass( 'not-faded' );
1304 + } else {
1305 + $( '#wpwrap' ).addClass( 'not-faded' );
1306 + }
1307 + }
1308 +
1309 + function getScrollPercent() {
1310 + var h = document.documentElement,
1311 + b = document.body,
1312 + st = 'scrollTop',
1313 + sh = 'scrollHeight';
1314 + return ( h[st] || b[st] ) / ( ( h[sh] || b[sh] ) - h.clientHeight ) * 100;
1315 + }
1168 1316
1169 1317 /* ========================================================================
1170 1318 * Portions below from Bootstrap.
1171 1319 * ========================================================================