Frommen: Quittierungsbeleg angepasst; die Unterschriftengrafiken sind jetzt größer Fehler von Tempusdominus bei den Zeitfeldern des MoKs behoben. Quittierungsbelegmodul im MoK: Legende der Symbole hinzugefügt Validierung von Gruppenbuchungen im MoK verbessert.
327 lines
10 KiB
JavaScript
327 lines
10 KiB
JavaScript
class PasswordSecurity {
|
||
numbers = "0123456789";
|
||
lowercaseLetters = "abcdefghijklmnopqrstuvwxyz";
|
||
uppercaseLetters = "ABDEFGHIJKLMNOPQRSTUVWXYZ";
|
||
lowercaseUmlauts = "äöüß";
|
||
uppercaseUmlauts = "ÄÖÜ";
|
||
specialChars1 = "\\\"\'µ@€!";
|
||
specialChars2 = "&/()=?+*";
|
||
specialChars3 = ",.-;:_><|";
|
||
specialChars4 = "§$%'{[]}´";
|
||
specialChars5 = "`^°~²³";
|
||
|
||
isPartial = false;
|
||
partialPassword = "";
|
||
passwordLengthDifference = 0;
|
||
score = 0;
|
||
previousValue = 0;
|
||
schalter = false;
|
||
previousValues = [];
|
||
|
||
passwordLabelId = "";
|
||
|
||
constructor(pwLabelId) {
|
||
this.passwordLabelId = pwLabelId;
|
||
}
|
||
|
||
validatePassword(password) {
|
||
if (false === isUndefinedOrNull(password) && password.length > 0) {
|
||
var sx = "";
|
||
var passwordStrength = -1;
|
||
|
||
for (var i = 0; i < password.length; i++) {
|
||
sx += password[i];
|
||
|
||
if (sx.length < this.partialPassword.length) {
|
||
this.isPartial = true;
|
||
this.passwordLengthDifference = this.partialPassword.length - sx.length;
|
||
}
|
||
|
||
if (this.partialPassword !== sx) {
|
||
this.partialPassword = sx;
|
||
}
|
||
|
||
passwordStrength = this.calculatePasswordStrength(sx);
|
||
}
|
||
|
||
this.displayPasswordStrength(passwordStrength);
|
||
return;
|
||
}
|
||
|
||
this.score = 0;
|
||
this.previousValue = 0;
|
||
|
||
this.displayPasswordStrength(-1);
|
||
}
|
||
|
||
getIntegerFromArray(arr, index) {
|
||
if (arr === undefined || arr === null || arr.length < index) {
|
||
return 0;
|
||
}
|
||
|
||
var intValue = $.parseInt(arr[index], 10);
|
||
|
||
return $.isNumeric(intValue) ? intValue : 0;
|
||
}
|
||
|
||
getLastValue() {
|
||
if (this.previousValues === undefined || this.previousValues === null || this.previousValues.length === 0) {
|
||
return 0;
|
||
}
|
||
|
||
return this.previousValues[this.previousValues.length - 1];
|
||
}
|
||
|
||
calculatePasswordStrength(passwordToValidate) {
|
||
var passwordStrength = 0;
|
||
this.previousValue = 0;
|
||
|
||
if (this.isPartial === true) {
|
||
if (this.passwordLengthDifference === 1) {
|
||
this.score -= this.getLastValue();
|
||
this.previousValues.pop();
|
||
} else {
|
||
for (var i = 0; i < this.passwordLengthDifference; i++) {
|
||
this.score -= this.getLastValue();
|
||
this.previousValues.pop();
|
||
}
|
||
}
|
||
|
||
this.isPartial = false;
|
||
} else {
|
||
var passwordLength = passwordToValidate.length;
|
||
|
||
if (passwordLength >= 6 && passwordLength < 9) {
|
||
this.score += 1;
|
||
this.previousValue = 1;
|
||
this.schalter = true;
|
||
}
|
||
|
||
if (passwordLength >= 9 && passwordLength < 12) {
|
||
this.score += 2;
|
||
this.previousValue = 2;
|
||
this.schalter = true;
|
||
}
|
||
|
||
if (passwordLength >= 12 && passwordLength < 18) {
|
||
this.score += 3;
|
||
this.previousValue = 3;
|
||
this.schalter = true;
|
||
}
|
||
|
||
if (passwordLength >= 18) {
|
||
this.score += 4;
|
||
this.previousValue = 4;
|
||
this.schalter = true;
|
||
}
|
||
|
||
var passwordAsArray = Array.from(passwordToValidate);
|
||
|
||
// Zahlen
|
||
var containsNumbers = false;
|
||
for (var i = 0; i < passwordAsArray.length; i++) {
|
||
if (this.numbers.includes(passwordAsArray[i])) {
|
||
containsNumbers = true;
|
||
break;
|
||
}
|
||
}
|
||
|
||
// Kleinbuchstaben
|
||
var containsLowercaseLetters = false;
|
||
for (var i = 0; i < passwordAsArray.length; i++) {
|
||
if (this.lowercaseLetters.includes(passwordAsArray[i])) {
|
||
containsLowercaseLetters = true;
|
||
break;
|
||
}
|
||
}
|
||
|
||
// Großbuchstaben
|
||
var containsUppercaseLetters = false;
|
||
for (var i = 0; i < passwordAsArray.length; i++) {
|
||
if (this.uppercaseLetters.includes(passwordAsArray[i])) {
|
||
containsUppercaseLetters = true;
|
||
break;
|
||
}
|
||
}
|
||
|
||
// Kleinumlaute
|
||
var containsLowercaseUmlauts = false;
|
||
for (var i = 0; i < passwordAsArray.length; i++) {
|
||
if (this.lowercaseUmlauts.includes(passwordAsArray[i])) {
|
||
containsLowercaseUmlauts = true;
|
||
break;
|
||
}
|
||
}
|
||
|
||
// Großumlaute
|
||
var containsUppercaseUmlauts = false;
|
||
for (var i = 0; i < passwordAsArray.length; i++) {
|
||
if (this.uppercaseUmlauts.includes(passwordAsArray[i])) {
|
||
containsUppercaseUmlauts = true;
|
||
break;
|
||
}
|
||
}
|
||
|
||
// Sonderzeichen 1
|
||
var containsSpecialCharacters1 = false;
|
||
for (var i = 0; i < passwordAsArray.length; i++) {
|
||
if (this.specialChars1.includes(passwordAsArray[i])) {
|
||
containsSpecialCharacters1 = true;
|
||
break;
|
||
}
|
||
}
|
||
|
||
var containsSpecialCharacters2 = false;
|
||
for (var i = 0; i < passwordAsArray.length; i++) {
|
||
if (this.specialChars2.includes(passwordAsArray[i])) {
|
||
containsSpecialCharacters2 = true;
|
||
break;
|
||
}
|
||
}
|
||
|
||
var containsSpecialCharacters3 = false;
|
||
for (var i = 0; i < passwordAsArray.length; i++) {
|
||
if (this.specialChars3.includes(passwordAsArray[i])) {
|
||
containsSpecialCharacters3 = true;
|
||
break;
|
||
}
|
||
}
|
||
|
||
var containsSpecialCharacters4 = false;
|
||
for (var i = 0; i < passwordAsArray.length; i++) {
|
||
if (this.specialChars4.includes(passwordAsArray[i])) {
|
||
containsSpecialCharacters4 = true;
|
||
break;
|
||
}
|
||
}
|
||
|
||
var containsSpecialCharacters5 = false;
|
||
for (var i = 0; i < passwordAsArray.length; i++) {
|
||
if (this.specialChars5.includes(passwordAsArray[i])) {
|
||
containsSpecialCharacters5 = true;
|
||
break;
|
||
}
|
||
}
|
||
|
||
if (containsNumbers === true) {
|
||
this.addScoreValue(3);
|
||
}
|
||
|
||
if (containsLowercaseLetters === true) {
|
||
this.addScoreValue(2);
|
||
}
|
||
|
||
if (containsUppercaseLetters === true) {
|
||
this.addScoreValue(3);
|
||
}
|
||
|
||
if (containsLowercaseUmlauts === true) {
|
||
this.addScoreValue(2);
|
||
}
|
||
|
||
if (containsUppercaseUmlauts === true) {
|
||
this.addScoreValue(2);
|
||
}
|
||
|
||
if (containsSpecialCharacters1 === true) {
|
||
this.addScoreValue(4);
|
||
}
|
||
|
||
if (containsSpecialCharacters2 === true) {
|
||
this.addScoreValue(4);
|
||
}
|
||
|
||
if (containsSpecialCharacters3 === true) {
|
||
this.addScoreValue(4);
|
||
}
|
||
|
||
if (containsSpecialCharacters4 === true) {
|
||
this.addScoreValue(4);
|
||
}
|
||
|
||
if (containsSpecialCharacters5 === true) {
|
||
this.addScoreValue(4);
|
||
}
|
||
|
||
this.previousValues.push(this.previousValue);
|
||
}
|
||
|
||
if (this.score <= 15) {
|
||
passwordStrength = 0;
|
||
}
|
||
|
||
if (this.score > 15 && this.score <= 55) {
|
||
passwordStrength = 1;
|
||
}
|
||
|
||
if (this.score > 55 && this.score <= 115) {
|
||
passwordStrength = 2;
|
||
}
|
||
|
||
if (this.score > 115 && this.score <= 155) {
|
||
passwordStrength = 3;
|
||
}
|
||
|
||
if (this.score > 155) {
|
||
passwordStrength = 4;
|
||
}
|
||
|
||
return passwordStrength;
|
||
}
|
||
|
||
addScoreValue(defaultValue) {
|
||
if (defaultValue === undefined || defaultValue === null || false === $.isNumeric(defaultValue)) {
|
||
return;
|
||
}
|
||
|
||
this.score += defaultValue;
|
||
|
||
if (this.schalter === true) {
|
||
this.previousValue += defaultValue;
|
||
} else {
|
||
this.previousValue = defaultValue;
|
||
}
|
||
}
|
||
|
||
displayPasswordStrength(passwordStrength) {
|
||
var passwordLabel = $("#" + this.passwordLabelId);
|
||
|
||
if (passwordStrength === undefined || !$.isNumeric(passwordStrength) || !passwordLabel.length) {
|
||
return;
|
||
}
|
||
|
||
passwordLabel.removeClass("text-success text-danger text-warning");
|
||
|
||
switch (passwordStrength) {
|
||
case -1:
|
||
passwordLabel.addClass("d-none");
|
||
passwordLabel.html("");
|
||
break;
|
||
case 0:
|
||
passwordLabel.removeClass("d-none");
|
||
passwordLabel.html("Passwortstärke: Sehr schwach");
|
||
passwordLabel.addClass("text-danger");
|
||
break;
|
||
case 1:
|
||
passwordLabel.removeClass("d-none");
|
||
passwordLabel.html("Passwortstärke: Schwach");
|
||
passwordLabel.addClass("text-danger");
|
||
break;
|
||
case 2:
|
||
passwordLabel.removeClass("d-none");
|
||
passwordLabel.html("Passwortstärke: Mittel");
|
||
passwordLabel.addClass("text-warning");
|
||
break;
|
||
case 3:
|
||
passwordLabel.removeClass("d-none");
|
||
passwordLabel.html("Passwortstärke: Stark");
|
||
passwordLabel.addClass("text-success");
|
||
break;
|
||
case 4:
|
||
passwordLabel.removeClass("d-none");
|
||
passwordLabel.html("Passwortstärke: Sehr stark");
|
||
passwordLabel.addClass("text-success");
|
||
break;
|
||
}
|
||
}
|
||
} |