diff options
author | Johan Lundberg <lundberg@nordu.net> | 2011-01-26 13:43:37 +0100 |
---|---|---|
committer | Johan Lundberg <lundberg@nordu.net> | 2011-01-26 13:43:37 +0100 |
commit | d8b4329d8f323d174662f4983f781e43b6c60593 (patch) | |
tree | 0cca23cd3d3aed94bd00af67af96ca5cb6e315ec /media | |
parent | 0d9f0270b46146b9701a21dfc344ff91d0dba603 (diff) |
Added password strenght indicator js and css.
Diffstat (limited to 'media')
-rw-r--r-- | media/css/change_password.css | 8 | ||||
-rw-r--r-- | media/js/password_strength.js | 135 |
2 files changed, 143 insertions, 0 deletions
diff --git a/media/css/change_password.css b/media/css/change_password.css new file mode 100644 index 0000000..7c5a053 --- /dev/null +++ b/media/css/change_password.css @@ -0,0 +1,8 @@ +/* Password change styles */ +ul.errorlist { +font-weight:bold; +list-style:none; +} +th.formlabel { +text-align:right; +} diff --git a/media/js/password_strength.js b/media/js/password_strength.js new file mode 100644 index 0000000..e2f30b7 --- /dev/null +++ b/media/js/password_strength.js @@ -0,0 +1,135 @@ +/* + * Password Strength (0.1.1) + * by Sagie Maoz (n0nick.net) + * n0nick@php.net + * + * This plugin will check the value of a password field and evaluate the + * strength of the typed password. This is done by checking for + * the diversity of character types: numbers, lowercase and uppercase + * letters and special characters. + * + * Copyright (c) 2010 Sagie Maoz <n0nick@php.net> + * Licensed under the GPL license, see http://www.gnu.org/licenses/gpl-3.0.html + * + * + * NOTE: This script requires jQuery to work. Download jQuery at www.jquery.com + * + */ + +(function($){ + +var passwordStrength = new function() +{ + this.countRegexp = function(val, rex) + { + var match = val.match(rex); + return match ? match.length : 0; + } + + this.getStrength = function(val, minLength) + { + var len = val.length; + + // too short =( + if (len < minLength) + { + return 0; + } + + var nums = this.countRegexp(val, /\d/g), + lowers = this.countRegexp(val, /[a-z]/g), + uppers = this.countRegexp(val, /[A-Z]/g), + specials = len - nums - lowers - uppers; + + // not all types used + if (nums == 0 || lowers == 0 || uppers == 0 || specials == 0) + { + return 0; + } + + var strength = len; + /* + if (nums) { strength+= 2; } + if (lowers) { strength+= uppers? 4 : 3; } + if (uppers) { strength+= lowers? 4 : 3; } + if (specials) { strength+= 5; } + if (len > 10) { strength+= 1; } + */ + + return strength; + } + + this.getStrengthLevel = function(val, minLength) + { + var strength = this.getStrength(val, minLength); + switch (true) + { + case (strength <= 0): + return 1; + break; + case (strength > 0 && strength <= 8): + return 2; + break; + case (strength > 8 && strength <= 12): + return 3; + break; + case (strength > 12 && strength <= 15): + return 4; + break; + case (strength > 15): + return 5; + break; + } + + return 1; + } +} + +$.fn.password_strength = function(options) +{ + var settings = $.extend({ + 'container' : null, + 'minLength' : 8, + 'texts' : { + 1 : 'Too weak', + 2 : 'Weak password', + 3 : 'Normal strength', + 4 : 'Strong password', + 5 : 'Very strong password' + } + }, options); + + return this.each(function() + { + if (settings.container) + { + var container = $(settings.container); + } + else + { + var container = $('<span/>').attr('class', 'password_strength'); + $(this).after(container); + } + + $(this).keyup(function() + { + var val = $(this).val(); + if (val.length > 0) + { + var level = passwordStrength.getStrengthLevel(val, settings.minLength); + var _class = 'password_strength_' + level; + + if (!container.hasClass(_class) && level in settings.texts) + { + container.text(settings.texts[level]).attr('class', 'password_strength ' + _class); + } + } + else + { + container.text('').attr('class', 'password_strength'); + } + }); + }); +}; + +})(jQuery); |