From a7e2e596bf16370ddc01cb36de57698010c4ea4f Mon Sep 17 00:00:00 2001 From: Nikhil <118773738+pablohashescobar@users.noreply.github.com> Date: Mon, 1 Dec 2025 18:56:14 +0530 Subject: [PATCH] [WEB-5518]: update magic code token to send code as 6 digit numbers (#8188) * refactor: simplify token generation in MagicCodeProvider by using a numeric approach * fix: update placeholder text for unique code input across multiple languages * refactor: replace token generation with a numeric approach for user email updates * fix: update placeholder text for unique code input in multiple languages to a numeric format * refactor: replace random token generation with secrets for enhanced security in user email updates and magic code provider --- apps/api/plane/app/views/user/base.py | 10 +--------- .../authentication/provider/credentials/magic_code.py | 11 ++--------- .../components/account/auth-forms/unique-code.tsx | 2 +- packages/i18n/src/locales/cs/translations.ts | 4 ++-- packages/i18n/src/locales/de/translations.ts | 4 ++-- packages/i18n/src/locales/en/core.ts | 2 +- packages/i18n/src/locales/en/translations.ts | 2 +- packages/i18n/src/locales/es/translations.ts | 2 +- packages/i18n/src/locales/fr/translations.ts | 4 ++-- packages/i18n/src/locales/id/translations.ts | 4 ++-- packages/i18n/src/locales/it/translations.ts | 4 ++-- packages/i18n/src/locales/ja/translations.ts | 4 ++-- packages/i18n/src/locales/ko/translations.ts | 4 ++-- packages/i18n/src/locales/pl/translations.ts | 4 ++-- packages/i18n/src/locales/pt-BR/translations.ts | 4 ++-- packages/i18n/src/locales/ro/translations.ts | 2 +- packages/i18n/src/locales/ru/translations.ts | 4 ++-- packages/i18n/src/locales/sk/translations.ts | 4 ++-- packages/i18n/src/locales/tr-TR/translations.ts | 2 +- packages/i18n/src/locales/ua/translations.ts | 4 ++-- packages/i18n/src/locales/vi-VN/translations.ts | 4 ++-- packages/i18n/src/locales/zh-CN/translations.ts | 4 ++-- packages/i18n/src/locales/zh-TW/translations.ts | 4 ++-- 23 files changed, 39 insertions(+), 54 deletions(-) diff --git a/apps/api/plane/app/views/user/base.py b/apps/api/plane/app/views/user/base.py index e9d6b04ee7..30b0391838 100644 --- a/apps/api/plane/app/views/user/base.py +++ b/apps/api/plane/app/views/user/base.py @@ -2,8 +2,6 @@ import uuid import json import logging -import random -import string import secrets # Django imports @@ -151,13 +149,7 @@ class UserEndpoint(BaseViewSet): # Include user ID to bind the code to the specific user cache_key = f"magic_email_update_{user.id}_{new_email}" ## Generate a random token - token = ( - "".join(secrets.choice(string.ascii_lowercase) for _ in range(4)) - + "-" - + "".join(secrets.choice(string.ascii_lowercase) for _ in range(4)) - + "-" - + "".join(secrets.choice(string.ascii_lowercase) for _ in range(4)) - ) + token = str(secrets.randbelow(900000) + 100000) # Store in cache with 10 minute expiration cache_data = json.dumps({"token": token}) cache.set(cache_key, cache_data, timeout=600) diff --git a/apps/api/plane/authentication/provider/credentials/magic_code.py b/apps/api/plane/authentication/provider/credentials/magic_code.py index 3f03572a47..e7c5cfff95 100644 --- a/apps/api/plane/authentication/provider/credentials/magic_code.py +++ b/apps/api/plane/authentication/provider/credentials/magic_code.py @@ -1,8 +1,7 @@ # Python imports import json import os -import random -import string +import secrets # Module imports @@ -50,13 +49,7 @@ class MagicCodeProvider(CredentialAdapter): def initiate(self): ## Generate a random token - token = ( - "".join(random.choices(string.ascii_lowercase, k=4)) - + "-" - + "".join(random.choices(string.ascii_lowercase, k=4)) - + "-" - + "".join(random.choices(string.ascii_lowercase, k=4)) - ) + token = str(secrets.randbelow(900000) + 100000) ri = redis_instance() diff --git a/apps/space/core/components/account/auth-forms/unique-code.tsx b/apps/space/core/components/account/auth-forms/unique-code.tsx index 473ad45c6d..fff0338371 100644 --- a/apps/space/core/components/account/auth-forms/unique-code.tsx +++ b/apps/space/core/components/account/auth-forms/unique-code.tsx @@ -113,7 +113,7 @@ export function AuthUniqueCodeForm(props: TAuthUniqueCodeForm) { name="code" value={uniqueCodeFormData.code} onChange={(e) => handleFormChange("code", e.target.value)} - placeholder="gets-sets-flys" + placeholder="123456" className="disable-autofill-style h-10 w-full border border-custom-border-100 !bg-custom-background-100 pr-12 placeholder:text-custom-text-400" autoFocus /> diff --git a/packages/i18n/src/locales/cs/translations.ts b/packages/i18n/src/locales/cs/translations.ts index 24e0010bc7..929b1c296b 100644 --- a/packages/i18n/src/locales/cs/translations.ts +++ b/packages/i18n/src/locales/cs/translations.ts @@ -74,7 +74,7 @@ export default { }, unique_code: { label: "Jedinečný kód", - placeholder: "gets-sets-flys", + placeholder: "123456", paste_code: "Vložte kód zaslaný na váš e-mail", requesting_new_code: "Žádám o nový kód", sending_code: "Odesílám kód", @@ -1544,7 +1544,7 @@ export default { }, code: { label: "Jedinečný kód", - placeholder: "gets-sets-flys", + placeholder: "123456", helper_text: "Ověřovací kód byl odeslán na váš nový e-mail.", errors: { required: "Jedinečný kód je povinný", diff --git a/packages/i18n/src/locales/de/translations.ts b/packages/i18n/src/locales/de/translations.ts index 58cd7879e7..b162b76a65 100644 --- a/packages/i18n/src/locales/de/translations.ts +++ b/packages/i18n/src/locales/de/translations.ts @@ -74,7 +74,7 @@ export default { }, unique_code: { label: "Einmaliger Code", - placeholder: "gets-sets-flys", + placeholder: "123456", paste_code: "Fügen Sie den an Ihre E-Mail gesendeten Code ein", requesting_new_code: "Neuen Code anfordern", sending_code: "Code wird gesendet", @@ -1562,7 +1562,7 @@ export default { }, code: { label: "Einmaliger Code", - placeholder: "gets-sets-flys", + placeholder: "123456", helper_text: "Verifizierungscode wurde an deine neue E-Mail gesendet.", errors: { required: "Einmaliger Code ist erforderlich", diff --git a/packages/i18n/src/locales/en/core.ts b/packages/i18n/src/locales/en/core.ts index bce2ee96eb..49b8f18a23 100644 --- a/packages/i18n/src/locales/en/core.ts +++ b/packages/i18n/src/locales/en/core.ts @@ -75,7 +75,7 @@ export default { }, unique_code: { label: "Unique code", - placeholder: "gets-sets-flys", + placeholder: "123456", paste_code: "Paste the code sent to your email", requesting_new_code: "Requesting new code", sending_code: "Sending code", diff --git a/packages/i18n/src/locales/en/translations.ts b/packages/i18n/src/locales/en/translations.ts index 35c3542f65..b5b186a433 100644 --- a/packages/i18n/src/locales/en/translations.ts +++ b/packages/i18n/src/locales/en/translations.ts @@ -1378,7 +1378,7 @@ export default { }, code: { label: "Unique code", - placeholder: "gets-sets-flys", + placeholder: "123456", helper_text: "Verification code sent to your new email.", errors: { required: "Unique code is required", diff --git a/packages/i18n/src/locales/es/translations.ts b/packages/i18n/src/locales/es/translations.ts index 3d9b6bb0d1..7b9380b695 100644 --- a/packages/i18n/src/locales/es/translations.ts +++ b/packages/i18n/src/locales/es/translations.ts @@ -1566,7 +1566,7 @@ export default { }, code: { label: "Código único", - placeholder: "gets-sets-flys", + placeholder: "123456", helper_text: "Código de verificación enviado a tu nuevo correo electrónico.", errors: { required: "El código único es obligatorio", diff --git a/packages/i18n/src/locales/fr/translations.ts b/packages/i18n/src/locales/fr/translations.ts index 996192b503..c42d0de095 100644 --- a/packages/i18n/src/locales/fr/translations.ts +++ b/packages/i18n/src/locales/fr/translations.ts @@ -74,7 +74,7 @@ export default { }, unique_code: { label: "Code unique", - placeholder: "gets-sets-flys", + placeholder: "123456", paste_code: "Collez le code envoyé à votre e-mail", requesting_new_code: "Demande d’un nouveau code", sending_code: "Envoi du code", @@ -1564,7 +1564,7 @@ export default { }, code: { label: "Code unique", - placeholder: "gets-sets-flys", + placeholder: "123456", helper_text: "Code de vérification envoyé à votre nouvel e-mail.", errors: { required: "Le code unique est requis", diff --git a/packages/i18n/src/locales/id/translations.ts b/packages/i18n/src/locales/id/translations.ts index ab17337e70..92ebde123e 100644 --- a/packages/i18n/src/locales/id/translations.ts +++ b/packages/i18n/src/locales/id/translations.ts @@ -74,7 +74,7 @@ export default { }, unique_code: { label: "Kode unik", - placeholder: "gets-sets-flys", + placeholder: "123456", paste_code: "Tempelkan kode yang dikirim ke email anda", requesting_new_code: "Meminta kode baru", sending_code: "Mengirim kode", @@ -1552,7 +1552,7 @@ export default { }, code: { label: "Kode unik", - placeholder: "gets-sets-flys", + placeholder: "123456", helper_text: "Kode verifikasi dikirim ke email baru Anda.", errors: { required: "Kode unik wajib diisi", diff --git a/packages/i18n/src/locales/it/translations.ts b/packages/i18n/src/locales/it/translations.ts index 99e944cc9f..25567aa4c2 100644 --- a/packages/i18n/src/locales/it/translations.ts +++ b/packages/i18n/src/locales/it/translations.ts @@ -74,7 +74,7 @@ export default { }, unique_code: { label: "Codice unico", - placeholder: "gets-sets-flys", + placeholder: "123456", paste_code: "Incolla il codice inviato alla tua email", requesting_new_code: "Richiesta di nuovo codice", sending_code: "Invio codice", @@ -1556,7 +1556,7 @@ export default { }, code: { label: "Codice univoco", - placeholder: "gets-sets-flys", + placeholder: "123456", helper_text: "Codice di verifica inviato alla tua nuova email.", errors: { required: "Il codice univoco è obbligatorio", diff --git a/packages/i18n/src/locales/ja/translations.ts b/packages/i18n/src/locales/ja/translations.ts index 6c11b62aae..95b12ef821 100644 --- a/packages/i18n/src/locales/ja/translations.ts +++ b/packages/i18n/src/locales/ja/translations.ts @@ -74,7 +74,7 @@ export default { }, unique_code: { label: "ユニークコード", - placeholder: "gets-sets-flys", + placeholder: "123456", paste_code: "メールで送信されたコードを貼り付けてください", requesting_new_code: "新しいコードをリクエスト中", sending_code: "コードを送信中", @@ -1543,7 +1543,7 @@ export default { }, code: { label: "認証コード", - placeholder: "gets-sets-flys", + placeholder: "123456", helper_text: "認証コードを新しいメールに送信しました。", errors: { required: "認証コードは必須です", diff --git a/packages/i18n/src/locales/ko/translations.ts b/packages/i18n/src/locales/ko/translations.ts index 0f5d93165b..c2cf1ca58c 100644 --- a/packages/i18n/src/locales/ko/translations.ts +++ b/packages/i18n/src/locales/ko/translations.ts @@ -74,7 +74,7 @@ export default { }, unique_code: { label: "고유 코드", - placeholder: "gets-sets-flys", + placeholder: "123456", paste_code: "이메일로 전송된 코드를 붙여넣기", requesting_new_code: "새 코드 요청 중", sending_code: "코드 전송 중", @@ -1536,7 +1536,7 @@ export default { }, code: { label: "고유 코드", - placeholder: "gets-sets-flys", + placeholder: "123456", helper_text: "인증 코드가 새 이메일로 전송되었습니다.", errors: { required: "고유 코드는 필수입니다", diff --git a/packages/i18n/src/locales/pl/translations.ts b/packages/i18n/src/locales/pl/translations.ts index a32a331e73..87559a3611 100644 --- a/packages/i18n/src/locales/pl/translations.ts +++ b/packages/i18n/src/locales/pl/translations.ts @@ -74,7 +74,7 @@ export default { }, unique_code: { label: "Unikalny kod", - placeholder: "gets-sets-flys", + placeholder: "123456", paste_code: "Wklej kod wysłany na Twój e-mail", requesting_new_code: "Żądanie nowego kodu", sending_code: "Wysyłanie kodu", @@ -1547,7 +1547,7 @@ export default { }, code: { label: "Unikalny kod", - placeholder: "gets-sets-flys", + placeholder: "123456", helper_text: "Kod weryfikacyjny wysłano na nowy e-mail.", errors: { required: "Unikalny kod jest wymagany", diff --git a/packages/i18n/src/locales/pt-BR/translations.ts b/packages/i18n/src/locales/pt-BR/translations.ts index 3e378c5492..c901a2b982 100644 --- a/packages/i18n/src/locales/pt-BR/translations.ts +++ b/packages/i18n/src/locales/pt-BR/translations.ts @@ -74,7 +74,7 @@ export default { }, unique_code: { label: "Código único", - placeholder: "gets-sets-flys", + placeholder: "123456", paste_code: "Cole o código enviado para seu email", requesting_new_code: "Solicitando novo código", sending_code: "Enviando código", @@ -1564,7 +1564,7 @@ export default { }, code: { label: "Código único", - placeholder: "gets-sets-flys", + placeholder: "123456", helper_text: "Código de verificação enviado para o novo e-mail.", errors: { required: "O código único é obrigatório", diff --git a/packages/i18n/src/locales/ro/translations.ts b/packages/i18n/src/locales/ro/translations.ts index 21354e9ca4..55758abf93 100644 --- a/packages/i18n/src/locales/ro/translations.ts +++ b/packages/i18n/src/locales/ro/translations.ts @@ -1556,7 +1556,7 @@ export default { }, code: { label: "Cod unic", - placeholder: "gets-sets-flys", + placeholder: "123456", helper_text: "Codul de verificare a fost trimis la noul e-mail.", errors: { required: "Codul unic este obligatoriu", diff --git a/packages/i18n/src/locales/ru/translations.ts b/packages/i18n/src/locales/ru/translations.ts index 8077ec4093..ba42e0a0c5 100644 --- a/packages/i18n/src/locales/ru/translations.ts +++ b/packages/i18n/src/locales/ru/translations.ts @@ -74,7 +74,7 @@ export default { }, unique_code: { label: "Уникальный код", - placeholder: "gets-sets-flys", + placeholder: "123456", paste_code: "Вставьте код, отправленный на ваш email", requesting_new_code: "Запрос нового кода", sending_code: "Отправка кода", @@ -1549,7 +1549,7 @@ export default { }, code: { label: "Уникальный код", - placeholder: "gets-sets-flys", + placeholder: "123456", helper_text: "Код подтверждения отправлен на ваш новый email.", errors: { required: "Уникальный код обязателен", diff --git a/packages/i18n/src/locales/sk/translations.ts b/packages/i18n/src/locales/sk/translations.ts index aa7f71689b..1e6aad7a4f 100644 --- a/packages/i18n/src/locales/sk/translations.ts +++ b/packages/i18n/src/locales/sk/translations.ts @@ -74,7 +74,7 @@ export default { }, unique_code: { label: "Jedinečný kód", - placeholder: "gets-sets-flys", + placeholder: "123456", paste_code: "Vložte kód zaslaný na váš e-mail", requesting_new_code: "Žiadam o nový kód", sending_code: "Odosielam kód", @@ -1547,7 +1547,7 @@ export default { }, code: { label: "Jedinečný kód", - placeholder: "gets-sets-flys", + placeholder: "123456", helper_text: "Overovací kód bol odoslaný na váš nový e-mail.", errors: { required: "Jedinečný kód je povinný", diff --git a/packages/i18n/src/locales/tr-TR/translations.ts b/packages/i18n/src/locales/tr-TR/translations.ts index 15b0807d20..b0a6d9bd5a 100644 --- a/packages/i18n/src/locales/tr-TR/translations.ts +++ b/packages/i18n/src/locales/tr-TR/translations.ts @@ -1551,7 +1551,7 @@ export default { }, code: { label: "Benzersiz kod", - placeholder: "gets-sets-flys", + placeholder: "123456", helper_text: "Doğrulama kodu yeni e-postanıza gönderildi.", errors: { required: "Benzersiz kod zorunludur", diff --git a/packages/i18n/src/locales/ua/translations.ts b/packages/i18n/src/locales/ua/translations.ts index 192b4acaa2..41f04088fa 100644 --- a/packages/i18n/src/locales/ua/translations.ts +++ b/packages/i18n/src/locales/ua/translations.ts @@ -74,7 +74,7 @@ export default { }, unique_code: { label: "Унікальний код", - placeholder: "gets-sets-flys", + placeholder: "123456", paste_code: "Вставте код, надісланий на вашу електронну пошту", requesting_new_code: "Запитую новий код", sending_code: "Надсилаю код", @@ -1551,7 +1551,7 @@ export default { }, code: { label: "Унікальний код", - placeholder: "gets-sets-flys", + placeholder: "123456", helper_text: "Код підтвердження надіслано на ваш новий email.", errors: { required: "Унікальний код є обов’язковим", diff --git a/packages/i18n/src/locales/vi-VN/translations.ts b/packages/i18n/src/locales/vi-VN/translations.ts index f43048db83..6755065a13 100644 --- a/packages/i18n/src/locales/vi-VN/translations.ts +++ b/packages/i18n/src/locales/vi-VN/translations.ts @@ -74,7 +74,7 @@ export default { }, unique_code: { label: "Mã duy nhất", - placeholder: "gets-sets-flys", + placeholder: "123456", paste_code: "Dán mã xác minh đã gửi đến email của bạn", requesting_new_code: "Đang yêu cầu mã mới", sending_code: "Đang gửi mã", @@ -1553,7 +1553,7 @@ export default { }, code: { label: "Mã duy nhất", - placeholder: "gets-sets-flys", + placeholder: "123456", helper_text: "Mã xác minh đã được gửi tới email mới của bạn.", errors: { required: "Mã duy nhất là bắt buộc", diff --git a/packages/i18n/src/locales/zh-CN/translations.ts b/packages/i18n/src/locales/zh-CN/translations.ts index 4b3cd17caf..8e6317d656 100644 --- a/packages/i18n/src/locales/zh-CN/translations.ts +++ b/packages/i18n/src/locales/zh-CN/translations.ts @@ -74,7 +74,7 @@ export default { }, unique_code: { label: "唯一码", - placeholder: "gets-sets-flys", + placeholder: "123456", paste_code: "粘贴发送到您邮箱的验证码", requesting_new_code: "正在请求新验证码", sending_code: "正在发送验证码", @@ -1527,7 +1527,7 @@ export default { }, code: { label: "验证码", - placeholder: "gets-sets-flys", + placeholder: "123456", helper_text: "验证码已发送至你的新邮箱。", errors: { required: "验证码为必填项", diff --git a/packages/i18n/src/locales/zh-TW/translations.ts b/packages/i18n/src/locales/zh-TW/translations.ts index c2e47f1b01..84508c2c05 100644 --- a/packages/i18n/src/locales/zh-TW/translations.ts +++ b/packages/i18n/src/locales/zh-TW/translations.ts @@ -74,7 +74,7 @@ export default { }, unique_code: { label: "唯一代碼", - placeholder: "gets-sets-flys", + placeholder: "123456", paste_code: "貼上傳送到您電子郵件的代碼", requesting_new_code: "正在請求新代碼", sending_code: "正在發送代碼", @@ -1528,7 +1528,7 @@ export default { }, code: { label: "驗證碼", - placeholder: "gets-sets-flys", + placeholder: "123456", helper_text: "驗證碼已傳送到你的新電子郵件。", errors: { required: "驗證碼為必填",