Spaces:
Build error
Build error
| import argon2 from 'argon2'; | |
| import { config } from '@config/index.js'; | |
| export async function hashPassword(password: string): Promise<string> { | |
| return argon2.hash(password, { | |
| type: argon2.argon2id, | |
| memoryCost: config.ARGON2_MEMORY, | |
| timeCost: config.ARGON2_ITERATIONS, | |
| parallelism: config.ARGON2_PARALLELISM, | |
| }); | |
| } | |
| export async function verifyPassword(hash: string, password: string): Promise<boolean> { | |
| try { | |
| return await argon2.verify(hash, password); | |
| } catch { | |
| return false; | |
| } | |
| } | |
| export function validatePasswordStrength(password: string): { valid: boolean; errors: string[] } { | |
| const errors: string[] = []; | |
| if (password.length < 8) { | |
| errors.push('Password must be at least 8 characters'); | |
| } | |
| if (password.length > 16) { | |
| errors.push('Password must not exceed 16 characters'); | |
| } | |
| if (!/[A-Z]/.test(password)) { | |
| errors.push('Password must contain at least one uppercase letter'); | |
| } | |
| if (!/[a-z]/.test(password)) { | |
| errors.push('Password must contain at least one lowercase letter'); | |
| } | |
| if (!/[0-9]/.test(password)) { | |
| errors.push('Password must contain at least one number'); | |
| } | |
| if (!/[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]/.test(password)) { | |
| errors.push('Password must contain at least one special character'); | |
| } | |
| return { valid: errors.length === 0, errors }; | |
| } |