diff --git a/packages/console/src/pages/Profile/containers/ChangePasswordModal/index.tsx b/packages/console/src/pages/Profile/containers/ChangePasswordModal/index.tsx index db800294e..bb7b6d52f 100644 --- a/packages/console/src/pages/Profile/containers/ChangePasswordModal/index.tsx +++ b/packages/console/src/pages/Profile/containers/ChangePasswordModal/index.tsx @@ -1,4 +1,3 @@ -import { passwordRegEx } from '@logto/core-kit'; import type { KeyboardEventHandler } from 'react'; import { useState } from 'react'; import { useForm } from 'react-hook-form'; @@ -94,14 +93,6 @@ function ChangePasswordModal() { placeholder={t('profile.password.password')} {...register('newPassword', { required: t('profile.password.required'), - minLength: { - value: 8, - message: t('profile.password.min_length', { min: 8 }), - }, - pattern: { - value: passwordRegEx, - message: t('errors.password_pattern_error'), - }, })} // eslint-disable-next-line jsx-a11y/no-autofocus autoFocus diff --git a/packages/console/src/utils/password.ts b/packages/console/src/utils/password.ts index d6f70c463..e61cbb4c1 100644 --- a/packages/console/src/utils/password.ts +++ b/packages/console/src/utils/password.ts @@ -1,14 +1,3 @@ -import { passwordRegEx } from '@logto/core-kit'; import { nanoid } from 'nanoid'; -// Note: password requires a minimum of 8 characters and contains a mix of letters, numbers, and symbols. -export const generateRandomPassword = (length = 8) => { - // eslint-disable-next-line @silverhand/fp/no-let - let generated = nanoid(length); - while (!passwordRegEx.test(generated)) { - // eslint-disable-next-line @silverhand/fp/no-mutation - generated = nanoid(length); - } - - return generated; -}; +export const generateRandomPassword = () => nanoid(8); diff --git a/packages/core/src/routes-me/user.ts b/packages/core/src/routes-me/user.ts index ac5cc4a8e..90fe834cc 100644 --- a/packages/core/src/routes-me/user.ts +++ b/packages/core/src/routes-me/user.ts @@ -1,4 +1,4 @@ -import { emailRegEx, passwordRegEx, usernameRegEx } from '@logto/core-kit'; +import { emailRegEx, usernameRegEx } from '@logto/core-kit'; import { userInfoSelectFields, jsonObjectGuard } from '@logto/schemas'; import { conditional, pick } from '@silverhand/essentials'; import { literal, object, string } from 'zod'; @@ -123,7 +123,7 @@ export default function userRoutes( router.post( '/password', - koaGuard({ body: object({ password: string().regex(passwordRegEx) }) }), + koaGuard({ body: object({ password: string().min(1) }) }), async (ctx, next) => { const { id: userId } = ctx.auth; const { password } = ctx.guard.body; diff --git a/packages/core/src/routes/admin-user.test.ts b/packages/core/src/routes/admin-user.test.ts index 88c82a1d8..f9d816845 100644 --- a/packages/core/src/routes/admin-user.test.ts +++ b/packages/core/src/routes/admin-user.test.ts @@ -1,6 +1,7 @@ import type { CreateUser, Role, SignInExperience, User } from '@logto/schemas'; import { RoleType } from '@logto/schemas'; import { createMockUtils, pickDefault } from '@logto/shared/esm'; +import { removeUndefinedKeys } from '@silverhand/essentials'; import { mockUser, mockUserResponse } from '#src/__mocks__/index.js'; import RequestError from '#src/errors/RequestError/index.js'; @@ -84,7 +85,7 @@ const usersLibraries = { insertUser: jest.fn( async (user: CreateUser): Promise => ({ ...mockUser, - ...user, + ...removeUndefinedKeys(user), // No undefined values will be returned from database }) ), } satisfies Partial; @@ -125,14 +126,14 @@ describe('adminUserRoutes', () => { }); }); - it('POST /users should throw with invalid input params', async () => { + it('POST /users should be ok with simple passwords', async () => { const username = 'MJAtLogto'; const name = 'Michael'; // Invalid input format await expect( userRequest.post('/users').send({ username, password: 'abc', name }) - ).resolves.toHaveProperty('status', 400); + ).resolves.toHaveProperty('status', 200); }); it('POST /users should throw if username exists', async () => { diff --git a/packages/core/src/routes/admin-user.ts b/packages/core/src/routes/admin-user.ts index a0d08bd3f..ab6c2b3e8 100644 --- a/packages/core/src/routes/admin-user.ts +++ b/packages/core/src/routes/admin-user.ts @@ -1,4 +1,4 @@ -import { emailRegEx, passwordRegEx, phoneRegEx, usernameRegEx } from '@logto/core-kit'; +import { emailRegEx, phoneRegEx, usernameRegEx } from '@logto/core-kit'; import { jsonObjectGuard, userInfoSelectFields, userProfileResponseGuard } from '@logto/schemas'; import { conditional, pick } from '@silverhand/essentials'; import { boolean, literal, object, string } from 'zod'; @@ -100,7 +100,7 @@ export default function adminUserRoutes( primaryPhone: string().regex(phoneRegEx), primaryEmail: string().regex(emailRegEx), username: string().regex(usernameRegEx), - password: string().regex(passwordRegEx), + password: string().min(1), name: string(), }).partial(), response: userProfileResponseGuard, @@ -183,7 +183,7 @@ export default function adminUserRoutes( '/users/:userId/password', koaGuard({ params: object({ userId: string() }), - body: object({ password: string().regex(passwordRegEx) }), + body: object({ password: string().min(1) }), response: userProfileResponseGuard, status: [200, 422], }), diff --git a/packages/phrases-ui/src/locales/de/error/index.ts b/packages/phrases-ui/src/locales/de/error/index.ts index d2657a2c6..6ec15063d 100644 --- a/packages/phrases-ui/src/locales/de/error/index.ts +++ b/packages/phrases-ui/src/locales/de/error/index.ts @@ -10,9 +10,6 @@ const error = { username_invalid_charset: 'Benutzername darf nur Buchstaben, Zahlen und Unterstriche enthalten', invalid_email: 'Die Email ist ungültig', invalid_phone: 'Die Telefonnummer ist ungültig', - password_min_length: 'Passwort muss mindestens {{min}} Zeichen lang sein', - invalid_password: - 'Passwort erfordert mindestens {{min}} Zeichen und enthält eine Kombination aus Buchstaben, Zahlen und Symbolen.', passwords_do_not_match: 'Passwörter stimmen nicht überein', invalid_passcode: 'Der Bestätigungscode ist ungültig', invalid_connector_auth: 'Die Autorisierung ist ungültig', diff --git a/packages/phrases-ui/src/locales/en/error/index.ts b/packages/phrases-ui/src/locales/en/error/index.ts index 9ba12f196..8c1fe1611 100644 --- a/packages/phrases-ui/src/locales/en/error/index.ts +++ b/packages/phrases-ui/src/locales/en/error/index.ts @@ -10,9 +10,6 @@ const error = { username_invalid_charset: 'Username should only contain letters, numbers, or underscores.', invalid_email: 'The email is invalid', invalid_phone: 'The phone number is invalid', - password_min_length: 'Password requires a minimum of {{min}} characters', - invalid_password: - 'Password requires a minimum of {{min}} characters and contains a mix of letters, numbers, and symbols.', passwords_do_not_match: 'Your passwords don’t match. Please try again.', invalid_passcode: 'The verification code is invalid', invalid_connector_auth: 'The authorization is invalid', diff --git a/packages/phrases-ui/src/locales/es/error/index.ts b/packages/phrases-ui/src/locales/es/error/index.ts index fc2b32d64..8884df074 100644 --- a/packages/phrases-ui/src/locales/es/error/index.ts +++ b/packages/phrases-ui/src/locales/es/error/index.ts @@ -11,9 +11,6 @@ const error = { 'El nombre de usuario solo debe contener letras, números o guiones bajos.', invalid_email: 'El correo electrónico no es válido', invalid_phone: 'El número de teléfono no es válido', - password_min_length: 'La contraseña requiere un mínimo de {{min}} caracteres', - invalid_password: - 'La contraseña requiere un mínimo de {{min}} caracteres y debe contener una combinación de letras, números y símbolos.', passwords_do_not_match: 'Las contraseñas no coinciden. Por favor intente de nuevo', invalid_passcode: 'El código de verificación no es válido', invalid_connector_auth: 'La autorización no es válida', diff --git a/packages/phrases-ui/src/locales/fr/error/index.ts b/packages/phrases-ui/src/locales/fr/error/index.ts index 574d73889..4f8e446d8 100644 --- a/packages/phrases-ui/src/locales/fr/error/index.ts +++ b/packages/phrases-ui/src/locales/fr/error/index.ts @@ -12,9 +12,6 @@ const error = { "Le nom d'utilisateur ne doit contenir que des lettres, des chiffres ou des caractères de soulignement.", invalid_email: "L'email n'est pas valide", invalid_phone: "Le numéro de téléphone n'est pas valide", - password_min_length: 'Le mot de passe doit comporter un minimum de {{min}} caractères.', - invalid_password: - 'Le mot de passe doit contenir au minimum {{min}} caractères et doit inclure une combinaison de lettres, de chiffres et de symboles.', passwords_do_not_match: 'Les mots de passe ne correspondent pas', invalid_passcode: 'Le code est invalide', invalid_connector_auth: "L'autorisation n'est pas valide", diff --git a/packages/phrases-ui/src/locales/it/error/index.ts b/packages/phrases-ui/src/locales/it/error/index.ts index 3d91c976f..51e71997c 100644 --- a/packages/phrases-ui/src/locales/it/error/index.ts +++ b/packages/phrases-ui/src/locales/it/error/index.ts @@ -10,9 +10,6 @@ const error = { username_invalid_charset: "L'username dovrebbe contenere solo lettere, numeri o underscore.", invalid_email: "L'email non è valida", invalid_phone: 'Il numero di telefono non è valido', - password_min_length: 'La password richiede un minimo di {{min}} caratteri', - invalid_password: - 'La password richiede un minimo di {{min}} caratteri e contiene una combinazione di lettere, numeri e simboli.', passwords_do_not_match: 'Le password non corrispondono. Per favore prova di nuovo.', invalid_passcode: 'Il codice di verifica non è valido', invalid_connector_auth: "L'autorizzazione è invalida", diff --git a/packages/phrases-ui/src/locales/ja/error/index.ts b/packages/phrases-ui/src/locales/ja/error/index.ts index f9445b267..986f81d5b 100644 --- a/packages/phrases-ui/src/locales/ja/error/index.ts +++ b/packages/phrases-ui/src/locales/ja/error/index.ts @@ -11,9 +11,6 @@ const error = { 'ユーザー名は文字、数字、またはアンダースコアのみを含める必要があります。', invalid_email: 'メールアドレスが無効です', invalid_phone: '電話番号が無効です', - password_min_length: 'パスワードは{{min}}文字以上である必要があります', - invalid_password: - 'パスワードは{{min}}文字以上で、文字、数字、および記号の組み合わせである必要があります。', passwords_do_not_match: 'パスワードが一致しません。もう一度お試しください。', invalid_passcode: '検証コードが無効です', invalid_connector_auth: '認証が無効です', diff --git a/packages/phrases-ui/src/locales/ko/error/index.ts b/packages/phrases-ui/src/locales/ko/error/index.ts index 72b123477..e151af7b9 100644 --- a/packages/phrases-ui/src/locales/ko/error/index.ts +++ b/packages/phrases-ui/src/locales/ko/error/index.ts @@ -10,8 +10,6 @@ const error = { username_invalid_charset: '사용자 이름은 문자, 숫자, _(밑줄 문자) 로만 이루어져야 해요.', invalid_email: '이메일이 유효하지 않아요.', invalid_phone: '휴대전화번호가 유효하지 않아요.', - password_min_length: '비밀번호는 최소 {{min}} 자리로 이루어져야 해요.', - invalid_password: '비밀번호는 최소 {{min}}자 이상이며 문자, 숫자 및 기호의 조합이어야 해요.', passwords_do_not_match: '비밀번호가 일치하지 않아요.', invalid_passcode: '비밀번호가 유효하지 않아요.', invalid_connector_auth: '인증이 유효하지 않아요.', diff --git a/packages/phrases-ui/src/locales/pl-pl/error/index.ts b/packages/phrases-ui/src/locales/pl-pl/error/index.ts index fe7dc0f12..fa19bf3a7 100644 --- a/packages/phrases-ui/src/locales/pl-pl/error/index.ts +++ b/packages/phrases-ui/src/locales/pl-pl/error/index.ts @@ -11,9 +11,6 @@ const error = { 'Nazwa użytkownika powinna zawierać tylko litery, liczby lub podkreślenia.', invalid_email: 'Nieprawidłowy adres e-mail', invalid_phone: 'Nieprawidłowy numer telefonu', - password_min_length: 'Hasło wymaga minimum {{min}} znaków', - invalid_password: - 'Hasło wymaga minimum {{min}} znaków i zawiera kombinację liter, cyfr oraz symboli.', passwords_do_not_match: 'Hasła nie pasują do siebie. Proszę spróbuj ponownie.', invalid_passcode: 'Nieprawidłowy kod weryfikacyjny', invalid_connector_auth: 'Nieprawidłowa autoryzacja', diff --git a/packages/phrases-ui/src/locales/pt-br/error/index.ts b/packages/phrases-ui/src/locales/pt-br/error/index.ts index b389b997e..163bf03bf 100644 --- a/packages/phrases-ui/src/locales/pt-br/error/index.ts +++ b/packages/phrases-ui/src/locales/pt-br/error/index.ts @@ -10,9 +10,6 @@ const error = { username_invalid_charset: 'O nome de usuário deve conter apenas letras, números ou sublinhados.', invalid_email: 'O e-mail é inválido', invalid_phone: 'O número de telefone é inválido', - password_min_length: 'A senha requer um mínimo de {{min}} caracteres', - invalid_password: - 'A senha requer um mínimo de {{min}} caracteres e contém uma mistura de letras, números e símbolos.', passwords_do_not_match: 'Suas senhas não correspondem. Por favor, tente novamente.', invalid_passcode: 'O código de verificação é inválido', invalid_connector_auth: 'A autorização é inválida', diff --git a/packages/phrases-ui/src/locales/pt-pt/error/index.ts b/packages/phrases-ui/src/locales/pt-pt/error/index.ts index decbf3ea2..2ce03279c 100644 --- a/packages/phrases-ui/src/locales/pt-pt/error/index.ts +++ b/packages/phrases-ui/src/locales/pt-pt/error/index.ts @@ -11,9 +11,6 @@ const error = { 'O nome de utilizador deve conter apenas letras, números ou underscores.', invalid_email: 'O email é inválido', invalid_phone: 'O número de telefone é inválido', - password_min_length: 'A password requer um mínimo de {{min}} caracteres', - invalid_password: - 'A senha requer um mínimo de {{min}} caracteres e contém uma mistura de letras, números e símbolos.', passwords_do_not_match: 'As passwords não coincidem', invalid_passcode: 'O código de verificação é inválido.', invalid_connector_auth: 'A autorização é inválida', diff --git a/packages/phrases-ui/src/locales/ru/error/index.ts b/packages/phrases-ui/src/locales/ru/error/index.ts index 71f594da2..9bab30f5a 100644 --- a/packages/phrases-ui/src/locales/ru/error/index.ts +++ b/packages/phrases-ui/src/locales/ru/error/index.ts @@ -11,9 +11,6 @@ const error = { 'Имя пользователя должно содержать только буквы, цифры или символы подчеркивания', invalid_email: 'Электронная почта указана неправильно', invalid_phone: 'Номер телефона указан неправильно', - password_min_length: 'Пароль должен быть минимум {{min}} символов', - invalid_password: - 'Пароль должен содержать минимум {{min}} символов, включая буквы, цифры и символы.', passwords_do_not_match: 'Пароли не совпадают. Пожалуйста, попробуйте еще раз.', invalid_passcode: 'Неправильный код подтверждения', invalid_connector_auth: 'Авторизация недействительна', diff --git a/packages/phrases-ui/src/locales/tr-tr/error/index.ts b/packages/phrases-ui/src/locales/tr-tr/error/index.ts index 4342b1143..a51bc224a 100644 --- a/packages/phrases-ui/src/locales/tr-tr/error/index.ts +++ b/packages/phrases-ui/src/locales/tr-tr/error/index.ts @@ -10,9 +10,6 @@ const error = { username_invalid_charset: 'Kullanıcı adı yalnızca harf,sayı veya alt çizgi içermeli.', invalid_email: 'E-posta adresi geçersiz', invalid_phone: 'Telefon numarası geçersiz', - password_min_length: 'Şifre en az {{min}} karakterden oluşmalıdır', - invalid_password: - 'Şifre en az {{min}} karakter gerektirir ve harf, sayı ve sembol karışımı içerir.', passwords_do_not_match: 'Şifreler eşleşmiyor', invalid_passcode: 'Doğrulama kodu geçersiz', invalid_connector_auth: 'Yetki geçersiz', diff --git a/packages/phrases-ui/src/locales/zh-cn/error/index.ts b/packages/phrases-ui/src/locales/zh-cn/error/index.ts index 345caab5b..7829da519 100644 --- a/packages/phrases-ui/src/locales/zh-cn/error/index.ts +++ b/packages/phrases-ui/src/locales/zh-cn/error/index.ts @@ -10,8 +10,6 @@ const error = { username_invalid_charset: '用户名只能包含英文字母、数字或下划线。', invalid_email: '无效的邮箱', invalid_phone: '无效的手机号', - password_min_length: '密码最少需要 {{min}} 个字符', - invalid_password: '密码至少需要 {{min}} 个字符,并包含字母、数字和符号的组合。', passwords_do_not_match: '两次输入的密码不一致,请重试。', invalid_passcode: '无效的验证码', invalid_connector_auth: '登录失败', diff --git a/packages/phrases-ui/src/locales/zh-hk/error/index.ts b/packages/phrases-ui/src/locales/zh-hk/error/index.ts index aa1ebee7e..ce1eaa4ae 100644 --- a/packages/phrases-ui/src/locales/zh-hk/error/index.ts +++ b/packages/phrases-ui/src/locales/zh-hk/error/index.ts @@ -10,8 +10,6 @@ const error = { username_invalid_charset: '用戶名只能包含英文字母、數字或下劃線。', invalid_email: '無效的電子郵件', invalid_phone: '無效的手機號碼', - password_min_length: '密碼最少需要 {{min}} 個字符', - invalid_password: '密碼至少需要 {{min}} 個字符,並包含字母、數字和符號的組合。', passwords_do_not_match: '兩次輸入的密碼不一致,請重試。', invalid_passcode: '無效的驗證碼', invalid_connector_auth: '登錄失敗', diff --git a/packages/phrases-ui/src/locales/zh-tw/error/index.ts b/packages/phrases-ui/src/locales/zh-tw/error/index.ts index 3583f10e5..56c8e9bb7 100644 --- a/packages/phrases-ui/src/locales/zh-tw/error/index.ts +++ b/packages/phrases-ui/src/locales/zh-tw/error/index.ts @@ -10,8 +10,6 @@ const error = { username_invalid_charset: '使用者名稱只能包含英文字母、數字或下劃線。', invalid_email: '無效的郵箱', invalid_phone: '無效的手機號', - password_min_length: '密碼最少需要 {{min}} 個字符', - invalid_password: '密碼至少需要 {{min}} 個字符,並包含字母、數字和符號的組合。', passwords_do_not_match: '兩次輸入的密碼不一致,請重試。', invalid_passcode: '無效的驗證碼', invalid_connector_auth: '登錄失敗', diff --git a/packages/phrases/src/locales/de/translation/admin-console/errors.ts b/packages/phrases/src/locales/de/translation/admin-console/errors.ts index daaa43e35..c0beb288b 100644 --- a/packages/phrases/src/locales/de/translation/admin-console/errors.ts +++ b/packages/phrases/src/locales/de/translation/admin-console/errors.ts @@ -13,8 +13,6 @@ const errors = { more_details: 'Mehr Details', username_pattern_error: 'Der Benutzername sollte nur Buchstaben, Zahlen oder Unterstriche enthalten und nicht mit einer Zahl beginnen.', - password_pattern_error: - 'Das Passwort benötigt mindestens {{min}} Zeichen und enthält eine Mischung aus Buchstaben, Zahlen und Symbolen.', email_pattern_error: 'Die E-Mail-Adresse ist ungültig.', phone_pattern_error: 'Die Telefonnummer ist ungültig.', insecure_contexts: 'Unsichere Kontexte (nicht-HTTPS) werden nicht unterstützt.', diff --git a/packages/phrases/src/locales/de/translation/admin-console/profile.ts b/packages/phrases/src/locales/de/translation/admin-console/profile.ts index 08a4c231d..a4d0fa52a 100644 --- a/packages/phrases/src/locales/de/translation/admin-console/profile.ts +++ b/packages/phrases/src/locales/de/translation/admin-console/profile.ts @@ -36,7 +36,6 @@ const profile = { verify_via_password: 'Überprüfen per Passwort', show_password: 'Passwort zeigen', required: 'Passwort ist erforderlich', - min_length: 'Das Passwort muss mindestens {{min}} Zeichen lang sein', do_not_match: 'Die Passwörter stimmen nicht überein. Bitte versuchen Sie es erneut.', }, code: { diff --git a/packages/phrases/src/locales/en/translation/admin-console/errors.ts b/packages/phrases/src/locales/en/translation/admin-console/errors.ts index f06496a94..3f607fc2e 100644 --- a/packages/phrases/src/locales/en/translation/admin-console/errors.ts +++ b/packages/phrases/src/locales/en/translation/admin-console/errors.ts @@ -13,8 +13,6 @@ const errors = { more_details: 'More details', username_pattern_error: 'Username should only contain letters, numbers, or underscore and should not start with a number.', - password_pattern_error: - 'Password requires a minimum of {{min}} characters and contains a mix of letters, numbers, and symbols.', email_pattern_error: 'The email address is invalid.', phone_pattern_error: 'The phone number is invalid.', insecure_contexts: 'Insecure contexts (non-HTTPS) are not supported.', diff --git a/packages/phrases/src/locales/en/translation/admin-console/profile.ts b/packages/phrases/src/locales/en/translation/admin-console/profile.ts index 715325e30..67eb3b579 100644 --- a/packages/phrases/src/locales/en/translation/admin-console/profile.ts +++ b/packages/phrases/src/locales/en/translation/admin-console/profile.ts @@ -35,7 +35,6 @@ const profile = { verify_via_password: 'Verify via password', show_password: 'Show password', required: 'Password is required', - min_length: 'Password requires a minimum of {{min}} characters', do_not_match: 'Passwords do not match. Please try again.', }, code: { diff --git a/packages/phrases/src/locales/es/translation/admin-console/errors.ts b/packages/phrases/src/locales/es/translation/admin-console/errors.ts index ba3484380..7bf179505 100644 --- a/packages/phrases/src/locales/es/translation/admin-console/errors.ts +++ b/packages/phrases/src/locales/es/translation/admin-console/errors.ts @@ -13,8 +13,6 @@ const errors = { more_details: 'Más detalles', username_pattern_error: 'El nombre de usuario solo debe contener letras, números o guiones bajos y no debe comenzar con un número.', - password_pattern_error: - 'La contraseña requiere un mínimo de {{min}} caracteres y contiene una combinación de letras, números y símbolos.', email_pattern_error: 'La dirección de correo electrónico no es válida.', phone_pattern_error: 'El número de teléfono no es válido.', insecure_contexts: 'Los contextos inseguros (no HTTPS) no son compatibles.', diff --git a/packages/phrases/src/locales/es/translation/admin-console/profile.ts b/packages/phrases/src/locales/es/translation/admin-console/profile.ts index 3cae2e8c3..88950bd52 100644 --- a/packages/phrases/src/locales/es/translation/admin-console/profile.ts +++ b/packages/phrases/src/locales/es/translation/admin-console/profile.ts @@ -37,7 +37,6 @@ const profile = { verify_via_password: 'Verificar mediante contraseña', show_password: 'Mostrar contraseña', required: 'Se requiere contraseña', - min_length: 'La contraseña requiere un mínimo de {{min}} caracteres', do_not_match: 'Las contraseñas no coinciden. Inténtelo de nuevo.', }, code: { diff --git a/packages/phrases/src/locales/fr/translation/admin-console/errors.ts b/packages/phrases/src/locales/fr/translation/admin-console/errors.ts index 408268d9c..ae7b6089a 100644 --- a/packages/phrases/src/locales/fr/translation/admin-console/errors.ts +++ b/packages/phrases/src/locales/fr/translation/admin-console/errors.ts @@ -13,8 +13,6 @@ const errors = { more_details: 'Plus de détails', username_pattern_error: "Le nom d'utilisateur ne doit contenir que des lettres, des chiffres ou des traits de soulignement et ne doit pas commencer par un chiffre.", - password_pattern_error: - 'Le mot de passe nécessite un minimum de {{min}} caractères et contient un mélange de lettres, de chiffres et de symboles.', email_pattern_error: "L'adresse e-mail n'est pas valide.", phone_pattern_error: 'Le numéro de téléphone n’est pas valide.', insecure_contexts: 'Les contextes non sécurisés (non HTTPS) ne sont pas pris en charge.', diff --git a/packages/phrases/src/locales/fr/translation/admin-console/profile.ts b/packages/phrases/src/locales/fr/translation/admin-console/profile.ts index ffac8d0b4..ce07d0b84 100644 --- a/packages/phrases/src/locales/fr/translation/admin-console/profile.ts +++ b/packages/phrases/src/locales/fr/translation/admin-console/profile.ts @@ -36,7 +36,6 @@ const profile = { verify_via_password: 'Vérifier via mot de passe', show_password: 'Afficher le mot de passe', required: 'Le mot de passe est obligatoire', - min_length: 'Le mot de passe doit comporter au minimum {{min}} caractères', do_not_match: 'Les mots de passe ne correspondent pas. Veuillez réessayer.', }, code: { diff --git a/packages/phrases/src/locales/it/translation/admin-console/errors.ts b/packages/phrases/src/locales/it/translation/admin-console/errors.ts index 5d59e39e0..adf3a4fb9 100644 --- a/packages/phrases/src/locales/it/translation/admin-console/errors.ts +++ b/packages/phrases/src/locales/it/translation/admin-console/errors.ts @@ -13,8 +13,6 @@ const errors = { more_details: 'Ulteriori dettagli', username_pattern_error: 'Il nome utente dovrebbe contenere solo lettere, numeri, o trattini bassi e non dovrebbe iniziare con un numero.', - password_pattern_error: - 'La password richiede un minimo di {{min}} caratteri e contiene una combinazione di lettere, numeri e simboli.', email_pattern_error: "L'indirizzo email non è valido.", phone_pattern_error: 'Il numero di telefono non è valido.', insecure_contexts: 'I contesti non sicuri (non HTTPS) non sono supportati.', diff --git a/packages/phrases/src/locales/it/translation/admin-console/profile.ts b/packages/phrases/src/locales/it/translation/admin-console/profile.ts index 5555635e7..c7cf8e790 100644 --- a/packages/phrases/src/locales/it/translation/admin-console/profile.ts +++ b/packages/phrases/src/locales/it/translation/admin-console/profile.ts @@ -35,7 +35,6 @@ const profile = { verify_via_password: 'Verifica tramite password', show_password: 'Mostra password', required: 'La password è obbligatoria', - min_length: 'La password deve contenere almeno {{min}} caratteri', do_not_match: 'Le password non corrispondono. Riprova.', }, code: { diff --git a/packages/phrases/src/locales/ja/translation/admin-console/errors.ts b/packages/phrases/src/locales/ja/translation/admin-console/errors.ts index b6f8483f4..6771c6c79 100644 --- a/packages/phrases/src/locales/ja/translation/admin-console/errors.ts +++ b/packages/phrases/src/locales/ja/translation/admin-console/errors.ts @@ -13,8 +13,6 @@ const errors = { more_details: '詳細を見る', username_pattern_error: 'ユーザー名には、文字、数字、またはアンダースコアしか含めることができず、数字で始めることはできません。', - password_pattern_error: - 'パスワードには、{{min}}文字以上の文字列と文字、数字、およびシンボルが必要です。', email_pattern_error: 'メールアドレスが無効です。', phone_pattern_error: '電話番号が無効です。', insecure_contexts: '安全でないコンテキスト(ノンHTTP)はサポートされていません。', diff --git a/packages/phrases/src/locales/ja/translation/admin-console/profile.ts b/packages/phrases/src/locales/ja/translation/admin-console/profile.ts index 9df66ad16..6d67e12c7 100644 --- a/packages/phrases/src/locales/ja/translation/admin-console/profile.ts +++ b/packages/phrases/src/locales/ja/translation/admin-console/profile.ts @@ -35,7 +35,6 @@ const profile = { verify_via_password: 'パスワードを使って確認する', show_password: 'パスワードを表示する', required: 'パスワードが必要です', - min_length: 'パスワードは{{min}}文字以上である必要があります', do_not_match: 'パスワードが一致しません。もう一度お試しください。', }, code: { diff --git a/packages/phrases/src/locales/ko/translation/admin-console/errors.ts b/packages/phrases/src/locales/ko/translation/admin-console/errors.ts index f5c8d0843..95d5992f0 100644 --- a/packages/phrases/src/locales/ko/translation/admin-console/errors.ts +++ b/packages/phrases/src/locales/ko/translation/admin-console/errors.ts @@ -13,7 +13,6 @@ const errors = { more_details: '자세히', username_pattern_error: '아이디는 반드시 문자, 숫자, _ 만으로 이루어져야 하며, 숫자로 시작하면 안 돼요.', - password_pattern_error: '비밀번호에는 최소 {{min}}자의 문자, 숫자, 특수문자가 포함되어야 해요.', email_pattern_error: '이메일 형식이 유효하지 않아요.', phone_pattern_error: '전화번호 형식이 유효하지 않아요.', insecure_contexts: '비보안 연결(non-HTTPS)는 지원하지 않아요.', diff --git a/packages/phrases/src/locales/ko/translation/admin-console/profile.ts b/packages/phrases/src/locales/ko/translation/admin-console/profile.ts index 2c963ebca..b92291174 100644 --- a/packages/phrases/src/locales/ko/translation/admin-console/profile.ts +++ b/packages/phrases/src/locales/ko/translation/admin-console/profile.ts @@ -34,7 +34,6 @@ const profile = { verify_via_password: '비밀번호로 인증', show_password: '비밀번호 보이기', required: '비밀번호 필요', - min_length: '비밀번호는 최소 {{min}} 글자여야 해요.', do_not_match: '비밀번호가 일치하지 않아요. 다시 시도해 주세요.', }, code: { diff --git a/packages/phrases/src/locales/pl-pl/translation/admin-console/errors.ts b/packages/phrases/src/locales/pl-pl/translation/admin-console/errors.ts index 2f9fef232..eaebb6d0a 100644 --- a/packages/phrases/src/locales/pl-pl/translation/admin-console/errors.ts +++ b/packages/phrases/src/locales/pl-pl/translation/admin-console/errors.ts @@ -13,8 +13,6 @@ const errors = { more_details: 'Więcej szczegółów', username_pattern_error: 'Nazwa użytkownika powinna zawierać tylko litery, cyfry lub znak podkreślenia i nie powinna zaczynać się od cyfry.', - password_pattern_error: - 'Hasło wymaga minimum {{min}} znaków i zawiera kombinację liter, cyfr i symboli.', email_pattern_error: 'Adres e-mail jest nieprawidłowy.', phone_pattern_error: 'Numer telefonu jest nieprawidłowy.', insecure_contexts: 'Nieobsługiwane są niebezpieczne konteksty (non-HTTPS).', diff --git a/packages/phrases/src/locales/pl-pl/translation/admin-console/profile.ts b/packages/phrases/src/locales/pl-pl/translation/admin-console/profile.ts index 9a4d65058..c1049e0f9 100644 --- a/packages/phrases/src/locales/pl-pl/translation/admin-console/profile.ts +++ b/packages/phrases/src/locales/pl-pl/translation/admin-console/profile.ts @@ -35,7 +35,6 @@ const profile = { verify_via_password: 'Zweryfikuj za pomocą hasła', show_password: 'Pokaż hasło', required: 'Hasło jest wymagane', - min_length: 'Hasło wymaga co najmniej {{min}} znaków.', do_not_match: 'Hasła nie pasują do siebie. Spróbuj ponownie.', }, code: { diff --git a/packages/phrases/src/locales/pt-br/translation/admin-console/errors.ts b/packages/phrases/src/locales/pt-br/translation/admin-console/errors.ts index 815c4fe21..49db32bd6 100644 --- a/packages/phrases/src/locales/pt-br/translation/admin-console/errors.ts +++ b/packages/phrases/src/locales/pt-br/translation/admin-console/errors.ts @@ -13,8 +13,6 @@ const errors = { more_details: 'Mais detalhes', username_pattern_error: 'O nome de usuário deve conter apenas letras, números ou sublinhado e não deve começar com um número.', - password_pattern_error: - 'A senha requer um mínimo de {{min}} caracteres e contém uma mistura de letras, números e símbolos.', email_pattern_error: 'O endereço de e-mail é inválido.', phone_pattern_error: 'O número de telefone é inválido.', insecure_contexts: 'Contextos inseguros (não-HTTPS) não são suportados.', diff --git a/packages/phrases/src/locales/pt-br/translation/admin-console/profile.ts b/packages/phrases/src/locales/pt-br/translation/admin-console/profile.ts index 40d9f731f..3ae9d5f59 100644 --- a/packages/phrases/src/locales/pt-br/translation/admin-console/profile.ts +++ b/packages/phrases/src/locales/pt-br/translation/admin-console/profile.ts @@ -35,7 +35,6 @@ const profile = { verify_via_password: 'Verificar via senha', show_password: 'Mostrar senha', required: 'Senha obrigatória', - min_length: 'A senha requer um mínimo de {{min}} caracteres', do_not_match: 'As senhas não coincidem. Tente novamente.', }, code: { diff --git a/packages/phrases/src/locales/pt-pt/translation/admin-console/errors.ts b/packages/phrases/src/locales/pt-pt/translation/admin-console/errors.ts index 27f8b15ff..7c3b388f2 100644 --- a/packages/phrases/src/locales/pt-pt/translation/admin-console/errors.ts +++ b/packages/phrases/src/locales/pt-pt/translation/admin-console/errors.ts @@ -13,8 +13,6 @@ const errors = { more_details: 'Mais detalhes', username_pattern_error: 'O nome de utilizador deve conter apenas letras, números ou underscores e não deve começar com um número.', - password_pattern_error: - 'A password deve conter pelo menos {{min}} caracteres e ter uma combinação de letras, números e símbolos.', email_pattern_error: 'O endereço de e-mail é inválido.', phone_pattern_error: 'O número de telefone é inválido.', insecure_contexts: 'Contextos inseguros (não HTTPS) não são compatíveis.', diff --git a/packages/phrases/src/locales/pt-pt/translation/admin-console/profile.ts b/packages/phrases/src/locales/pt-pt/translation/admin-console/profile.ts index c96d2b348..2ce9213f7 100644 --- a/packages/phrases/src/locales/pt-pt/translation/admin-console/profile.ts +++ b/packages/phrases/src/locales/pt-pt/translation/admin-console/profile.ts @@ -36,7 +36,6 @@ const profile = { verify_via_password: 'Verificar através da palavra-passe', show_password: 'Mostrar palavra-passe', required: 'Palavra-passe é obrigatória', - min_length: 'A palavra-passe requer um mínimo de {{min}} caracteres', do_not_match: 'As palavras-passe não correspondem. Por favor, tente novamente.', }, code: { diff --git a/packages/phrases/src/locales/ru/translation/admin-console/errors.ts b/packages/phrases/src/locales/ru/translation/admin-console/errors.ts index a1b113d16..2df6388ee 100644 --- a/packages/phrases/src/locales/ru/translation/admin-console/errors.ts +++ b/packages/phrases/src/locales/ru/translation/admin-console/errors.ts @@ -13,8 +13,6 @@ const errors = { more_details: 'Больше информации', username_pattern_error: 'Имя пользователя должно состоять только из букв, цифр или подчеркивания и не должно начинаться с цифры.', - password_pattern_error: - 'Пароль должен содержать не менее {{min}} символов и состоять из букв, цифр и символов.', email_pattern_error: 'Адрес электронной почты недействителен.', phone_pattern_error: 'Номер телефона недействителен.', insecure_contexts: 'Небезопасные контексты (нет HTTPS) не поддерживаются.', diff --git a/packages/phrases/src/locales/ru/translation/admin-console/profile.ts b/packages/phrases/src/locales/ru/translation/admin-console/profile.ts index b75dca59b..4e835f841 100644 --- a/packages/phrases/src/locales/ru/translation/admin-console/profile.ts +++ b/packages/phrases/src/locales/ru/translation/admin-console/profile.ts @@ -36,7 +36,6 @@ const profile = { verify_via_password: 'Проверить через пароль', show_password: 'Показать пароль', required: 'Пароль обязателен', - min_length: 'Пароль должен содержать не менее {{min}} символов', do_not_match: 'Пароли не совпадают. Попробуйте еще раз.', }, code: { diff --git a/packages/phrases/src/locales/tr-tr/translation/admin-console/errors.ts b/packages/phrases/src/locales/tr-tr/translation/admin-console/errors.ts index 1c126edab..83c46842c 100644 --- a/packages/phrases/src/locales/tr-tr/translation/admin-console/errors.ts +++ b/packages/phrases/src/locales/tr-tr/translation/admin-console/errors.ts @@ -13,8 +13,6 @@ const errors = { more_details: 'Daha çok detay', username_pattern_error: 'Kullanıcı adı yalnızca harf, sayı veya alt çizgi içermeli ve bir sayı ile başlamamalıdır.', - password_pattern_error: - 'Şifre en az {{min}} karakter ve harfler, sayılar ve simgelerin bir karışımını içermelidir.', email_pattern_error: 'E-posta adresi geçersiz.', phone_pattern_error: 'Telefon numarası geçersiz.', insecure_contexts: 'Güvenli olmayan bağlamlar (HTTPS olmayan) desteklenmez.', diff --git a/packages/phrases/src/locales/tr-tr/translation/admin-console/profile.ts b/packages/phrases/src/locales/tr-tr/translation/admin-console/profile.ts index 4b2e722d4..597898d2d 100644 --- a/packages/phrases/src/locales/tr-tr/translation/admin-console/profile.ts +++ b/packages/phrases/src/locales/tr-tr/translation/admin-console/profile.ts @@ -36,7 +36,6 @@ const profile = { verify_via_password: 'Şifre ile doğrula', show_password: 'Şifreyi göster', required: 'Şifre gerekli', - min_length: 'Şifre en az {{min}} karakterden oluşmalıdır', do_not_match: 'Şifreler eşleşmiyor. Tekrar deneyin.', }, code: { diff --git a/packages/phrases/src/locales/zh-cn/translation/admin-console/errors.ts b/packages/phrases/src/locales/zh-cn/translation/admin-console/errors.ts index 55ef743bd..e6a45aad8 100644 --- a/packages/phrases/src/locales/zh-cn/translation/admin-console/errors.ts +++ b/packages/phrases/src/locales/zh-cn/translation/admin-console/errors.ts @@ -12,7 +12,6 @@ const errors = { required_field_missing_plural: '至少需要输入一个{{field}}', more_details: '查看详情', username_pattern_error: '用户名只能包含英文字母、数字或下划线,且不以数字开头。', - password_pattern_error: '密码至少需要 {{min}} 个字符,且必须包含字母、数字和符号。', email_pattern_error: '邮箱地址无效', phone_pattern_error: '手机号码无效', insecure_contexts: '不支持不安全的上下文(非 HTTPS)。', diff --git a/packages/phrases/src/locales/zh-cn/translation/admin-console/profile.ts b/packages/phrases/src/locales/zh-cn/translation/admin-console/profile.ts index 8357d991f..87beb8894 100644 --- a/packages/phrases/src/locales/zh-cn/translation/admin-console/profile.ts +++ b/packages/phrases/src/locales/zh-cn/translation/admin-console/profile.ts @@ -33,7 +33,6 @@ const profile = { verify_via_password: '通过密码验证', show_password: '显示密码', required: '密码不能为空', - min_length: '密码最少需要{{min}}个字符', do_not_match: '密码不匹配,请重新输入。', }, code: { diff --git a/packages/phrases/src/locales/zh-hk/translation/admin-console/errors.ts b/packages/phrases/src/locales/zh-hk/translation/admin-console/errors.ts index 3bc792259..6254a979b 100644 --- a/packages/phrases/src/locales/zh-hk/translation/admin-console/errors.ts +++ b/packages/phrases/src/locales/zh-hk/translation/admin-console/errors.ts @@ -12,7 +12,6 @@ const errors = { required_field_missing_plural: '至少需要輸入一個{{field}}', more_details: '查看詳情', username_pattern_error: '用戶名只能包含英文字母、數字或下劃線,且不以數字開頭。', - password_pattern_error: '密碼至少需要 {{min}} 個字符,且必須包含字母、數字和符號。', email_pattern_error: '郵箱地址無效', phone_pattern_error: '手機號碼無效', insecure_contexts: '不支持不安全的上下文(非 HTTPS)。', diff --git a/packages/phrases/src/locales/zh-hk/translation/admin-console/profile.ts b/packages/phrases/src/locales/zh-hk/translation/admin-console/profile.ts index f4376c789..d85c48fdc 100644 --- a/packages/phrases/src/locales/zh-hk/translation/admin-console/profile.ts +++ b/packages/phrases/src/locales/zh-hk/translation/admin-console/profile.ts @@ -33,7 +33,6 @@ const profile = { verify_via_password: '通過密碼驗證', show_password: '顯示密碼', required: '密碼不能為空', - min_length: '密碼最少需要{{min}}個字符', do_not_match: '密碼不匹配,請重新輸入。', }, code: { diff --git a/packages/phrases/src/locales/zh-tw/translation/admin-console/errors.ts b/packages/phrases/src/locales/zh-tw/translation/admin-console/errors.ts index ff9bdbc5f..2027a2107 100644 --- a/packages/phrases/src/locales/zh-tw/translation/admin-console/errors.ts +++ b/packages/phrases/src/locales/zh-tw/translation/admin-console/errors.ts @@ -12,7 +12,6 @@ const errors = { required_field_missing_plural: '至少需要輸入一個{{field}}', more_details: '查看詳情', username_pattern_error: '用戶名只能包含英文字母、數字或下劃線,且不以數字開頭。', - password_pattern_error: '密碼至少需要{{min}}個字符,且必須包含字母、數字和符號。', email_pattern_error: '郵箱地址無效', phone_pattern_error: '手機號碼無效', insecure_contexts: '不支援不安全的上下文(非 HTTPS)。', diff --git a/packages/phrases/src/locales/zh-tw/translation/admin-console/profile.ts b/packages/phrases/src/locales/zh-tw/translation/admin-console/profile.ts index 8689025b6..be95d841c 100644 --- a/packages/phrases/src/locales/zh-tw/translation/admin-console/profile.ts +++ b/packages/phrases/src/locales/zh-tw/translation/admin-console/profile.ts @@ -33,7 +33,6 @@ const profile = { verify_via_password: '通過密碼驗證', show_password: '顯示密碼', required: '密碼不能為空', - min_length: '密碼最少需要{{min}}個字符', do_not_match: '密碼不匹配,請重新輸入。', }, code: { diff --git a/packages/toolkit/core-kit/src/regex.test.ts b/packages/toolkit/core-kit/src/regex.test.ts deleted file mode 100644 index c959c5bad..000000000 --- a/packages/toolkit/core-kit/src/regex.test.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { passwordRegEx } from './regex.js'; - -describe('passwordRegEx', () => { - it('should match password with at least 8 chars', () => { - expect(passwordRegEx.test('1234ddf')).toBeFalsy(); - expect(passwordRegEx.test('1234ddf!')).toBeTruthy(); - }); - - it('password should not contains non ASCII visible chars', () => { - expect(passwordRegEx.test('a1?aaaaa测试')).toBeFalsy(); - - expect(passwordRegEx.test('a1?aaaaa测试')).toBeFalsy(); - - expect(passwordRegEx.test('a1?aaaaa🌹')).toBeFalsy(); - - expect(passwordRegEx.test('a1?aaaaa')).toBeTruthy(); - }); - - describe('password should contains at least 2 of 3 types of chars', () => { - const singleTypeChars = ['aaaaaaaa', '11111111', '!@#$%^&*(())']; - - it.each(singleTypeChars)('single typed password format %p should be invalid', (password) => { - expect(passwordRegEx.test(password)).toBeFalsy(); - }); - - const doubleTypeChars = [ - 'asdfghj1', - 'asdfghj$', - '1234567@', - '1234567a', - '!@#$%^&1', - '!@#$%^&a', - ]; - - it.each(doubleTypeChars)('double typed password format %p should be valid', (password) => { - expect(passwordRegEx.test(password)).toBeTruthy(); - }); - - const tripleTypeChars = ['ASD!@#45', 'a!@#$%123', '1ASDfg654', '*123345GHJ']; - - it.each(tripleTypeChars)('triple typed password format %p should be valid', (password) => { - expect(passwordRegEx.test(password)).toBeTruthy(); - }); - }); -}); diff --git a/packages/toolkit/core-kit/src/regex.ts b/packages/toolkit/core-kit/src/regex.ts index 3b010ad08..f7a2a2700 100644 --- a/packages/toolkit/core-kit/src/regex.ts +++ b/packages/toolkit/core-kit/src/regex.ts @@ -7,12 +7,3 @@ export const mobileUriSchemeProtocolRegEx = /^[a-z][\d+_a-z-]*(\.[\d+_a-z-]+)+:$ export const hexColorRegEx = /^#[\da-f]{3}([\da-f]{3})?$/i; export const dateRegex = /^\d{4}(-\d{2}){2}/; export const noSpaceRegEx = /^\S+$/; - -const atLeastOneDigitAndOneLetters = /(?=.*\d)(?=.*[A-Za-z])/; -const atLeastOneDigitAndOneSpecialChar = /(?=.*\d)(?=.*[!"#$%&'()*+,./:;<=>?@[\]^_`{|}~-])/; -const atLeastOneLetterAndOneSpecialChar = /(?=.*[A-Za-z])(?=.*[!"#$%&'()*+,./:;<=>?@[\]^_`{|}~-])/; -const allowedChars = /[\w!"#$%&'()*+,./:;<=>?@[\]^`{|}~-]{8,}/; - -export const passwordRegEx = new RegExp( - `^(${atLeastOneDigitAndOneLetters.source}|${atLeastOneDigitAndOneSpecialChar.source}|${atLeastOneLetterAndOneSpecialChar.source})${allowedChars.source}$` -); diff --git a/packages/ui/src/utils/form.test.ts b/packages/ui/src/utils/form.test.ts deleted file mode 100644 index 6ec4e8fe7..000000000 --- a/packages/ui/src/utils/form.test.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { validatePassword } from './form'; - -describe('password format', () => { - it('password min length should be 8', () => { - expect(validatePassword('a1?')).toEqual({ code: 'password_min_length', data: { min: 8 } }); - expect(validatePassword('aaa123aa')).toBe(undefined); - }); - - it('password should not contains non ASCII visible chars', () => { - expect(validatePassword('a1?aaaaa测试')).toEqual({ - code: 'invalid_password', - data: { min: 8 }, - }); - - expect(validatePassword('a1?aaaaa测试')).toEqual({ - code: 'invalid_password', - data: { min: 8 }, - }); - - expect(validatePassword('a1?aaaaa🌹')).toEqual({ - code: 'invalid_password', - data: { min: 8 }, - }); - - expect(validatePassword('a1?aaaaa')).toBe(undefined); - }); - - describe('password should contains at least 2 of 3 types of chars', () => { - const singleTypeChars = ['aaaaaaaa', '11111111', '!@#$%^&*(())']; - - it.each(singleTypeChars)('single typed password format %p should be invalid', (password) => { - expect(validatePassword(password)).toEqual({ - code: 'invalid_password', - data: { min: 8 }, - }); - }); - - const doubleTypeChars = [ - 'asdfghj1', - 'asdfghj$', - '1234567@', - '1234567a', - '!@#$%^&1', - '!@#$%^&a', - ]; - - it.each(doubleTypeChars)('double typed password format %p should be valid', (password) => { - expect(validatePassword(password)).toBe(undefined); - }); - - const tripleTypeChars = ['ASD!@#45', 'a!@#$%123', '1ASDfg654', '*123345GHJ']; - - it.each(tripleTypeChars)('triple typed password format %p should be valid', (password) => { - expect(validatePassword(password)).toBe(undefined); - }); - }); -}); diff --git a/packages/ui/src/utils/form.ts b/packages/ui/src/utils/form.ts index 66a74ffe7..36f47f8d2 100644 --- a/packages/ui/src/utils/form.ts +++ b/packages/ui/src/utils/form.ts @@ -10,15 +10,6 @@ import { parseE164Number, parsePhoneNumber } from '@/utils/country-code'; const { t } = i18next; -// We validate the password format step by step to provide more detailed error messages at the front end. -// The overall password format regex passwordRegEx is defined in the '@logto/core-kit' need to align these two. -const specialChars = /[!"#$%&'()*+,./:;<=>?@[\]^_`{|}~-]/; -const digits = /\d/; -const letters = /[A-Za-z]/; -const allowedChars = /^[\w!"#$%&'()*+,./:;<=>?@[\]^`{|}~-]*$/; - -export const passwordMinLength = 8; - export const validateUsername = (username: string): ErrorType | undefined => { if (!username) { return 'username_required'; @@ -55,25 +46,6 @@ export const validatePhone = (value: string): ErrorType | undefined => { } }; -export const validatePassword = (value: string): ErrorType | undefined => { - const hasDigits = digits.test(value); - const hasLetters = letters.test(value); - const hasSpecialChars = specialChars.test(value); - const nonInvalidChars = allowedChars.test(value); - - if (!nonInvalidChars) { - return { code: 'invalid_password', data: { min: passwordMinLength } }; - } - - if (value.length < passwordMinLength) { - return { code: 'password_min_length', data: { min: passwordMinLength } }; - } - - if ((hasDigits ? 1 : 0) + (hasLetters ? 1 : 0) + (hasSpecialChars ? 1 : 0) < 2) { - return { code: 'invalid_password', data: { min: passwordMinLength } }; - } -}; - export const validateIdentifierField = (type: IdentifierInputType, value: string) => { switch (type) { case SignInIdentifier.Username: {