Make WordPress Core

Changeset 37940


Ignore:
Timestamp:
07/01/2016 12:44:43 PM (8 years ago)
Author:
peterwilsoncc
Message:

Users: Check zxcvbn is defined before calling.

Prevents JavaScript errors by checking zxcvbn is defined before calling.

Changes wp.passwordStrength.meter() to return -1 if the strength of the password is unknown.

On the user profile screen, generatePassword() checks if the user has entered the password before setting the value of the password input box.

Props peterwilsoncc, adamsilverstein.
Fixes #34905.

Location:
trunk/src
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-admin/js/password-strength-meter.js

    r37431 r37940  
    1818            if (password1 != password2 && password2 && password2.length > 0)
    1919                return 5;
     20
     21            if ( 'undefined' === typeof window.zxcvbn ) {
     22                // Password strength unknown.
     23                return -1;
     24            }
    2025
    2126            var result = zxcvbn( password1, blacklist );
  • trunk/src/wp-admin/js/user-profile.js

    r35870 r37940  
    3131        if ( typeof zxcvbn !== 'function' ) {
    3232            setTimeout( generatePassword, 50 );
     33            return;
     34        } else if ( ! $pass1.val() ) {
     35            // zxcvbn loaded before user entered password.
     36            $pass1.val( $pass1.data( 'pw' ) );
     37            $pass1.trigger( 'pwupdate' );
     38            showOrHideWeakPasswordCheckbox();
     39        }
     40        else {
     41            // zxcvbn loaded after the user entered password, check strength.
     42            check_pass_strength();
     43            showOrHideWeakPasswordCheckbox();
     44        }
     45
     46        if ( 1 !== parseInt( $toggleButton.data( 'start-masked' ), 10 ) ) {
     47            $pass1Wrap.addClass( 'show-password' );
    3348        } else {
    34             $pass1.val( $pass1.data( 'pw' ) );
    35             $pass1.trigger( 'pwupdate' ).trigger( 'wp-check-valid-field' );
    36             if ( 1 !== parseInt( $toggleButton.data( 'start-masked' ), 10 ) ) {
    37                 $pass1Wrap.addClass( 'show-password' );
    38             } else {
    39                 $toggleButton.trigger( 'click' );
    40             }
    41         }
     49            $toggleButton.trigger( 'click' );
     50        }
     51
     52        // Once zxcvbn loads, passwords strength is known.
     53        $( '#pw-weak-text-label' ).html( userProfileL10n.warnWeak );
    4254    }
    4355
    4456    function bindPass1() {
    45         var passStrength = $('#pass-strength-result')[0];
    46 
    4757        currentPass = $pass1.val();
    4858
     
    8393            }
    8494            $pass1.add( $pass1Text ).removeClass( 'short bad good strong' );
    85 
    86             if ( passStrength.className ) {
    87                 $pass1.add( $pass1Text ).addClass( passStrength.className );
    88                 if ( 'short' === passStrength.className || 'bad' === passStrength.className ) {
    89                     if ( ! $weakCheckbox.prop( 'checked' ) ) {
    90                         $submitButtons.prop( 'disabled', true );
    91                     }
    92                     $weakRow.show();
    93                 } else {
    94                     $submitButtons.prop( 'disabled', false );
    95                     $weakRow.hide();
    96                 }
    97             }
     95            showOrHideWeakPasswordCheckbox();
    9896        } );
    9997    }
     
    290288
    291289        switch ( strength ) {
     290            case -1:
     291                $( '#pass-strength-result' ).addClass( 'bad' ).html( pwsL10n.unknown );
     292                break;
    292293            case 2:
    293294                $('#pass-strength-result').addClass('bad').html( pwsL10n.bad );
     
    307308    }
    308309
     310    function showOrHideWeakPasswordCheckbox() {
     311        var passStrength = $('#pass-strength-result')[0];
     312
     313        if ( passStrength.className ) {
     314            $pass1.add( $pass1Text ).addClass( passStrength.className );
     315            if ( 'short' === passStrength.className || 'bad' === passStrength.className ) {
     316                if ( ! $weakCheckbox.prop( 'checked' ) ) {
     317                    $submitButtons.prop( 'disabled', true );
     318                }
     319                $weakRow.show();
     320            } else {
     321                $submitButtons.prop( 'disabled', false );
     322                $weakRow.hide();
     323            }
     324        }
     325    }
     326
    309327    $(document).ready( function() {
    310328        var $colorpicker, $stylesheet, user_id, current_user_id,
  • trunk/src/wp-admin/user-edit.php

    r37914 r37940  
    532532        <label>
    533533            <input type="checkbox" name="pw_weak" class="pw-checkbox" />
    534             <?php _e( 'Confirm use of weak password' ); ?>
     534            <span id="pw-weak-text-label"><?php _e( 'Confirm use of potentially weak password' ); ?></span>
    535535        </label>
    536536    </td>
  • trunk/src/wp-includes/script-loader.php

    r37914 r37940  
    381381    $scripts->add( 'password-strength-meter', "/wp-admin/js/password-strength-meter$suffix.js", array( 'jquery', 'zxcvbn-async' ), false, 1 );
    382382    did_action( 'init' ) && $scripts->localize( 'password-strength-meter', 'pwsL10n', array(
     383        'unknown'  => _x( 'Password strength unknown', 'password strength' ),
    383384        'short'    => _x( 'Very weak', 'password strength' ),
    384385        'bad'      => _x( 'Weak', 'password strength' ),
     
    391392    did_action( 'init' ) && $scripts->localize( 'user-profile', 'userProfileL10n', array(
    392393        'warn'     => __( 'Your new password has not been saved.' ),
     394        'warnWeak' => __( 'Confirm use of weak password.' ),
    393395        'show'     => __( 'Show' ),
    394396        'hide'     => __( 'Hide' ),
Note: See TracChangeset for help on using the changeset viewer.