added blockInsecureCommonPasswords config flag

This commit is contained in:
xnacly 2021-02-03 19:54:12 +01:00
parent 3e6481c7d9
commit e63f127a56
2 changed files with 27 additions and 13 deletions

View File

@ -72,10 +72,11 @@ export interface DefaultOptions {
allowNewRegistration: boolean; allowNewRegistration: boolean;
allowMultipleAccounts: boolean; allowMultipleAccounts: boolean;
password: { password: {
pwMinLength: number; minLength: number;
pwMinNumbers: number; minNumbers: number;
pwMinUpperCase: number; minUpperCase: number;
pwMinSymbols: number; minSymbols: number;
blockInsecureCommonPasswords: boolean; // TODO: efficiently save password blocklist in database
}; };
}; };
} }
@ -141,10 +142,11 @@ export const DefaultOptions: DefaultOptions = {
allowNewRegistration: true, allowNewRegistration: true,
allowMultipleAccounts: true, allowMultipleAccounts: true,
password: { password: {
pwMinLength: 8, minLength: 8,
pwMinNumbers: 2, minNumbers: 2,
pwMinUpperCase: 2, minUpperCase: 2,
pwMinSymbols: 0, minSymbols: 0,
blockInsecureCommonPasswords: false,
}, },
}, },
}; };

View File

@ -5,6 +5,7 @@ const reNUMBER = /[0-9]/g;
const reUPPERCASELETTER = /[A-Z]/g; const reUPPERCASELETTER = /[A-Z]/g;
const reSYMBOLS = /[A-Z,a-z,0-9]/g; const reSYMBOLS = /[A-Z,a-z,0-9]/g;
const blocklist: string[] = []; // TODO: update ones passwordblocklist is stored in db
/* /*
* https://en.wikipedia.org/wiki/Password_policy * https://en.wikipedia.org/wiki/Password_policy
* password must meet following criteria, to be perfect: * password must meet following criteria, to be perfect:
@ -16,26 +17,32 @@ const reSYMBOLS = /[A-Z,a-z,0-9]/g;
* Returns: 0 > pw > 1 * Returns: 0 > pw > 1
*/ */
export function check(password: string): number { export function check(password: string): number {
const { pwMinLength, pwMinNumbers, pwMinUpperCase, pwMinSymbols } = Config.get().register.password; const {
minLength,
minNumbers,
minUpperCase,
minSymbols,
blockInsecureCommonPasswords,
} = Config.get().register.password;
var strength = 0; var strength = 0;
// checks for total password len // checks for total password len
if (password.length >= pwMinLength - 1) { if (password.length >= minLength - 1) {
strength += 0.25; strength += 0.25;
} }
// checks for amount of Numbers // checks for amount of Numbers
if (password.count(reNUMBER) >= pwMinNumbers - 1) { if (password.count(reNUMBER) >= minNumbers - 1) {
strength += 0.25; strength += 0.25;
} }
// checks for amount of Uppercase Letters // checks for amount of Uppercase Letters
if (password.count(reUPPERCASELETTER) >= pwMinUpperCase - 1) { if (password.count(reUPPERCASELETTER) >= minUpperCase - 1) {
strength += 0.25; strength += 0.25;
} }
// checks for amount of symbols // checks for amount of symbols
if (password.replace(reSYMBOLS, "").length >= pwMinSymbols - 1) { if (password.replace(reSYMBOLS, "").length >= minSymbols - 1) {
strength += 0.25; strength += 0.25;
} }
@ -44,5 +51,10 @@ export function check(password: string): number {
strength = 0; strength = 0;
} }
if (blockInsecureCommonPasswords) {
if (blocklist.includes(password)) {
strength = 0;
}
}
return strength; return strength;
} }