From 211af2051332e13d5101b4f95a3e2a73a84de584 Mon Sep 17 00:00:00 2001 From: ThanhNguyxn Date: Sun, 4 Jan 2026 09:57:52 +0700 Subject: [PATCH 1/3] fix: hide domainList when loginDomain is disabled (fixes #220) --- mail-worker/src/service/setting-service.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mail-worker/src/service/setting-service.js b/mail-worker/src/service/setting-service.js index cccc6d54..533c9aa1 100644 --- a/mail-worker/src/service/setting-service.js +++ b/mail-worker/src/service/setting-service.js @@ -184,7 +184,7 @@ const settingService = { siteKey: settingRow.siteKey, background: settingRow.background, loginOpacity: settingRow.loginOpacity, - domainList: settingRow.domainList, + domainList: settingRow.loginDomain === 0 ? settingRow.domainList : [], regKey: settingRow.regKey, regVerifyOpen: settingRow.regVerifyOpen, addVerifyOpen: settingRow.addVerifyOpen, From 0525a123820cb492a1abfff704e53eebfc50987a Mon Sep 17 00:00:00 2001 From: ThanhNguyxn Date: Sun, 4 Jan 2026 11:46:02 +0700 Subject: [PATCH 2/3] fix: privacy leak in setting service and add scroll to bottom in email list --- mail-vue/src/components/email-scroll/index.vue | 8 ++++++++ mail-vue/src/i18n/en.js | 3 ++- mail-vue/src/i18n/zh.js | 3 ++- mail-worker/src/service/setting-service.js | 9 +++++---- mail-worker/src/service/user-service.js | 12 +++++++----- mail-worker/wrangler.toml | 2 +- 6 files changed, 25 insertions(+), 12 deletions(-) diff --git a/mail-vue/src/components/email-scroll/index.vue b/mail-vue/src/components/email-scroll/index.vue index 0cd2093e..329b480d 100644 --- a/mail-vue/src/components/email-scroll/index.vue +++ b/mail-vue/src/components/email-scroll/index.vue @@ -11,6 +11,7 @@
+ diff --git a/mail-vue/src/views/sys-setting/index.vue b/mail-vue/src/views/sys-setting/index.vue index 92c16e36..abd20368 100644 --- a/mail-vue/src/views/sys-setting/index.vue +++ b/mail-vue/src/views/sys-setting/index.vue @@ -120,6 +120,15 @@
+
+
Footer
+ +
@@ -413,6 +422,12 @@ {{ $t('save') }} + +
+ + {{ $t('save') }} + +
@@ -764,6 +779,7 @@ const localUpShow = ref(false) const accountStore = useAccountStore(); const userStore = useUserStore(); const editTitleShow = ref(false) +const editFooterShow = ref(false) const resendTokenFormShow = ref(false) const r2DomainShow = ref(false) const turnstileShow = ref(false) @@ -777,6 +793,7 @@ const settingStore = useSettingStore(); const uiStore = useUiStore(); const {settings: setting} = storeToRefs(settingStore); const editTitle = ref('') +const editFooter = ref('') const settingLoading = ref(false) const clearS3Loading = ref(false) const r2DomainInput = ref('') diff --git a/mail-worker/src/entity/setting.js b/mail-worker/src/entity/setting.js index 31bdd38e..32e54a6c 100644 --- a/mail-worker/src/entity/setting.js +++ b/mail-worker/src/entity/setting.js @@ -1,4 +1,4 @@ -import { sqliteTable, text, integer} from 'drizzle-orm/sqlite-core'; +import { sqliteTable, text, integer } from 'drizzle-orm/sqlite-core'; export const setting = sqliteTable('setting', { register: integer('register').default(0).notNull(), receive: integer('receive').default(0).notNull(), @@ -46,6 +46,7 @@ export const setting = sqliteTable('setting', { tgMsgTo: text('tg_msg_to').default('show').notNull(), tgMsgText: text('tg_msg_text').default('hide').notNull(), minEmailPrefix: integer('min_email_prefix').default(0).notNull(), - emailPrefixFilter: text('email_prefix_filter').default('').notNull() + emailPrefixFilter: text('email_prefix_filter').default('').notNull(), + footer: text('footer').default('').notNull() }); export default setting diff --git a/mail-worker/src/service/setting-service.js b/mail-worker/src/service/setting-service.js index 9aa1de59..886329a2 100644 --- a/mail-worker/src/service/setting-service.js +++ b/mail-worker/src/service/setting-service.js @@ -171,6 +171,14 @@ const settingService = { async websiteConfig(c) { const settingRow = await this.get(c, true); + let domainList = []; + try { + domainList = JSON.parse(settingRow.domainList); + } catch (e) { + if (settingRow.domainList && typeof settingRow.domainList === 'string') { + domainList = settingRow.domainList.split(',').map(d => d.trim()).filter(d => d); + } + } return { register: settingRow.register, @@ -185,7 +193,7 @@ const settingService = { siteKey: settingRow.siteKey, background: settingRow.background, loginOpacity: settingRow.loginOpacity, - domainList: settingRow.loginDomain === 1 ? settingRow.domainList : [], + domainList: settingRow.loginDomain === 1 ? domainList : [], regKey: settingRow.regKey, regVerifyOpen: settingRow.regVerifyOpen, addVerifyOpen: settingRow.addVerifyOpen, @@ -201,7 +209,8 @@ const settingService = { linuxdoClientId: settingRow.linuxdoClientId, linuxdoCallbackUrl: settingRow.linuxdoCallbackUrl, linuxdoSwitch: settingRow.linuxdoSwitch, - minEmailPrefix: settingRow.minEmailPrefix + minEmailPrefix: settingRow.minEmailPrefix, + footer: settingRow.footer }; } };