From cfa3d013a48f0c1e44e11509f5d179e68a616147 Mon Sep 17 00:00:00 2001 From: Sujoy B <70602535+sujoysb@users.noreply.github.com> Date: Thu, 23 May 2024 04:07:36 -0400 Subject: [PATCH] feat: show max password length in complexity components (#7810) # Which Problems Are Solved There is confusing ambiguity in the error messages for setting too long passwords in different places. # How the Problems Are Solved A check for maximum password length is added so it's clear that passwords can't exceed a maximum length of 70 or 72 bytes. Password validation now provides a live updating check mark or cross mark to indicate if the maximum length requirement is met. # Additional Changes Clarified requirement descriptions on the registration page with complete sentences. # Additional Context Closes #6301 --------- Co-authored-by: Elio Bischof --- .../password-complexity-view.component.html | 8 +++++++ console/src/assets/i18n/bg.json | 4 +++- console/src/assets/i18n/cs.json | 4 +++- console/src/assets/i18n/de.json | 4 +++- console/src/assets/i18n/en.json | 8 ++++--- console/src/assets/i18n/es.json | 4 +++- console/src/assets/i18n/fr.json | 4 +++- console/src/assets/i18n/it.json | 4 +++- console/src/assets/i18n/ja.json | 4 +++- console/src/assets/i18n/mk.json | 4 +++- console/src/assets/i18n/nl.json | 4 +++- console/src/assets/i18n/pl.json | 4 +++- console/src/assets/i18n/pt.json | 4 +++- console/src/assets/i18n/ru.json | 4 +++- console/src/assets/i18n/zh.json | 4 +++- internal/api/ui/login/static/i18n/bg.yaml | 23 ++++++++++-------- internal/api/ui/login/static/i18n/cs.yaml | 14 ++++++----- internal/api/ui/login/static/i18n/de.yaml | 18 +++++++------- internal/api/ui/login/static/i18n/en.yaml | 14 ++++++----- internal/api/ui/login/static/i18n/es.yaml | 22 +++++++++-------- internal/api/ui/login/static/i18n/fr.yaml | 14 ++++++----- internal/api/ui/login/static/i18n/it.yaml | 18 +++++++------- internal/api/ui/login/static/i18n/ja.yaml | 20 +++++++++------- internal/api/ui/login/static/i18n/mk.yaml | 20 +++++++++------- internal/api/ui/login/static/i18n/nl.yaml | 16 +++++++------ internal/api/ui/login/static/i18n/pl.yaml | 20 +++++++++------- internal/api/ui/login/static/i18n/pt.yaml | 20 +++++++++------- internal/api/ui/login/static/i18n/ru.yaml | 22 +++++++++-------- internal/api/ui/login/static/i18n/zh.yaml | 20 +++++++++------- .../scripts/password_policy_check.js | 24 +++++++++++++++++++ .../templates/password_complexity_policy.html | 3 ++- 31 files changed, 223 insertions(+), 133 deletions(-) diff --git a/console/src/app/modules/password-complexity-view/password-complexity-view.component.html b/console/src/app/modules/password-complexity-view/password-complexity-view.component.html index 7183bff70..0a5649dab 100644 --- a/console/src/app/modules/password-complexity-view/password-complexity-view.component.html +++ b/console/src/app/modules/password-complexity-view/password-complexity-view.component.html @@ -50,4 +50,12 @@ {{ 'ERRORS.LOWERCASEMISSING' | translate }} +
+ + + + {{ 'USER.PASSWORD.MAXLENGTHERROR' | translate: { value: 70 } }} ({{ password?.value?.length }}/{{ 70 }}) + +
diff --git a/console/src/assets/i18n/bg.json b/console/src/assets/i18n/bg.json index 7da4e58dc..4a1131920 100644 --- a/console/src/assets/i18n/bg.json +++ b/console/src/assets/i18n/bg.json @@ -588,6 +588,7 @@ "INVALID_FORMAT": "Форматирането е невалидно.", "NOTANEMAIL": "Дадената стойност не е имейл адрес.", "MINLENGTH": "Трябва да е поне {{requiredLength}} знака дълги.", + "MAXLENGTH": "Трябва да е по-малко от {{requiredLength}} символа", "UPPERCASEMISSING": "Трябва да включва главна буква.", "LOWERCASEMISSING": "Трябва да включва малка буква.", "SYMBOLERROR": "Трябва да включва символ или препинателен знак.", @@ -873,7 +874,8 @@ "SET": "Задайте нова парола", "RESENDNOTIFICATION": "Изпратете връзка за повторно задаване на парола", "REQUIRED": "Някои задължителни полета липсват.", - "MINLENGTHERROR": "Трябва да бъде поне {{value}} знака дълги." + "MINLENGTHERROR": "Трябва да бъде поне {{value}} знака дълги.", + "MAXLENGTHERROR": "Трябва да съдържа по-малко от {{value}} знака." }, "ID": "документ за самоличност", "EMAIL": "Електронна поща", diff --git a/console/src/assets/i18n/cs.json b/console/src/assets/i18n/cs.json index 3e3f4e3ff..f7b098c09 100644 --- a/console/src/assets/i18n/cs.json +++ b/console/src/assets/i18n/cs.json @@ -595,6 +595,7 @@ "INVALID_FORMAT": "Formát je neplatný.", "NOTANEMAIL": "Zadaná hodnota není e-mailová adresa.", "MINLENGTH": "Musí být dlouhé alespoň {{requiredLength}} znaků.", + "MAXLENGTH": "Musí být kratší než {{requiredLength}} znaků", "UPPERCASEMISSING": "Musí obsahovat velké písmeno.", "LOWERCASEMISSING": "Musí obsahovat malé písmeno.", "SYMBOLERROR": "Musí obsahovat symbol nebo interpunkční znaménko.", @@ -880,7 +881,8 @@ "SET": "Nastavit nové heslo", "RESENDNOTIFICATION": "Odeslat odkaz pro reset hesla", "REQUIRED": "Některá povinná pole nejsou vyplněna.", - "MINLENGTHERROR": "Musí být alespoň {{value}} znaků dlouhé." + "MINLENGTHERROR": "Musí být alespoň {{value}} znaků dlouhé.", + "MAXLENGTHERROR": "Musí být kratší než {{value}} znaků." }, "ID": "ID", "EMAIL": "E-mail", diff --git a/console/src/assets/i18n/de.json b/console/src/assets/i18n/de.json index a49819c24..4c595773c 100644 --- a/console/src/assets/i18n/de.json +++ b/console/src/assets/i18n/de.json @@ -594,6 +594,7 @@ "INVALID_FORMAT": "Das Format is ungültig.", "NOTANEMAIL": "Der eingegebene Wert ist keine E-Mail Adresse.", "MINLENGTH": "Muss mindestens {{requiredLength}} Zeichen lang sein.", + "MAXLENGTH": "Muss weniger als {{requiredLength}} Zeichen enthalten", "UPPERCASEMISSING": "Muss einen Grossbuchstaben beinhalten.", "LOWERCASEMISSING": "Muss einen Kleinbuchstaben beinhalten.", "SYMBOLERROR": "Muss ein Symbol/Satzzeichen beinhalten.", @@ -879,7 +880,8 @@ "SET": "Passwort neu setzen", "RESENDNOTIFICATION": "Email zum Zurücksetzen senden", "REQUIRED": "Bitte prüfe, dass alle notwendigen Felder ausgefüllt sind.", - "MINLENGTHERROR": "Muss mindestens {{value}} Zeichen lang sein." + "MINLENGTHERROR": "Muss mindestens {{value}} Zeichen lang sein.", + "MAXLENGTHERROR": "Muss weniger als {{value}} Zeichen umfassen." }, "ID": "ID", "EMAIL": "E-Mail", diff --git a/console/src/assets/i18n/en.json b/console/src/assets/i18n/en.json index 9f686bbfb..f411faddc 100644 --- a/console/src/assets/i18n/en.json +++ b/console/src/assets/i18n/en.json @@ -595,8 +595,9 @@ "INVALID_FORMAT": "The formatting is invalid.", "NOTANEMAIL": "The given value is not an e-mail address.", "MINLENGTH": "Must be at least {{requiredLength}} characters long.", - "UPPERCASEMISSING": "Must include an uppercase character.", - "LOWERCASEMISSING": "Must include a lowercase character.", + "MAXLENGTH": "Must be less than {{requiredLength}} characters.", + "UPPERCASEMISSING": "Must include an uppercase letter.", + "LOWERCASEMISSING": "Must include a lowercase letter.", "SYMBOLERROR": "Must include a symbol or punctuation mark.", "NUMBERERROR": "Must include a digit.", "PWNOTEQUAL": "The passwords provided do not match.", @@ -880,7 +881,8 @@ "SET": "Set New Password", "RESENDNOTIFICATION": "Send Password Reset Link", "REQUIRED": "Some required fields are missing.", - "MINLENGTHERROR": "Has to be at least {{value}} characters long." + "MINLENGTHERROR": "Must be at least {{value}} characters long.", + "MAXLENGTHERROR": "Must be less than {{value}} characters." }, "ID": "ID", "EMAIL": "E-mail", diff --git a/console/src/assets/i18n/es.json b/console/src/assets/i18n/es.json index e07c0d978..d535f4425 100644 --- a/console/src/assets/i18n/es.json +++ b/console/src/assets/i18n/es.json @@ -595,6 +595,7 @@ "INVALID_FORMAT": "El formato no es valido.", "NOTANEMAIL": "El valor proporcionado no es una dirección de email.", "MINLENGTH": "Debe tener al menos {{requiredLength}} caracteres de longitud.", + "MAXLENGTH": "Debe tener menos de {{requiredLength}} caracteres.", "UPPERCASEMISSING": "Debe incluir un carácter en mayúscula.", "LOWERCASEMISSING": "Debe incluir un carácter en minúscula.", "SYMBOLERROR": "Debe incluir un símbolo o un signo de puntuación.", @@ -880,7 +881,8 @@ "SET": "Establecer nueva contraseña", "RESENDNOTIFICATION": "Enviar enlace para restablecer la contraseña", "REQUIRED": "Faltan algunos campos requeridos.", - "MINLENGTHERROR": "Debe tener al menos {{value}} caracteres de longitud." + "MINLENGTHERROR": "Debe tener al menos {{value}} caracteres de longitud.", + "MAXLENGTHERROR": "Debe tener menos de {{value}} caracteres" }, "ID": "ID", "EMAIL": "Email", diff --git a/console/src/assets/i18n/fr.json b/console/src/assets/i18n/fr.json index d5fbfd9c0..110f0589d 100644 --- a/console/src/assets/i18n/fr.json +++ b/console/src/assets/i18n/fr.json @@ -594,6 +594,7 @@ "INVALID_FORMAT": "Le format n'est pas valide.", "NOTANEMAIL": "La valeur donnée n'est pas une adresse e-mail.", "MINLENGTH": "Doit comporter au moins {{length}} caractères.", + "MAXLENGTH": "Doit contenir moins de {{requiredLength}} caractères.", "UPPERCASEMISSING": "Doit inclure un caractère majuscule.", "LOWERCASEMISSING": "Doit inclure un caractère minuscule.", "SYMBOLERROR": "Doit inclure un symbole ou un signe de ponctuation.", @@ -879,7 +880,8 @@ "SET": "Définir un nouveau mot de passe", "RESENDNOTIFICATION": "Envoyer le lien de réinitialisation du mot de passe", "REQUIRED": "Certains champs obligatoires sont manquants.", - "MINLENGTHERROR": "Doit comporter au moins {{value}} caractères." + "MINLENGTHERROR": "Doit comporter au moins {{value}} caractères.", + "MAXLENGTHERROR": "Doit contenir moins de {{value}} caractères" }, "ID": "ID", "EMAIL": "E-mail", diff --git a/console/src/assets/i18n/it.json b/console/src/assets/i18n/it.json index 3d986999e..258635148 100644 --- a/console/src/assets/i18n/it.json +++ b/console/src/assets/i18n/it.json @@ -593,6 +593,7 @@ "INVALID_FORMAT": "Il formato non è valido.", "NOTANEMAIL": "Il valore dato non è un indirizzo e-mail.", "MINLENGTH": "Deve essere lunga almeno {{requiredLength}} caratteri.", + "MAXLENGTH": "Deve contenere meno di {{requiredLength}} caratteri.", "UPPERCASEMISSING": "Deve includere un carattere maiuscolo.", "LOWERCASEMISSING": "Deve includere un carattere minuscolo.", "SYMBOLERROR": "Deve includere un simbolo o un segno di punteggiatura.", @@ -878,7 +879,8 @@ "SET": "Imposta nuova password", "RESENDNOTIFICATION": "Invia email per la reimpostazione", "REQUIRED": "Mancano alcuni campi obbligatori.", - "MINLENGTHERROR": "Deve essere lunga almeno {{valore}} caratteri." + "MINLENGTHERROR": "Deve essere lunga almeno {{valore}} caratteri.", + "MAXLENGTHERROR": "Deve contenere meno di {{value}} caratteri" }, "ID": "ID", "EMAIL": "E-mail", diff --git a/console/src/assets/i18n/ja.json b/console/src/assets/i18n/ja.json index 82f36fa7b..30f1f8485 100644 --- a/console/src/assets/i18n/ja.json +++ b/console/src/assets/i18n/ja.json @@ -595,6 +595,7 @@ "INVALID_FORMAT": "不正なフォーマットです", "NOTANEMAIL": "入力された値がメールアドレスではありません。", "MINLENGTH": "{{requiredLength}} 文字以上の文字列が必要です。", + "MAXLENGTH": "{{requiredLength}}文字以下でなければなりません.", "UPPERCASEMISSING": "大文字を含める必要があります。", "LOWERCASEMISSING": "小文字を含める必要があります。", "SYMBOLERROR": "記号を含める必要があります。", @@ -880,7 +881,8 @@ "SET": "新しいパスワードを設定する", "RESENDNOTIFICATION": "パスワードリセットのリンクを送信する", "REQUIRED": "一部の必須項目が不足しています。", - "MINLENGTHERROR": "最小で{{value}}文字の長さが必要です。" + "MINLENGTHERROR": "最小で{{value}}文字の長さが必要です。", + "MAXLENGTHERROR": "{{value}}文字以下でなければなりません" }, "ID": "id", "EMAIL": "Eメール", diff --git a/console/src/assets/i18n/mk.json b/console/src/assets/i18n/mk.json index 7b0095bf5..55f52bc24 100644 --- a/console/src/assets/i18n/mk.json +++ b/console/src/assets/i18n/mk.json @@ -595,6 +595,7 @@ "INVALID_FORMAT": "Невалиден формат.", "NOTANEMAIL": "Внесената вредност не е е-пошта.", "MINLENGTH": "Мора да биде најмалку {{requiredLength}} карактери долга.", + "MAXLENGTH": "Мора да биде помалку од {{requiredLength}} карактери.", "UPPERCASEMISSING": "Мора да содржи голема буква.", "LOWERCASEMISSING": "Мора да содржи мала буква.", "SYMBOLERROR": "Мора да содржи симбол или знак за интерпункција.", @@ -880,7 +881,8 @@ "SET": "Постави нова лозинка", "RESENDNOTIFICATION": "Испрати линк за ресетирање на лозинката", "REQUIRED": "Некои задолжителни полиња не се пополнети.", - "MINLENGTHERROR": "Мора да биде најмалку {{value}} карактери долга." + "MINLENGTHERROR": "Мора да биде најмалку {{value}} карактери долга.", + "MAXLENGTHERROR": "Мора да биде помалку од {{value}} карактери" }, "ID": "ID", "EMAIL": "E-пошта", diff --git a/console/src/assets/i18n/nl.json b/console/src/assets/i18n/nl.json index 1e4fb7abf..c2526c848 100644 --- a/console/src/assets/i18n/nl.json +++ b/console/src/assets/i18n/nl.json @@ -595,6 +595,7 @@ "INVALID_FORMAT": "De opmaak is ongeldig.", "NOTANEMAIL": "De opgegeven waarde is geen e-mailadres.", "MINLENGTH": "Moet minimaal {{requiredLength}} tekens lang zijn.", + "MAXLENGTH": "Moet minder dan {{requiredLength}} tekens bevatten.", "UPPERCASEMISSING": "Moet een hoofdletter bevatten.", "LOWERCASEMISSING": "Moet een kleine letter bevatten.", "SYMBOLERROR": "Moet een symbool of leesteken bevatten.", @@ -880,7 +881,8 @@ "SET": "Stel nieuw wachtwoord in", "RESENDNOTIFICATION": "Stuur wachtwoord reset link", "REQUIRED": "Sommige verplichte velden ontbreken.", - "MINLENGTHERROR": "Moet minstens {{value}} tekens lang zijn." + "MINLENGTHERROR": "Moet minstens {{value}} tekens lang zijn.", + "MAXLENGTHERROR": "Moet minder dan {{value}} tekens bevatten" }, "ID": "ID", "EMAIL": "E-mail", diff --git a/console/src/assets/i18n/pl.json b/console/src/assets/i18n/pl.json index cab349807..65e13ce71 100644 --- a/console/src/assets/i18n/pl.json +++ b/console/src/assets/i18n/pl.json @@ -594,6 +594,7 @@ "INVALID_FORMAT": "Format jest nieprawidłowy.", "NOTANEMAIL": "Podana wartość nie jest adresem e-mail.", "MINLENGTH": "Musi mieć co najmniej {{requiredLength}} znaków.", + "MAXLENGTH": "Musi zawierać mniej niż {{requiredLength}} znaków.", "UPPERCASEMISSING": "Musi zawierać wielką literę.", "LOWERCASEMISSING": "Musi zawierać małą literę.", "SYMBOLERROR": "Musi zawierać symbol lub znak interpunkcyjny.", @@ -879,7 +880,8 @@ "SET": "Ustaw nowe hasło", "RESENDNOTIFICATION": "Wyślij link resetowania hasła", "REQUIRED": "Brakuje niektórych wymaganych pól.", - "MINLENGTHERROR": "Musi mieć co najmniej {{value}} znaków." + "MINLENGTHERROR": "Musi mieć co najmniej {{value}} znaków.", + "MAXLENGTHERROR": "Musi zawierać mniej niż {{value}} znaków" }, "ID": "ID", "EMAIL": "E-mail", diff --git a/console/src/assets/i18n/pt.json b/console/src/assets/i18n/pt.json index 1c9d5a3c3..aee0da5a0 100644 --- a/console/src/assets/i18n/pt.json +++ b/console/src/assets/i18n/pt.json @@ -595,6 +595,7 @@ "INVALID_FORMAT": "O formato é inválido.", "NOTANEMAIL": "O valor fornecido não é um endereço de e-mail.", "MINLENGTH": "Deve ter pelo menos {{requiredLength}} caracteres.", + "MAXLENGTH": "Deve ter menos de {{requiredLength}} caracteres.", "UPPERCASEMISSING": "Deve incluir uma letra maiúscula.", "LOWERCASEMISSING": "Deve incluir uma letra minúscula.", "SYMBOLERROR": "Deve incluir um símbolo ou caractere de pontuação.", @@ -880,7 +881,8 @@ "SET": "Definir Nova Senha", "RESENDNOTIFICATION": "Enviar Link de Redefinição de Senha", "REQUIRED": "Algumas informações obrigatórias estão faltando.", - "MINLENGTHERROR": "Deve ter pelo menos {{value}} caracteres." + "MINLENGTHERROR": "Deve ter pelo menos {{value}} caracteres.", + "MAXLENGTHERROR": "Deve ter menos de {{value}} caracteres" }, "ID": "ID", "EMAIL": "E-mail", diff --git a/console/src/assets/i18n/ru.json b/console/src/assets/i18n/ru.json index 4363ee1ae..294039adc 100644 --- a/console/src/assets/i18n/ru.json +++ b/console/src/assets/i18n/ru.json @@ -594,6 +594,7 @@ "INVALID_FORMAT": "Форматирование неверно.", "NOTANEMAIL": "Данное значение не является адресом электронной почты.", "MINLENGTH": "Должно быть не менее {{requiredLength}} символов.", + "MAXLENGTH": "Должно быть меньше {{requiredLength}} символов.", "UPPERCASEMISSING": "Должен содержать символ верхнего регистра.", "LOWERCASEMISSING": "Должен включать строчные буквы.", "SYMBOLERROR": "Должен содержать символ или знак препинания.", @@ -887,7 +888,8 @@ "RESENDNOTIFICATION": "Отправить ссылку для сброса пароля", "REQUIRED": "Отсутствуют некоторые обязательные поля.", "MINLENGTHERROR": "Должно быть не менее {{value}} символов.", - "NOTEQUAL": "Указанные пароли не совпадают." + "NOTEQUAL": "Указанные пароли не совпадают.", + "MAXLENGTHERROR": "Должно быть меньше {{value}} символов" }, "ID": "Идентификатор", "EMAIL": "Электронная почта", diff --git a/console/src/assets/i18n/zh.json b/console/src/assets/i18n/zh.json index f983fcf13..c8b2baa0a 100644 --- a/console/src/assets/i18n/zh.json +++ b/console/src/assets/i18n/zh.json @@ -594,6 +594,7 @@ "INVALID_FORMAT": "格式是无效的。", "NOTANEMAIL": "给定的值不是合法电子邮件地址。", "MINLENGTH": "长度必须至少是{{requiredLength}}字符。", + "MAXLENGTH": "必须少于{{requiredLength}}个字符.", "UPPERCASEMISSING": "密码必须包含大写字符。", "LOWERCASEMISSING": "密码必须包含小写字符。", "SYMBOLERROR": "密码必须包含符号或标点符号。", @@ -879,7 +880,8 @@ "SET": "设置新密码", "RESENDNOTIFICATION": "发送重置密码链接", "REQUIRED": "缺少必填字段。", - "MINLENGTHERROR": "密码长度必须至少为 {{value}} 个字符。" + "MINLENGTHERROR": "密码长度必须至少为 {{value}} 个字符。", + "MAXLENGTHERROR": "必须少于{{value}}个字符" }, "ID": "ID", "EMAIL": "电子邮件", diff --git a/internal/api/ui/login/static/i18n/bg.yaml b/internal/api/ui/login/static/i18n/bg.yaml index 12f5e57bd..61ef709f6 100644 --- a/internal/api/ui/login/static/i18n/bg.yaml +++ b/internal/api/ui/login/static/i18n/bg.yaml @@ -27,19 +27,22 @@ SelectAccount: SessionState0: активен SessionState1: Не сте в профила си MustBeMemberOfOrg: 'Потребителят трябва да е член на {{.OrgName}} организация.' + Password: Title: Парола - Description: Въведете вашите данни за вход. + Description: Въведете данните си за вход. PasswordLabel: Парола - MinLength: Минимална дължина - HasUppercase: Главна буква - HasLowercase: Малка буква - HasNumber: Номер - HasSymbol: Символ - Confirmation: Съвпадение за потвърждение - ResetLinkText: нулиране на парола - BackButtonText: обратно - NextButtonText: следващия + MinLength: Трябва да е поне + MinLengthp2: символа дълга. + MaxLength: Трябва да е по-малко от 70 символа. + HasUppercase: Трябва да включва главна буква. + HasLowercase: Трябва да включва малка буква. + HasNumber: Трябва да включва число. + HasSymbol: Трябва да включва символ. + Confirmation: Потвърждението на паролата съвпада. + ResetLinkText: Нулиране на паролата + BackButtonText: Назад + NextButtonText: Напред UsernameChange: Title: Промяна на потребителското име Description: Задайте новото си потребителско име diff --git a/internal/api/ui/login/static/i18n/cs.yaml b/internal/api/ui/login/static/i18n/cs.yaml index 3b97b14bf..52e88e526 100644 --- a/internal/api/ui/login/static/i18n/cs.yaml +++ b/internal/api/ui/login/static/i18n/cs.yaml @@ -32,12 +32,14 @@ Password: Title: Heslo Description: Zadejte své přihlašovací údaje. PasswordLabel: Heslo - MinLength: Minimální délka - HasUppercase: Velké písmeno - HasLowercase: Malé písmeno - HasNumber: Číslo - HasSymbol: Symbol - Confirmation: Potvrzení shody + MinLength: Musí být alespoň + MinLengthp2: znaků dlouhé. + MaxLength: Musí být kratší než 70 znaků. + HasUppercase: Musí obsahovat velké písmeno. + HasLowercase: Musí obsahovat malé písmeno. + HasNumber: Musí obsahovat číslo. + HasSymbol: Musí obsahovat symbol. + Confirmation: Potvrzení hesla odpovídá. ResetLinkText: Obnovit heslo BackButtonText: Zpět NextButtonText: Další diff --git a/internal/api/ui/login/static/i18n/de.yaml b/internal/api/ui/login/static/i18n/de.yaml index d258f09aa..4022abfa7 100644 --- a/internal/api/ui/login/static/i18n/de.yaml +++ b/internal/api/ui/login/static/i18n/de.yaml @@ -29,15 +29,17 @@ SelectAccount: MustBeMemberOfOrg: Der Benutzer muss der Organisation {{.OrgName}} angehören. Password: - Title: Willkommen zurück! - Description: Gib deine Benutzerdaten ein. + Title: Passwort + Description: Geben Sie Ihre Anmeldedaten ein. PasswordLabel: Passwort - MinLength: Mindestlänge - HasUppercase: Großbuchstaben - HasLowercase: Kleinbuchstaben - HasNumber: Nummer - HasSymbol: Symbol - Confirmation: Wiederholung stimmt überein + MinLength: Muss mindestens + MinLengthp2: Zeichen lang sein. + MaxLength: Muss weniger als 70 Zeichen lang sein. + HasUppercase: Muss einen Großbuchstaben enthalten. + HasLowercase: Muss einen Kleinbuchstaben enthalten. + HasNumber: Muss eine Zahl enthalten. + HasSymbol: Muss ein Symbol enthalten. + Confirmation: Passwortbestätigung stimmt überein. ResetLinkText: Passwort zurücksetzen BackButtonText: Zurück NextButtonText: Weiter diff --git a/internal/api/ui/login/static/i18n/en.yaml b/internal/api/ui/login/static/i18n/en.yaml index 338107060..b3f6cd479 100644 --- a/internal/api/ui/login/static/i18n/en.yaml +++ b/internal/api/ui/login/static/i18n/en.yaml @@ -32,12 +32,14 @@ Password: Title: Password Description: Enter your login data. PasswordLabel: Password - MinLength: Minimum length - HasUppercase: Uppercase letter - HasLowercase: Lowercase letter - HasNumber: Number - HasSymbol: Symbol - Confirmation: Confirmation match + MinLength: Must be at least + MinLengthp2: characters long. + MaxLength: Must be less than 70 characters long. + HasUppercase: Must include an uppercase letter. + HasLowercase: Must include a lowercase letter. + HasNumber: Must include a number. + HasSymbol: Must include a symbol. + Confirmation: Password confirmation matched. ResetLinkText: Reset Password BackButtonText: Back NextButtonText: Next diff --git a/internal/api/ui/login/static/i18n/es.yaml b/internal/api/ui/login/static/i18n/es.yaml index ef091f291..29336ab5a 100644 --- a/internal/api/ui/login/static/i18n/es.yaml +++ b/internal/api/ui/login/static/i18n/es.yaml @@ -30,17 +30,19 @@ SelectAccount: Password: Title: Contraseña - Description: Introduce tus datos de inicio de sesión. + Description: Introduce tus datos de acceso. PasswordLabel: Contraseña - MinLength: Longitud mínima - HasUppercase: Una letra mayúscula - HasLowercase: Una letra minúscula - HasNumber: Número - HasSymbol: Símbolo - Confirmation: Las contraseñas coinciden - ResetLinkText: restablecer contraseña - BackButtonText: atrás - NextButtonText: siguiente + MinLength: Debe tener al menos + MinLengthp2: caracteres de longitud. + MaxLength: Debe tener menos de 70 caracteres de longitud. + HasUppercase: Debe incluir una letra mayúscula. + HasLowercase: Debe incluir una letra minúscula. + HasNumber: Debe incluir un número. + HasSymbol: Debe incluir un símbolo. + Confirmation: La confirmación de la contraseña coincide. + ResetLinkText: Restablecer contraseña + BackButtonText: Atrás + NextButtonText: Siguiente UsernameChange: Title: Cambiar nombre de usuario diff --git a/internal/api/ui/login/static/i18n/fr.yaml b/internal/api/ui/login/static/i18n/fr.yaml index 44532ca8d..69cd70518 100644 --- a/internal/api/ui/login/static/i18n/fr.yaml +++ b/internal/api/ui/login/static/i18n/fr.yaml @@ -32,12 +32,14 @@ Password: Title: Mot de passe Description: Entrez vos identifiants. PasswordLabel: Mot de passe - MinLength: Longueur minimale - HasUppercase: Lettre majuscule - HasLowercase: Lettre minuscule - HasNumber: Numéro - HasSymbol: Symbole - Confirmation: Les mots de passe sont identiques + MinLength: Doit contenir au moins + MinLengthp2: caractères. + MaxLength: Doit contenir moins de 70 caractères. + HasUppercase: Doit inclure une lettre majuscule. + HasLowercase: Doit inclure une lettre minuscule. + HasNumber: Doit inclure un chiffre. + HasSymbol: Doit inclure un symbole. + Confirmation: La confirmation du mot de passe correspond. ResetLinkText: Réinitialiser le mot de passe BackButtonText: Retour NextButtonText: Suivant diff --git a/internal/api/ui/login/static/i18n/it.yaml b/internal/api/ui/login/static/i18n/it.yaml index 24e973394..8b969e6c6 100644 --- a/internal/api/ui/login/static/i18n/it.yaml +++ b/internal/api/ui/login/static/i18n/it.yaml @@ -32,14 +32,16 @@ Password: Title: Password Description: Inserisci i tuoi dati di accesso. PasswordLabel: Password - MinLength: Lunghezza minima - HasUppercase: Lettera maiuscola - HasLowercase: Lettera minuscola - HasNumber: Numero - HasSymbol: Simbolo - Confirmation: Conferma password - ResetLinkText: Password dimenticata? - BackButtonText: indietro + MinLength: Deve contenere almeno + MinLengthp2: caratteri. + MaxLength: Deve contenere meno di 70 caratteri. + HasUppercase: Deve includere una lettera maiuscola. + HasLowercase: Deve includere una lettera minuscola. + HasNumber: Deve includere un numero. + HasSymbol: Deve includere un simbolo. + Confirmation: La conferma della password corrisponde. + ResetLinkText: Reimposta password + BackButtonText: Indietro NextButtonText: Avanti UsernameChange: diff --git a/internal/api/ui/login/static/i18n/ja.yaml b/internal/api/ui/login/static/i18n/ja.yaml index e4ca75bad..da55ccb52 100644 --- a/internal/api/ui/login/static/i18n/ja.yaml +++ b/internal/api/ui/login/static/i18n/ja.yaml @@ -22,16 +22,18 @@ SelectAccount: MustBeMemberOfOrg: ユーザーは組織 {{.OrgName}} のメンバーである必要があります。 Password: - Title: パスワードの入力 - Description: ログインデータを入力します。 + Title: パスワード + Description: ログインデータを入力してください。 PasswordLabel: パスワード - MinLength: 文字列の長さ - HasUppercase: 大文字 - HasLowercase: 小文字 - HasNumber: 数字 - HasSymbol: シンボル - Confirmation: パスワードの確認 - ResetLinkText: パスワードを再設定する + MinLength: 少なくとも + MinLengthp2: 文字でなければなりません。 + MaxLength: 70文字以下でなければなりません。 + HasUppercase: 大文字を含む必要があります。 + HasLowercase: 小文字を含む必要があります。 + HasNumber: 数字を含む必要があります。 + HasSymbol: 記号を含む必要があります。 + Confirmation: パスワードの確認が一致しました。 + ResetLinkText: パスワードをリセット BackButtonText: 戻る NextButtonText: 次へ diff --git a/internal/api/ui/login/static/i18n/mk.yaml b/internal/api/ui/login/static/i18n/mk.yaml index dafc520d5..c05af2b69 100644 --- a/internal/api/ui/login/static/i18n/mk.yaml +++ b/internal/api/ui/login/static/i18n/mk.yaml @@ -32,15 +32,17 @@ Password: Title: Лозинка Description: Внесете ги вашите податоци за најава. PasswordLabel: Лозинка - MinLength: Минимална должина - HasUppercase: Голема буква - HasLowercase: Мала буква - HasNumber: Број - HasSymbol: Симбол - Confirmation: Потврда на лозинка - ResetLinkText: ресетирај лозинка - BackButtonText: назад - NextButtonText: следно + MinLength: Мора да биде најмалку + MinLengthp2: карактери долго. + MaxLength: Мора да биде помалку од 70 карактери. + HasUppercase: Мора да вклучи голема буква. + HasLowercase: Мора да вклучи мала буква. + HasNumber: Мора да вклучи број. + HasSymbol: Мора да вклучи симбол. + Confirmation: Потврдата за лозинката се совпаѓа. + ResetLinkText: Ресетирај лозинка + BackButtonText: Назад + NextButtonText: Напред UsernameChange: Title: Промена на корисничко име diff --git a/internal/api/ui/login/static/i18n/nl.yaml b/internal/api/ui/login/static/i18n/nl.yaml index 68d8ffa4a..5b76ee417 100644 --- a/internal/api/ui/login/static/i18n/nl.yaml +++ b/internal/api/ui/login/static/i18n/nl.yaml @@ -32,13 +32,15 @@ Password: Title: Wachtwoord Description: Voer uw inloggegevens in. PasswordLabel: Wachtwoord - MinLength: Minimum lengte - HasUppercase: Hoofdletter - HasLowercase: Kleine letter - HasNumber: Nummer - HasSymbol: Symbool - Confirmation: Bevestiging komt overeen - ResetLinkText: Reset Wachtwoord + MinLength: Moet minstens + MinLengthp2: tekens lang zijn. + MaxLength: Moet minder dan 70 tekens lang zijn. + HasUppercase: Moet een hoofdletter bevatten. + HasLowercase: Moet een kleine letter bevatten. + HasNumber: Moet een nummer bevatten. + HasSymbol: Moet een symbool bevatten. + Confirmation: Wachtwoordbevestiging komt overeen. + ResetLinkText: Wachtwoord resetten BackButtonText: Terug NextButtonText: Volgende diff --git a/internal/api/ui/login/static/i18n/pl.yaml b/internal/api/ui/login/static/i18n/pl.yaml index e23ce3fa7..3f9def93a 100644 --- a/internal/api/ui/login/static/i18n/pl.yaml +++ b/internal/api/ui/login/static/i18n/pl.yaml @@ -32,15 +32,17 @@ Password: Title: Hasło Description: Wprowadź swoje dane logowania. PasswordLabel: Hasło - MinLength: Minimalna długość - HasUppercase: Duża litera - HasLowercase: Mała litera - HasNumber: Liczba - HasSymbol: Symbol - Confirmation: Potwierdzenie zgodności - ResetLinkText: zresetuj hasło - BackButtonText: wróć - NextButtonText: dalej + MinLength: Musi zawierać co najmniej + MinLengthp2: znaków. + MaxLength: Musi zawierać mniej niż 70 znaków. + HasUppercase: Musi zawierać dużą literę. + HasLowercase: Musi zawierać małą literę. + HasNumber: Musi zawierać numer. + HasSymbol: Musi zawierać symbol. + Confirmation: Potwierdzenie hasła pasuje. + ResetLinkText: Zresetuj hasło + BackButtonText: Wstecz + NextButtonText: Dalej UsernameChange: Title: Zmiana nazwy użytkownika diff --git a/internal/api/ui/login/static/i18n/pt.yaml b/internal/api/ui/login/static/i18n/pt.yaml index 19d00c72f..99aff3a8c 100644 --- a/internal/api/ui/login/static/i18n/pt.yaml +++ b/internal/api/ui/login/static/i18n/pt.yaml @@ -32,15 +32,17 @@ Password: Title: Senha Description: Insira seus dados de login. PasswordLabel: Senha - MinLength: Comprimento mínimo - HasUppercase: Letra maiúscula - HasLowercase: Letra minúscula - HasNumber: Número - HasSymbol: Símbolo - Confirmation: Confirmação corresponde - ResetLinkText: redefinir senha - BackButtonText: voltar - NextButtonText: próximo + MinLength: Deve ter pelo menos + MinLengthp2: caracteres. + MaxLength: Deve ter menos de 70 caracteres. + HasUppercase: Deve incluir uma letra maiúscula. + HasLowercase: Deve incluir uma letra minúscula. + HasNumber: Deve incluir um número. + HasSymbol: Deve incluir um símbolo. + Confirmation: A confirmação da senha corresponde. + ResetLinkText: Redefinir senha + BackButtonText: Voltar + NextButtonText: Próximo UsernameChange: Title: Alterar nome de usuário diff --git a/internal/api/ui/login/static/i18n/ru.yaml b/internal/api/ui/login/static/i18n/ru.yaml index fb8831248..cd756cbdd 100644 --- a/internal/api/ui/login/static/i18n/ru.yaml +++ b/internal/api/ui/login/static/i18n/ru.yaml @@ -29,17 +29,19 @@ SelectAccount: Password: Title: Пароль - Description: Введите ваши данные. + Description: Введите свои данные для входа. PasswordLabel: Пароль - MinLength: Минимальная длина - HasUppercase: Заглавная буква - HasLowercase: Строчная буква - HasNumber: Цифра - HasSymbol: Символ - Confirmation: Подтверждение пароля - ResetLinkText: сброс пароля - BackButtonText: назад - NextButtonText: далее + MinLength: Должно быть не менее + MinLengthp2: символов. + MaxLength: Должно быть меньше 70 символов. + HasUppercase: Должно содержать заглавную букву. + HasLowercase: Должно содержать строчную букву. + HasNumber: Должно содержать число. + HasSymbol: Должно содержать символ. + Confirmation: Подтверждение пароля совпадает. + ResetLinkText: Сбросить пароль + BackButtonText: Назад + NextButtonText: Вперед UsernameChange: Title: Изменение логина diff --git a/internal/api/ui/login/static/i18n/zh.yaml b/internal/api/ui/login/static/i18n/zh.yaml index bf31d270b..85230efe0 100644 --- a/internal/api/ui/login/static/i18n/zh.yaml +++ b/internal/api/ui/login/static/i18n/zh.yaml @@ -32,15 +32,17 @@ Password: Title: 密码 Description: 输入您的登录数据。 PasswordLabel: 密码 - MinLength: 密码 - HasUppercase: 大写字母 - HasLowercase: 小写字母 - HasNumber: 数字 - HasSymbol: 符号 - Confirmation: 确认匹配 - ResetLinkText: 重设密码 - BackButtonText: 后退 - NextButtonText: 继续 + MinLength: 必须至少有 + MinLengthp2: 个字符。 + MaxLength: 必须少于70个字符。 + HasUppercase: 必须包含一个大写字母。 + HasLowercase: 必须包含一个小写字母。 + HasNumber: 必须包含一个数字。 + HasSymbol: 必须包含一个符号。 + Confirmation: 密码确认匹配。 + ResetLinkText: 重置密码 + BackButtonText: 返回 + NextButtonText: 下一步 UsernameChange: Title: 更改用户名 diff --git a/internal/api/ui/login/static/resources/scripts/password_policy_check.js b/internal/api/ui/login/static/resources/scripts/password_policy_check.js index ce5936b32..4a9712f81 100644 --- a/internal/api/ui/login/static/resources/scripts/password_policy_check.js +++ b/internal/api/ui/login/static/resources/scripts/password_policy_check.js @@ -15,6 +15,14 @@ function ComplexityPolicyCheck(passwordElement, passwordConfirmationElement) { invalid++; } + const maxLengthElem = document.getElementById("maxlength"); + if (passwordElement.value.length <= 70) { + ValidPolicyFlipped(maxLengthElem); + } else { + InvalidPolicyFlipped(maxLengthElem); + invalid++; + } + const upper = document.getElementById("uppercase"); if (upperRegex !== "") { if (RegExp(upperRegex).test(passwordElement.value)) { @@ -84,6 +92,14 @@ function ValidPolicy(element) { element.getElementsByTagName("i")[0].classList.add("lgn-valid"); } +function ValidPolicyFlipped(element) { + element.classList.add("valid"); + element.getElementsByTagName("i")[0].classList.remove("lgn-warn"); + element.getElementsByTagName("i")[0].classList.remove("lgn-icon-times-solid"); + element.getElementsByTagName("i")[0].classList.add("lgn-valid"); + element.getElementsByTagName("i")[0].classList.add("lgn-icon-check-solid"); +} + function InvalidPolicy(element) { element.classList.add("invalid"); element.getElementsByTagName("i")[0].classList.remove("lgn-valid"); @@ -91,3 +107,11 @@ function InvalidPolicy(element) { element.getElementsByTagName("i")[0].classList.add("lgn-warn"); element.getElementsByTagName("i")[0].classList.add("lgn-icon-times-solid"); } + +function InvalidPolicyFlipped(element) { + element.classList.remove("valid"); + element.getElementsByTagName("i")[0].classList.remove("lgn-icon-check-solid"); + element.getElementsByTagName("i")[0].classList.remove("lgn-valid"); + element.getElementsByTagName("i")[0].classList.add("lgn-icon-times-solid"); + element.getElementsByTagName("i")[0].classList.add("lgn-warn"); +} diff --git a/internal/api/ui/login/static/templates/password_complexity_policy.html b/internal/api/ui/login/static/templates/password_complexity_policy.html index f8f5d3476..19a4c9ce9 100644 --- a/internal/api/ui/login/static/templates/password_complexity_policy.html +++ b/internal/api/ui/login/static/templates/password_complexity_policy.html @@ -1,6 +1,7 @@ {{define "password-complexity-policy-description"}}