From 97eb08a1ad918b03eef1cb797f67fe2fe25198ae Mon Sep 17 00:00:00 2001 From: xudaotutou <13435638964@163.com> Date: Thu, 20 Feb 2025 18:07:09 +0800 Subject: [PATCH 1/2] perf: sms env --- .../account/AccountCenter/index.tsx | 2 +- .../src/pages/api/platform/getAuthConfig.ts | 6 +-- frontend/desktop/src/services/backend/sms.ts | 4 +- frontend/desktop/src/services/enable.ts | 3 +- frontend/desktop/src/types/system.ts | 52 +++++++++---------- 5 files changed, 33 insertions(+), 34 deletions(-) diff --git a/frontend/desktop/src/components/account/AccountCenter/index.tsx b/frontend/desktop/src/components/account/AccountCenter/index.tsx index 3d45b3d3dfa..06c689934ed 100644 --- a/frontend/desktop/src/components/account/AccountCenter/index.tsx +++ b/frontend/desktop/src/components/account/AccountCenter/index.tsx @@ -348,7 +348,7 @@ export default function Index(props: Omit) { } /> )} - {conf.authConfig?.idp.sms.enabled && conf.authConfig.idp.sms.email.enabled && ( + {conf.authConfig?.idp.email.enabled && ( {t('common:email')}} RightElement={ diff --git a/frontend/desktop/src/pages/api/platform/getAuthConfig.ts b/frontend/desktop/src/pages/api/platform/getAuthConfig.ts index 45548571a8e..d9a0a5fd9e4 100644 --- a/frontend/desktop/src/pages/api/platform/getAuthConfig.ts +++ b/frontend/desktop/src/pages/api/platform/getAuthConfig.ts @@ -33,11 +33,11 @@ function genResAuthClientConfig(conf: AuthConfigType) { enabled: !!conf.idp.sms?.enabled, ali: { enabled: !!conf.idp.sms?.ali?.enabled - }, - email: { - enabled: !!conf.idp.sms?.email?.enabled } }, + email: { + enabled: !!conf.idp.email?.enabled + }, github: { enabled: !!conf.idp.github?.enabled, proxyAddress: conf.idp.github?.proxyAddress || '', diff --git a/frontend/desktop/src/services/backend/sms.ts b/frontend/desktop/src/services/backend/sms.ts index 7af35c726a3..ea5f9aa97fc 100644 --- a/frontend/desktop/src/services/backend/sms.ts +++ b/frontend/desktop/src/services/backend/sms.ts @@ -9,7 +9,7 @@ import Captcha, * as $Captcha from '@alicloud/captcha20230305'; import nodemailer from 'nodemailer'; const getTransporter = () => { if (!global.nodemailer) { - const emailConfig = global.AppConfig.desktop.auth.idp.sms?.email; + const emailConfig = global.AppConfig.desktop.auth.idp.email; if (!emailConfig) throw Error('email transporter config error'); const transporter = nodemailer.createTransport({ pool: true, @@ -118,7 +118,7 @@ export const captchaReq = async ({ captchaVerifyParam }: { captchaVerifyParam?: }, 3); }; export const emailSmsReq = async (email: string) => { - const emailConfig = global.AppConfig.desktop.auth.idp.sms?.email; + const emailConfig = global.AppConfig.desktop.auth.idp.email; if (!emailConfig) throw Error('config error'); const code = Math.floor(Math.random() * 900000 + 100000).toString(); diff --git a/frontend/desktop/src/services/enable.ts b/frontend/desktop/src/services/enable.ts index 4eb2b97ab63..e08e93ee7c2 100644 --- a/frontend/desktop/src/services/enable.ts +++ b/frontend/desktop/src/services/enable.ts @@ -7,8 +7,7 @@ export const enableGithub = () => global.AppConfig.desktop.auth.idp.github?.enab export const enableSms = () => global.AppConfig.desktop.auth.idp.sms?.enabled || false; export const enablePhoneSms = () => enableSms() && !!global.AppConfig.desktop.auth.idp.sms?.ali?.enabled; -export const enableEmailSms = () => - enableSms() && !!global.AppConfig.desktop.auth.idp.sms?.email?.enabled; +export const enableEmailSms = () => !!global.AppConfig.desktop.auth.idp.email?.enabled; export const enableWechat = () => global.AppConfig.desktop.auth.idp.wechat?.enabled || false; export const enableGoogle = () => global.AppConfig.desktop.auth.idp.google?.enabled || false; export const enableSignUp = () => global.AppConfig.desktop.auth.signUpEnabled || false; diff --git a/frontend/desktop/src/types/system.ts b/frontend/desktop/src/types/system.ts index acd2ec0e941..61b419dec5f 100644 --- a/frontend/desktop/src/types/system.ts +++ b/frontend/desktop/src/types/system.ts @@ -132,13 +132,13 @@ export type AuthConfigType = { accessKeyID: string; accessKeySecret?: string; }; - email?: { - enabled: boolean; - host: string; - port: number; - user: string; - password: string; - }; + }; + email?: { + enabled: boolean; + host: string; + port: number; + user: string; + password: string; }; }; captcha?: { @@ -154,7 +154,19 @@ export type AuthConfigType = { }; }; -export type AuthClientConfigType = DeepRequired< +export type AuthClientConfigType = { + idp: { + sms: { + enabled: boolean; + ali: { + enabled: boolean; + }; + }; + email: { + enabled: boolean; + }; + }; +} & DeepRequired< OmitPathArr< AuthConfigType, [ @@ -166,8 +178,8 @@ export type AuthClientConfigType = DeepRequired< 'idp.github.clientSecret', 'idp.wechat.clientSecret', 'idp.google.clientSecret', - 'idp.sms.ali', - 'idp.sms.email', + 'idp.sms', + 'idp.email', 'idp.oauth2.clientSecret', 'jwt', 'billingUrl', @@ -179,19 +191,7 @@ export type AuthClientConfigType = DeepRequired< 'captcha.ali.endpoint' ] > -> & { - idp: { - sms: { - enabled: boolean; - ali: { - enabled: boolean; - }; - email: { - enabled: boolean; - }; - }; - }; -}; +>; export type JwtConfigType = { internal?: string; @@ -313,11 +313,11 @@ export const DefaultAuthClientConfig: AuthClientConfigType = { enabled: false, ali: { enabled: false - }, - email: { - enabled: false } }, + email: { + enabled: false + }, oauth2: { enabled: false, callbackURL: '', From e232717100cfa20e72f55d26c9c7c11226c85d91 Mon Sep 17 00:00:00 2001 From: xudaotutou <13435638964@163.com> Date: Thu, 27 Feb 2025 18:40:23 +0800 Subject: [PATCH 2/2] feat:update email for english --- .../AccountCenter/SmsModify/SmsBind.tsx | 1 + frontend/desktop/src/services/backend/sms.ts | 125 ++++++++++-------- frontend/desktop/src/types/system.ts | 1 + 3 files changed, 72 insertions(+), 55 deletions(-) diff --git a/frontend/desktop/src/components/account/AccountCenter/SmsModify/SmsBind.tsx b/frontend/desktop/src/components/account/AccountCenter/SmsModify/SmsBind.tsx index 2da2083da0c..26bc704f9c1 100644 --- a/frontend/desktop/src/components/account/AccountCenter/SmsModify/SmsBind.tsx +++ b/frontend/desktop/src/components/account/AccountCenter/SmsModify/SmsBind.tsx @@ -162,6 +162,7 @@ const smsBindGen = (smsType: SmsType) => { { const code = Math.floor(Math.random() * 900000 + 100000).toString(); const transporter = getTransporter(); + const language = emailConfig.language === 'zh' ? 'zh' : 'en'; + + const getLocalizedContent = (content: string, subject: string, language: 'zh' | 'en') => { + return ` + + + + + + ${subject} + + + +
+ ${content} +
+ + + `; + }; + const subjectMap = { + zh: '【sealos】验证码', + en: '【sealos】Verification Code' + } as const; + const htmlMap = { + zh: getLocalizedContent( + ` +

尊敬的用户,您正在进行邮箱绑定操作。请输入以下验证码完成验证。

+

您的验证码是:

+

${code}

+ `, + subjectMap['zh'], + 'zh' + ), + en: getLocalizedContent( + ` +

Hi,
+ We received a request to link this email to an account. If this was you, please use the code below to confirm your email.

+

Your verifcation code:

+

${code}

+

If not, you can ignore this message or contact us for help.

+ `, + subjectMap['en'], + 'en' + ) + } as const; await retrySerially( () => transporter.sendMail({ from: emailConfig.user, to: email, - subject: '【sealos】验证码', - html: ` - - - - - 【sealos】验证码 - - - -
-

尊敬的用户,您正在进行邮箱绑定操作。请输入以下验证码完成验证。

-

您的验证码是:

-

${code}

-
- - ` + subject: subjectMap[language], + html: htmlMap[language] }), 3 ); diff --git a/frontend/desktop/src/types/system.ts b/frontend/desktop/src/types/system.ts index 61b419dec5f..0e9a407adba 100644 --- a/frontend/desktop/src/types/system.ts +++ b/frontend/desktop/src/types/system.ts @@ -139,6 +139,7 @@ export type AuthConfigType = { port: number; user: string; password: string; + language?: string; }; }; captcha?: {