Files
BeWoPlaner/BeWoPlanerMobil/Scripts/ownSoft-Scripts/utils/password-security.js
Lyndon Jetten 5abd684b0b Unterschriftenstatus zur ServiceRecordHistory hinzugefügt
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.
2023-10-25 21:52:23 +02:00

327 lines
10 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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;
}
}
}