Merge pull request #1657 from HerrKauwer/zxcvbn
Used zxcvbn for password strength determination
This commit is contained in:
commit
30af8e83c5
@ -1,79 +1,65 @@
|
||||
function scorePassword(pass) {
|
||||
var score = 0;
|
||||
if (!pass)
|
||||
return score;
|
||||
var letters = new Object();
|
||||
for (var i = 0; i < pass.length; i++) {
|
||||
letters[pass[i]] = (letters[pass[i]] || 0) + 1;
|
||||
score += 5.0 / letters[pass[i]];
|
||||
}
|
||||
var variations = {
|
||||
digits: /\d/.test(pass),
|
||||
lower: /[a-z]/.test(pass),
|
||||
upper: /[A-Z]/.test(pass),
|
||||
nonWords: /\W/.test(pass),
|
||||
spChars: /!@#\$%\^\&*\)\(+=._-/.test(pass)
|
||||
};
|
||||
variationCount = 0;
|
||||
for (var check in variations) {
|
||||
variationCount += (variations[check] === true) ? 1 : 0;
|
||||
}
|
||||
score += (variationCount - 1) * 10;
|
||||
return parseInt(score);
|
||||
function calcScore(pass) {
|
||||
var keywords = [ "mine", "mining", "crypto", "pool", "coin" ];
|
||||
return zxcvbn(pass, keywords).score;
|
||||
}
|
||||
function checkPassStrength(pass) {
|
||||
var score = scorePassword(pass);
|
||||
if (score >= 80)
|
||||
|
||||
function getPassStrength(score) {
|
||||
if (score === 4)
|
||||
return "Excellent";
|
||||
if (score >= 70)
|
||||
if (score === 3)
|
||||
return "Strong";
|
||||
if (score >= 50)
|
||||
if (score === 2)
|
||||
return "Good";
|
||||
if (score >= 40)
|
||||
if (score === 1)
|
||||
return "Weak";
|
||||
if (score >= 10)
|
||||
return "Very weak";
|
||||
if (score < 10 && score > 1)
|
||||
if (score === 0)
|
||||
return "Extremely weak";
|
||||
return "";
|
||||
}
|
||||
function getStrengthColor(pass) {
|
||||
var score = scorePassword(pass);
|
||||
if (score >= 80)
|
||||
|
||||
function getStrengthColor(score) {
|
||||
if (score === 4)
|
||||
return "#390";
|
||||
if (score >= 70)
|
||||
if (score === 3)
|
||||
return "#3C0";
|
||||
if (score >= 50)
|
||||
if (score === 2)
|
||||
return "#399";
|
||||
if (score >= 40)
|
||||
return "#F60";
|
||||
if (score >= 10)
|
||||
if (score === 1)
|
||||
return "#E00";
|
||||
if (score < 10)
|
||||
if (score === 0)
|
||||
return "#C00";
|
||||
return "#999";
|
||||
}
|
||||
function checkIfPasswordsMatch(pwField1, pwField2) {
|
||||
|
||||
function checkIfPasswordsMatch(password1, password2) {
|
||||
var pwMatch = $("#pw_match");
|
||||
if ($(pwField1).val() === $(pwField2).val() && $(pwField1).val() !== "" && $(pwField2).val() !== "") {
|
||||
if (password1 === password2 && password1 !== "" && password2 !== "") {
|
||||
$(pwMatch).text("Passwords match!");
|
||||
$(pwMatch).css("color", "#390");
|
||||
} else if ($(pwField1).val() === "" || $(pwField2).val() === "") {
|
||||
} else if (password1 === "" || password2 === "") {
|
||||
$(pwMatch).text("");
|
||||
} else {
|
||||
$(pwMatch).text("Passwords don't match!");
|
||||
$(pwMatch).css("color", "#399");
|
||||
}
|
||||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
var pwField1 = $("#pw_field");
|
||||
var pwField2 = $("#pw_field2");
|
||||
|
||||
if(pwField1.length > 0 && pwField2.length > 0){
|
||||
(function(){var a;a=function(){var a,b;b=document.createElement("script");b.src=zxcvbnPath;b.type="text/javascript";b.async=!0;a=document.getElementsByTagName("script")[0];return a.parentNode.insertBefore(b,a)};null!=window.attachEvent?window.attachEvent("onload",a):window.addEventListener("load",a,!1)}).call(this);
|
||||
}
|
||||
|
||||
$(pwField1).add(pwField2).on("keypress keyup keydown", function() {
|
||||
var fieldValue = $(pwField1).val();
|
||||
var password1 = $(pwField1).val();
|
||||
var password2 = $(pwField2).val();
|
||||
|
||||
var pwStrength = $("#pw_strength");
|
||||
pwStrength.text(checkPassStrength(fieldValue));
|
||||
pwStrength.css("color", getStrengthColor(fieldValue));
|
||||
checkIfPasswordsMatch(pwField1, pwField2);
|
||||
var score = calcScore(password1);
|
||||
pwStrength.text(getPassStrength(score));
|
||||
pwStrength.css("color", getStrengthColor(score));
|
||||
checkIfPasswordsMatch(password1, password2);
|
||||
});
|
||||
});
|
||||
20
public/site_assets/mpos/js/zxcvbn/LICENSE.txt
Normal file
20
public/site_assets/mpos/js/zxcvbn/LICENSE.txt
Normal file
@ -0,0 +1,20 @@
|
||||
Copyright (c) 2012 Dropbox, Inc.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
1
public/site_assets/mpos/js/zxcvbn/zxcvbn-async.js
Normal file
1
public/site_assets/mpos/js/zxcvbn/zxcvbn-async.js
Normal file
@ -0,0 +1 @@
|
||||
(function(){var a;a=function(){var a,b;b=document.createElement("script");b.src="http://dl.dropbox.com/u/209/zxcvbn/zxcvbn.js";b.type="text/javascript";b.async=!0;a=document.getElementsByTagName("script")[0];return a.parentNode.insertBefore(b,a)};null!=window.attachEvent?window.attachEvent("onload",a):window.addEventListener("load",a,!1)}).call(this);
|
||||
43
public/site_assets/mpos/js/zxcvbn/zxcvbn.js
Normal file
43
public/site_assets/mpos/js/zxcvbn/zxcvbn.js
Normal file
File diff suppressed because one or more lines are too long
@ -29,6 +29,9 @@
|
||||
<script type="text/javascript" src="{$PATH}/js/tinybox.js"></script>
|
||||
<script type="text/javascript" src="{$PATH}/../global/js/number_format.js"></script>
|
||||
<!--[if IE]><script type="text/javascript" src="{$PATH}/js/excanvas.js"></script><![endif]-->
|
||||
{literal}<script>
|
||||
var zxcvbnPath = "{/literal}{$PATH}{literal}/js/zxcvbn/zxcvbn.js";
|
||||
</script>{/literal}
|
||||
<script type="text/javascript" src="{$PATH}/js/pwcheck.js"></script>
|
||||
{if $GLOBAL.statistics.analytics.enabled}
|
||||
{$GLOBAL.statistics.analytics.code nofilter}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user