TypeScript 98.3%
CSS 0.9%
Shell 0.7%
1import bcrypt from "bcryptjs";23const FORBIDDEN = new Set(["admin123", "password", "motdepasse", "12345678", "azertyuiop"]);45export function hashPassword(plain: string): string {6 return bcrypt.hashSync(plain, 12);7}89export function verifyPassword(plain: string, hash: string): boolean {10 return bcrypt.compareSync(plain, hash);11}1213/** Politique de mot de passe. Retourne null si valide, sinon le message d'erreur. */14export function passwordPolicyError(plain: string, opts?: { allowInitial?: boolean }): string | null {15 if (opts?.allowInitial) return null; // seed initial seulement16 if (plain.length < 10) return "Le mot de passe doit contenir au moins 10 caractères.";17 if (FORBIDDEN.has(plain.toLowerCase()))18 return "Ce mot de passe est trop courant — choisissez-en un autre.";19 return null;20}21