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": "Powtórz hasło",
"usernamePlaceholder": "Nazwa użytkownika",
"emailPlaceholder": "E-mail",
"passwordPlaceholder": "Hasło (min. 12 znaków)",
"passwordPlaceholder": "Hasło (min. {min} znaków)",
"confirmPasswordPlaceholder": "Powtórz hasło",
"selectOutfit": "Wybierz swój strój",
"termsAccept": "Mam ukończone 18 lat i akceptuję warunki i zasady hotelu {hotel}.",
@@ -897,7 +897,7 @@
"termsError": "Aby się zarejestrować, musisz zaakceptować regulamin.",
"usernameError": "Nazwa użytkownika jest wymagana.",
"emailError": "Wymagany jest prawidłowy adres e-mail.",
"passwordError": "Hasło musi mieć co najmniej 12 znaków",
"passwordError": "Hasło musi mieć co najmniej {min} znaków",
"confirmPasswordError": "Hasła nie pasują.",
"termsRequired": "Musisz zaakceptować warunki i zasady.",
"usernameRequired": "Nazwa użytkownika jest wymagana.",
@@ -920,7 +920,7 @@
"strengthFair": "Średnie",
"strengthGood": "Dobre",
"strengthStrong": "Silne",
"passwordMinLength": "Hasło musi mieć co najmniej 12 znaków",
"passwordMinLength": "Hasło musi mieć co najmniej {min} znaków",
"passwordUpper": "Hasło musi zawierać co najmniej jedną wielką literę",
"passwordLower": "Hasło musi zawierać co najmniej jedną małą literę",
"passwordDigit": "Hasło musi zawierać co najmniej jedną cyfrę",
@@ -955,10 +955,10 @@
"reset": {
"title": "Ustaw nowe hasło",
"subtitle": "Wybierz silne hasło, którego nie używasz gdzie indziej.",
"passwordPlaceholder": "Nowe hasło (min. 12 znaków)",
"passwordPlaceholder": "Nowe hasło (min. {min} znaków)",
"resetPassword": "Zresetuj hasło",
"backToLogin": "Powrót do logowania",
"passwordMinLength": "Hasło musi mieć co najmniej 12 znaków",
"passwordMinLength": "Hasło musi mieć co najmniej {min} znaków",
"tooManyAttempts": "Zbyt wiele prób — spróbuj później",
"invalidLink": "Ten link resetujący jest nieprawidłowy lub wygasł. Poproś o nowy.",
"failed": "Nie udało się zresetować hasła. Spróbuj ponownie."