From 1cf38c1768cd353820c19f9d9264fdc34d78477d Mon Sep 17 00:00:00 2001 From: Dream Hunter Date: Sun, 18 Aug 2024 14:58:57 +0800 Subject: [PATCH] feat: UI: add WorkerConfig && release v0.7.3 (#421) --- CHANGELOG.md | 2 +- frontend/src/views/Admin.vue | 33 ++++++++++++++-- frontend/src/views/admin/WorkerConfig.vue | 42 +++++++++++++++++++++ worker/src/admin_api/index.ts | 4 ++ worker/src/admin_api/worker_config.ts | 46 +++++++++++++++++++++++ 5 files changed, 122 insertions(+), 5 deletions(-) create mode 100644 frontend/src/views/admin/WorkerConfig.vue create mode 100644 worker/src/admin_api/worker_config.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 733f0923..53a550cf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,7 @@ # CHANGE LOG -## main(v0.7.3) +## v0.7.3 - feat: worker 增加 `ADDRESS_CHECK_REGEX`, address name 的正则表达式, 只用于检查,符合条件将通过检查 - fix: UI 修复登录页面 tab 激活图标错位 diff --git a/frontend/src/views/Admin.vue b/frontend/src/views/Admin.vue index 9f2f8f10..1765b0e2 100644 --- a/frontend/src/views/Admin.vue +++ b/frontend/src/views/Admin.vue @@ -22,6 +22,7 @@ import Appearance from './common/Appearance.vue'; import Telegram from './admin/Telegram.vue'; import Webhook from './admin/Webhook.vue'; import MailWebhook from './admin/MailWebhook.vue'; +import WorkerConfig from './admin/WorkerConfig.vue'; const { adminAuth, showAdminAuth, adminTab, loading, @@ -44,6 +45,7 @@ const { t } = useI18n({ accessHeader: 'Admin Password', accessTip: 'Please enter the admin password', mails: 'Emails', + qucickSetup: 'Quick Setup', account: 'Account', account_create: 'Create Account', account_settings: 'Account Settings', @@ -58,6 +60,7 @@ const { t } = useI18n({ webhookSettings: 'Webhook Settings', statistics: 'Statistics', maintenance: 'Maintenance', + workerconfig: 'Worker Config', appearance: 'Appearance', about: 'About', ok: 'OK', @@ -67,6 +70,7 @@ const { t } = useI18n({ accessHeader: 'Admin 密码', accessTip: '请输入 Admin 密码', mails: '邮件', + qucickSetup: '快速设置', account: '账号', account_create: '创建账号', account_settings: '账号设置', @@ -81,6 +85,7 @@ const { t } = useI18n({ webhookSettings: 'Webhook 设置', statistics: '统计', maintenance: '维护', + workerconfig: 'Worker 配置', appearance: '外观', about: '关于', ok: '确定', @@ -111,6 +116,19 @@ onMounted(async () => { + + + + + + + + + + + + + @@ -151,14 +169,14 @@ onMounted(async () => { + + + - - - @@ -166,7 +184,14 @@ onMounted(async () => { - + + + + + + + + diff --git a/frontend/src/views/admin/WorkerConfig.vue b/frontend/src/views/admin/WorkerConfig.vue new file mode 100644 index 00000000..212ac98e --- /dev/null +++ b/frontend/src/views/admin/WorkerConfig.vue @@ -0,0 +1,42 @@ + + + + + diff --git a/worker/src/admin_api/index.ts b/worker/src/admin_api/index.ts index f597de9d..efaa16da 100644 --- a/worker/src/admin_api/index.ts +++ b/worker/src/admin_api/index.ts @@ -10,6 +10,7 @@ import admin_user_api from './admin_user_api' import webhook_settings from './webhook_settings' import mail_webhook_settings from './mail_webhook_settings' import oauth2_settings from './oauth2_settings' +import worker_config from './worker_config' export const api = new Hono() @@ -326,3 +327,6 @@ api.post("/admin/webhook/settings", webhook_settings.saveWebhookSettings); api.get("/admin/mail_webhook/settings", mail_webhook_settings.getWebhookSettings); api.post("/admin/mail_webhook/settings", mail_webhook_settings.saveWebhookSettings); api.post("/admin/mail_webhook/test", mail_webhook_settings.testWebhookSettings); + +// worker config +api.get("/admin/worker/configs", worker_config.getConfig); diff --git a/worker/src/admin_api/worker_config.ts b/worker/src/admin_api/worker_config.ts new file mode 100644 index 00000000..f1400f89 --- /dev/null +++ b/worker/src/admin_api/worker_config.ts @@ -0,0 +1,46 @@ +import { Context } from 'hono'; + +import { HonoCustomType } from '../types'; +import { getAdminPasswords, getBooleanValue, getDefaultDomains, getDomains, getIntValue, getPasswords, getStringArray, getStringValue, getUserRoles } from '../utils'; +import { CONSTANTS } from '../constants'; +import { isS3Enabled } from '../mails_api/s3_attachment'; + +export default { + getConfig: async (c: Context) => { + return c.json({ + "TITLE": c.env.TITLE, + "HAS_PASSWORD": getPasswords(c).length, + "HAS_ADMIN_PASSWORDS": getAdminPasswords(c).length, + "ANNOUNCEMENT": getStringValue(c.env.ANNOUNCEMENT), + + "PREFIX": c.env.PREFIX, + "ADDRESS_CHECK_REGEX": getStringValue(c.env.ADDRESS_CHECK_REGEX), + "ADDRESS_REGEX": getStringValue(c.env.ADDRESS_REGEX), + "MIN_ADDRESS_LEN": getIntValue(c.env.MIN_ADDRESS_LEN, 1), + "MAX_ADDRESS_LEN": getIntValue(c.env.MAX_ADDRESS_LEN, 30), + + "FORWARD_ADDRESS_LIST": getStringArray(c.env.FORWARD_ADDRESS_LIST), + "DEFAULT_DOMAINS": getDefaultDomains(c), + "DOMAINS": getDomains(c), + "DOMAIN_LABELS": getStringArray(c.env.DOMAIN_LABELS), + + "HAS_JWT_SECRET": !!getStringValue(c.env.JWT_SECRET), + + "ADMIN_USER_ROLE": getStringValue(c.env.ADMIN_USER_ROLE), + "USER_DEFAULT_ROLE": getStringValue(c.env.USER_DEFAULT_ROLE), + "USER_ROLES": getUserRoles(c), + "NO_LIMIT_SEND_ROLE": getStringValue(c.env.NO_LIMIT_SEND_ROLE), + + "ADMIN_CONTACT": c.env.ADMIN_CONTACT, + "ENABLE_USER_CREATE_EMAIL": getBooleanValue(c.env.ENABLE_USER_CREATE_EMAIL), + "ENABLE_USER_DELETE_EMAIL": getBooleanValue(c.env.ENABLE_USER_DELETE_EMAIL), + "ENABLE_AUTO_REPLY": getBooleanValue(c.env.ENABLE_AUTO_REPLY), + "COPYRIGHT": c.env.COPYRIGHT, + "ENABLE_WEBHOOK": getBooleanValue(c.env.ENABLE_WEBHOOK), + "S3_ENABLED": isS3Enabled(c), + "VERSION": CONSTANTS.VERSION, + "DISABLE_SHOW_GITHUB": !getBooleanValue(c.env.DISABLE_SHOW_GITHUB), + "DISABLE_ADMIN_PASSWORD_CHECK": getBooleanValue(c.env.DISABLE_ADMIN_PASSWORD_CHECK) + }) + } +}