wp/wp-admin/js/password-strength-meter.js
author ymh <ymh.work@gmail.com>
Wed, 06 Nov 2013 03:21:17 +0000
changeset 0 d970ebf37754
child 5 5e2f62d02dcd
permissions -rw-r--r--
first import
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
window.wp = window.wp || {};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
var passwordStrength;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
(function($){
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
	wp.passwordStrength = {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
		/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
		 * Determine the strength of a given password
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
		 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
		 * @param string password1 The password
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
		 * @param array blacklist An array of words that will lower the entropy of the password
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
		 * @param string password2 The confirmed password
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
		 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
		meter : function( password1, blacklist, password2 ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
			if ( ! $.isArray( blacklist ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
				blacklist = [ blacklist.toString() ];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
			if (password1 != password2 && password2 && password2.length > 0)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
				return 5;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
			var result = zxcvbn( password1, blacklist );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
			return result.score;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
		/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
		 * Builds an array of data that should be penalized, because it would lower the entropy of a password if it were used
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
		 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
		 * @return array The array of data to be blacklisted
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
		 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
		userInputBlacklist : function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
			var i, userInputFieldsLength, rawValuesLength, currentField,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
				rawValues       = [],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
				blacklist       = [],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
				userInputFields = [ 'user_login', 'first_name', 'last_name', 'nickname', 'display_name', 'email', 'url', 'description', 'weblog_title', 'admin_email' ];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
			// Collect all the strings we want to blacklist
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
			rawValues.push( document.title );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
			rawValues.push( document.URL );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
			userInputFieldsLength = userInputFields.length;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
			for ( i = 0; i < userInputFieldsLength; i++ ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
				currentField = $( '#' + userInputFields[ i ] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
				if ( 0 == currentField.length ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
					continue;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
				rawValues.push( currentField[0].defaultValue );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
				rawValues.push( currentField.val() );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
			// Strip out non-alphanumeric characters and convert each word to an individual entry
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
			rawValuesLength = rawValues.length;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
			for ( i = 0; i < rawValuesLength; i++ ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
				if ( rawValues[ i ] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
					blacklist = blacklist.concat( rawValues[ i ].replace( /\W/g, ' ' ).split( ' ' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
			// Remove empty values, short words, and duplicates. Short words are likely to cause many false positives.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
			blacklist = $.grep( blacklist, function( value, key ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
				if ( '' == value || 4 > value.length ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
					return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
				return $.inArray( value, blacklist ) === key;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
			return blacklist;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
	// Backwards compatibility.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
	passwordStrength = wp.passwordStrength.meter;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
})(jQuery);