wp/wp-admin/js/password-strength-meter.js
author ymh <ymh.work@gmail.com>
Tue, 09 Jun 2015 11:14:17 +0000
changeset 6 490d5cc509ed
parent 5 5e2f62d02dcd
child 7 cf61fcea0001
permissions -rw-r--r--
update portfolio
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
     1
/* global zxcvbn */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
window.wp = window.wp || {};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
var passwordStrength;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
(function($){
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
	wp.passwordStrength = {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
		/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
		 * Determine the strength of a given password
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
		 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
		 * @param string password1 The password
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
		 * @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
    12
		 * @param string password2 The confirmed password
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
		 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
		meter : function( password1, blacklist, password2 ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
			if ( ! $.isArray( blacklist ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
				blacklist = [ blacklist.toString() ];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
			if (password1 != password2 && password2 && password2.length > 0)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
				return 5;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
			var result = zxcvbn( password1, blacklist );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
			return result.score;
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
		/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
		 * 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
    27
		 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
		 * @return array The array of data to be blacklisted
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
		 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
		userInputBlacklist : function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
			var i, userInputFieldsLength, rawValuesLength, currentField,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
				rawValues       = [],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
				blacklist       = [],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
				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
    35
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
			// Collect all the strings we want to blacklist
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
			rawValues.push( document.title );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
			rawValues.push( document.URL );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
			userInputFieldsLength = userInputFields.length;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
			for ( i = 0; i < userInputFieldsLength; i++ ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
				currentField = $( '#' + userInputFields[ i ] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    44
				if ( 0 === currentField.length ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
					continue;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
				rawValues.push( currentField[0].defaultValue );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
				rawValues.push( currentField.val() );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
			// Strip out non-alphanumeric characters and convert each word to an individual entry
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
			rawValuesLength = rawValues.length;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
			for ( i = 0; i < rawValuesLength; i++ ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
				if ( rawValues[ i ] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
					blacklist = blacklist.concat( rawValues[ i ].replace( /\W/g, ' ' ).split( ' ' ) );
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
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
			// 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
    61
			blacklist = $.grep( blacklist, function( value, key ) {
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    62
				if ( '' === value || 4 > value.length ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
					return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
				return $.inArray( value, blacklist ) === key;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
			return blacklist;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
		}
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    71
	};
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
	// Backwards compatibility.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
	passwordStrength = wp.passwordStrength.meter;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
})(jQuery);