/***************************************************************************
- * Copyright (C) 2003-2009 Polytechnique.org *
+ * Copyright (C) 2003-2010 Polytechnique.org *
* http://opensource.polytechnique.org/ *
* *
* This program is free software; you can redistribute it and/or modify *
// {{{ function checkPassword
-function getType(char) {
- if (char >= 'a' && char <= 'z') {
+function getType(c) {
+ if (c >= 'a' && c <= 'z') {
return 1;
- } else if (char >= 'A' && char <= 'Z') {
+ } else if (c >= 'A' && c <= 'Z') {
return 2;
- } else if (char >= '0' && char <= '9') {
+ } else if (c >= '0' && c <= '9') {
return 3;
} else {
return 4;
}
}
-function checkPassword(box, okLabel) {
+function differentTypes(password) {
var prev = 0;
+
+ for (i = 0 ; i < password.length ; ++i) {
+ var type = getType(password.charAt(i));
+ if (prev != 0 && prev != type) {
+ return true;
+ }
+ prev = type;
+ }
+ return false;
+}
+
+function passwordStrength(password) {
var prop = 0;
- var pass = box.value;
- var types = Array(0, 0, 0, 0, 0);
+ var prev = 0;
var firstType = true;
- for (i = 0 ; i < pass.length ; ++i) {
- type = getType(pass.charAt(i));
+ var types = Array(0, 0, 0, 0, 0);
+
+ for (i = 0 ; i < password.length ; ++i) {
+ var type = getType(password.charAt(i));
if (prev != 0 && prev != type) {
prop += 5;
+ firstType = false;
}
prop += i;
if (types[type] == 0 && !firstType) {
prop += 15;
- } else {
- firstType = false;
}
types[type]++;
prev = type;
}
- if (pass.length < 6) {
+ if (password.length < 6) {
+ prop *= 0.75;
+ }
+ if (firstType) {
prop *= 0.75;
}
if (prop > 100) {
} else if (prop < 0) {
prop = 0;
}
+
+ return prop;
+}
+
+function checkPassword(box, okLabel) {
+ var password = box.value;
+ var prop = passwordStrength(password);
+
if (prop >= 60) {
color = "#4f4";
bgcolor = "#050";
ok = true;
- } else if (prop >= 40) {
+ } else if (prop >= 35) {
color = "#ff4";
bgcolor = "#750";
ok = true;
}, 750)
.parent().stop()
.animate({ backgroundColor: bgcolor }, 750);
- var submitButton = $(":submit[@name='" + passwordprompt_submit + "']");
- if (ok && pass.length >= 6) {
+ var submitButton = $(":submit[name='" + passwordprompt_submit + "']");
+ if (ok && password.length >= 6 && differentTypes(password)) {
submitButton.attr("value", okLabel);
submitButton.removeAttr("disabled");
} else {