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
2026-10-18 19:20:38 +02:00
parent aef0939ee9
commit 9cf1eb615c
36 changed files with 227 additions and 143 deletions
+5 -5
View File
@@ -885,7 +885,7 @@
"confirmPassword": "Поновите лозинку",
"usernamePlaceholder": "Корисничко име",
"emailPlaceholder": "Емаил",
"passwordPlaceholder": "Лозинка (мин 12 знакова)",
"passwordPlaceholder": "Лозинка (мин {min} знакова)",
"confirmPasswordPlaceholder": "Поновите лозинку",
"selectOutfit": "Изаберите своју одећу",
"termsAccept": "I am 18+ and accept the {hotel} terms & rules.",
@@ -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": "Лозинка није могла бити ресетована. Покушајте поново."