Index: branches/1.0.x/inc/js/passwordStrengthMeter.js =================================================================== diff -u -N -r14600 -r14759 --- branches/1.0.x/inc/js/passwordStrengthMeter.js (.../passwordStrengthMeter.js) (revision 14600) +++ branches/1.0.x/inc/js/passwordStrengthMeter.js (.../passwordStrengthMeter.js) (revision 14759) @@ -1,70 +1,138 @@ -var shortPass = ' Too Short Password' -var badPass = ' Week; Use letters & numbers' -var goodPass = ' Medium; Use special charecters' -var strongPass = ' Strong Password' +function PasswordStrengthMeter($settings) { + this.inputSelector = ''; -function passwordStrength(password) -{ - score = 0 - - //password < 4 - if (password.length < 4 ) { return shortPass } + this.phrases = { + 'short': 'Too Short Password', + 'bad': 'Week; Use letters & numbers', + 'good': 'Medium; Use special characters', + 'strong': 'Strong Password' + }; - //password length - score += password.length * 4 - score += ( checkRepetition(1,password).length - password.length ) * 1 - score += ( checkRepetition(2,password).length - password.length ) * 1 - score += ( checkRepetition(3,password).length - password.length ) * 1 - score += ( checkRepetition(4,password).length - password.length ) * 1 + this.cssClasses = { + 'short': 'meterFail', + 'bad': 'meterWarn', + 'good': 'meterGood', + 'strong': 'meterExcel' + }; - //password has 3 numbers - if (password.match(/(.*[0-9].*[0-9].*[0-9])/)) score += 5 - - //password has 2 sybols - if (password.match(/(.*[!,@,#,$,%,^,&,*,?,_,~].*[!,@,#,$,%,^,&,*,?,_,~])/)) score += 5 - - //password has Upper and Lower chars - if (password.match(/([a-z].*[A-Z])|([A-Z].*[a-z])/)) score += 10 - - //password has number and chars - if (password.match(/([a-zA-Z])/) && password.match(/([0-9])/)) score += 15 - // - //password has number and symbol - if (password.match(/([!,@,#,$,%,^,&,*,?,_,~])/) && password.match(/([0-9])/)) score += 15 - - //password has char and symbol - if (password.match(/([!,@,#,$,%,^,&,*,?,_,~])/) && password.match(/([a-zA-Z])/)) score += 15 - - //password is just a nubers or chars - if (password.match(/^\w+$/) || password.match(/^\d+$/) ) score -= 10 - - //verifing 0 < score < 100 - if ( score < 0 ) score = 0 - if ( score > 100 ) score = 100 - - if (score < 34 ) return badPass - if (score < 68 ) return goodPass - return strongPass + $.extend(true, this, $settings); + + var $me = this; + + $(document).ready( + function() { + $($me.inputSelector).keyup( + function($e) { + $($me.inputSelector + '_strength') + .html( $me.getStrengthHTML( $(this).val() ) ) + .show(); + } + ); + } + ); } -// checkRepetition(1,'aaaaaaabcbc') = 'abcbc' -// checkRepetition(2,'aaaaaaabcbc') = 'aabc' -// checkRepetition(2,'aaaaaaabcdbcd') = 'aabcd' +PasswordStrengthMeter.prototype.getStrength = function (password) { + var score = 0; -function checkRepetition(pLen,str) { - res = "" - for ( i=0; i 100) { + score = 100; + } + + if (score < 34) { + return 'bad'; + } + + if (score < 68) { + return 'good'; + } + + return 'strong'; +} + +PasswordStrengthMeter.prototype.getStrengthHTML = function (password) { + var $strength = this.getStrength(password), + $css_class = this.cssClasses[$strength], + $phrase = this.phrases[$strength]; + + return ' ' + $phrase + ''; +} + +PasswordStrengthMeter.prototype.checkRepetition = function(pLen, str) { + var res = "", + repeated = true; + + for (i = 0; i < str.length; i++) { + repeated = true; + + for (j = 0; j < pLen && (j + i + pLen) < str.length; j++) { + repeated = repeated && (str.charAt(j + i) == str.charAt(j + i + pLen)); + } + + if (j < pLen) { + repeated = false; + } + + if (repeated) { + i += pLen - 1; + repeated = false; + } + else { + res += str.charAt(i); + } + } + + return res; } \ No newline at end of file