feat(auth): make password length configurable via env (min 5–30, max 30–128)

Add PASSWORD_MIN_LENGTH / PASSWORD_MAX_LENGTH (validated in src/env.ts) and a
shared passwordPolicy helper. The policy drives the zod schemas in register,
password reset and the admin create-user dialog, plus the live requirement
checks and strength meter in the register form.

Locale messages now interpolate the configured minimum via {min} instead of
hard-coding 12.
This commit is contained in:
openhands committed 2026-10-18 19:20:38 +02:00
1 parent aef0939ee9
commit 9cf1eb615c
36 files changed
+227 -143

No files matched your search

+5 -5
View File
@@ -885,7 +885,7 @@
"confirmPassword": "Повторіть пароль",
"usernamePlaceholder": "Ім'я користувача",
"emailPlaceholder": "Електронна пошта",
"passwordPlaceholder": "Пароль (мінімум 12 символів)",
"passwordPlaceholder": "Пароль (мінімум {min} символів)",
"confirmPasswordPlaceholder": "Повторіть пароль",
"selectOutfit": "Виберіть свій наряд",
"termsAccept": "Мені 18+ і я приймаю умови та правила {hotel}.",
@@ -897,7 +897,7 @@
"termsError": "Ви повинні прийняти умови та правила, щоб зареєструватися.",
"usernameError": "Потрібно ввести ім'я користувача.",
"emailError": "Потрібна дійсна електронна адреса.",
"passwordError": "Пароль має містити щонайменше 12 символів",
"passwordError": "Пароль має містити щонайменше {min} символів",
"confirmPasswordError": "Паролі не збігаються.",
"termsRequired": "Ви повинні прийняти умови та правила.",
"usernameRequired": "Потрібно ввести ім'я користувача.",
@@ -920,7 +920,7 @@
"strengthFair": "Середній",
"strengthGood": "Добрий",
"strengthStrong": "Надійний",
"passwordMinLength": "Пароль має містити щонайменше 12 символів",
"passwordMinLength": "Пароль має містити щонайменше {min} символів",
"passwordUpper": "Пароль має містити хоча б одну велику літеру",
"passwordLower": "Пароль має містити хоча б одну малу літеру",
"passwordDigit": "Пароль має містити хоча б одну цифру",
@@ -955,10 +955,10 @@
"reset": {
"title": "Встановіть новий пароль",
"subtitle": "Виберіть надійний пароль, який більше не використовується.",
"passwordPlaceholder": "Новий пароль (мінімум 12 символів)",
"passwordPlaceholder": "Новий пароль (мінімум {min} символів)",
"resetPassword": "Скинути пароль",
"backToLogin": "Назад до входу",
"passwordMinLength": "Пароль має містити щонайменше 12 символів",
"passwordMinLength": "Пароль має містити щонайменше {min} символів",
"tooManyAttempts": "Забагато спроб — спробуйте пізніше",
"invalidLink": "Це посилання для скидання недійсне або прострочене. Запросіть нове.",
"failed": "Не вдалося скинути пароль. Спробуйте ще раз."