mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-06-21 22:31:46 +00:00
54 lines
1.4 KiB
TypeScript
54 lines
1.4 KiB
TypeScript
const COMMON_PASSWORDS = new Set([
|
|
'password',
|
|
'12345678',
|
|
'123456789',
|
|
'1234567890',
|
|
'password1',
|
|
'qwerty123',
|
|
'iloveyou',
|
|
'admin123',
|
|
'letmein12',
|
|
'welcome1',
|
|
'monkey123',
|
|
'dragon12',
|
|
'master12',
|
|
'qwerty12',
|
|
'abc12345',
|
|
'trustno1',
|
|
'baseball',
|
|
'football',
|
|
'shadow12',
|
|
'michael1',
|
|
'jennifer',
|
|
'superman',
|
|
'abcdefgh',
|
|
'abcd1234',
|
|
'password123',
|
|
'admin1234',
|
|
'changeme',
|
|
'welcome123',
|
|
'passw0rd',
|
|
'p@ssword',
|
|
]);
|
|
|
|
export function validatePassword(password: string): { ok: boolean; reason?: string } {
|
|
if (password.length < 8) return { ok: false, reason: 'Password must be at least 8 characters' };
|
|
|
|
if (/^(.)\1+$/.test(password)) {
|
|
return { ok: false, reason: 'Password is too repetitive' };
|
|
}
|
|
|
|
if (COMMON_PASSWORDS.has(password.toLowerCase())) {
|
|
return { ok: false, reason: 'Password is too common. Please choose a unique password.' };
|
|
}
|
|
|
|
const requirementsMessage =
|
|
'Password must contain at least one uppercase letter, one lowercase letter, one number, and one special character';
|
|
if (!/[A-Z]/.test(password)) return { ok: false, reason: requirementsMessage };
|
|
if (!/[a-z]/.test(password)) return { ok: false, reason: requirementsMessage };
|
|
if (!/[0-9]/.test(password)) return { ok: false, reason: requirementsMessage };
|
|
if (!/[^A-Za-z0-9]/.test(password)) return { ok: false, reason: requirementsMessage };
|
|
|
|
return { ok: true };
|
|
}
|