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 e9d6b04ee..30b039183 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 3f03572a4..e7c5cfff9 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 473ad45c6..fff033837 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 24e0010bc..929b1c296 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 58cd7879e..b162b76a6 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 bce2ee96e..49b8f18a2 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 35c3542f6..b5b186a43 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 3d9b6bb0d..7b9380b69 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 996192b50..c42d0de09 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 ab17337e7..92ebde123 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 99e944cc9..25567aa4c 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 6c11b62aa..95b12ef82 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 0f5d93165..c2cf1ca58 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 a32a331e7..87559a361 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 3e378c549..c901a2b98 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 21354e9ca..55758abf9 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 8077ec409..ba42e0a0c 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 aa7f71689..1e6aad7a4 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 15b0807d2..b0a6d9bd5 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 192b4acaa..41f04088f 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 f43048db8..6755065a1 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 4b3cd17ca..8e6317d65 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 c2e47f1b0..84508c2c0 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: "驗證碼為必填",