mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-06-19 21:31:46 +00:00
b88a8fcbb5
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
29 lines
1.3 KiB
TypeScript
29 lines
1.3 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 };
|
|
}
|