From f21da41d6d2fa2ab906494ec5d575a74a4558b5c Mon Sep 17 00:00:00 2001 From: chaos-zhu Date: Sat, 17 Aug 2024 17:20:10 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20=E6=94=AF=E6=8C=81=E8=80=81?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E9=80=9A=E7=9F=A5=E6=9C=8D=E5=8A=A1=E5=8D=87?= =?UTF-8?q?=E7=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/app/controller/user.js | 6 +- server/app/db.js | 64 ++++++++++--------- server/app/schedule/expired-notify.js | 8 +-- server/app/utils/notify.js | 3 +- .../setting/components/global-notify.vue | 11 +--- .../setting/components/notify-config.vue | 22 +++++-- 6 files changed, 63 insertions(+), 51 deletions(-) diff --git a/server/app/controller/user.js b/server/app/controller/user.js index 48ef48a..7b9cc57 100644 --- a/server/app/controller/user.js +++ b/server/app/controller/user.js @@ -26,7 +26,7 @@ const login = async ({ res, request }) => { if (loginErrCount >= allowErrCount) { const { ip, country, city } = await getNetIPInfo(clientIp) // 异步发送通知&禁止登录 - asyncSendNotice('err_login', '登录错误提醒', `错误登录次数: ${ loginErrTotal }
地点:${ country + city }
IP: ${ ip }`) + asyncSendNotice('err_login', '登录错误提醒', `错误登录次数: ${ loginErrTotal }\n地点:${ country + city }\nIP: ${ ip }`) forbidLogin = true loginErrCount = 0 @@ -82,7 +82,7 @@ const beforeLoginHandler = async (clientIp, jwtExpires) => { consola.info('登录成功:', new Date(), { ip, country, city }) // 邮件登录通知 - asyncSendNotice('login', '登录提醒', `地点:${ country + city }
IP: ${ ip }`) + asyncSendNotice('login', '登录提醒', `地点:${ country + city }\nIP: ${ ip }`) global.loginRecord.unshift(clientIPInfo) if (global.loginRecord.length > 10) global.loginRecord = global.loginRecord.slice(0, 10) @@ -102,7 +102,7 @@ const updatePwd = async ({ res, request }) => { keyObj.pwd = newPwd await writeKey(keyObj) - asyncSendNotice('updatePwd', '用户密码修改提醒', `原用户名:${ user }
更新用户名: ${ newLoginName }`) + asyncSendNotice('updatePwd', '用户密码修改提醒', `原用户名:${ user }\n更新用户名: ${ newLoginName }`) res.success({ data: true, msg: 'success' }) } diff --git a/server/app/db.js b/server/app/db.js index 78dfc00..129fd16 100644 --- a/server/app/db.js +++ b/server/app/db.js @@ -48,41 +48,47 @@ function initGroupDB() { function initNotifyDB() { return new Promise((resolve, reject) => { const notifyDB = new NotifyDB().getInstance() - notifyDB.count({}, async (err, count) => { + notifyDB.find({}, async (err, notifyList) => { if (err) { consola.log('初始化notifyDB错误:', err) reject(err) } else { - if (count === 0) { + let defaultData = [{ + 'type': 'login', + 'desc': '登录面板提醒', + 'sw': false + }, { + 'type': 'err_login', + 'desc': '登录错误提醒(连续5次)', + 'sw': false + }, { + 'type': 'updatePwd', + 'desc': '修改密码提醒', + 'sw': false + }, { + 'type': 'host_login', + 'desc': '服务器登录提醒', + 'sw': false + }, { + 'type': 'onekey_complete', + 'desc': '批量指令执行完成提醒', + 'sw': false + }, { + 'type': 'host_expired', + 'desc': '服务器到期提醒', + 'sw': false + }] + if (notifyList.length === 0) { consola.log('初始化notifyDB✔') - const defaultData = [{ - 'type': 'login', - 'desc': '登录面板提醒', - 'sw': true - }, { - 'type': 'err_login', - 'desc': '登录错误提醒(连续5次)', - 'sw': true - }, { - 'type': 'updatePwd', - 'desc': '修改密码提醒', - 'sw': true - }, { - 'type': 'host_login', - 'desc': '服务器登录提醒', - 'sw': true - }, { - 'type': 'onekey_complete', - 'desc': '批量指令执行完成提醒', - 'sw': true - }, { - 'type': 'host_expired', - 'desc': '服务器到期提醒', - 'sw': true - } ] - await writeNotifyList(defaultData) + } else { + consola.log('同步notifyDB✔') + defaultData = defaultData.map(defaultItem => { + let item = notifyList.find(notify => notify.type === defaultItem.type) + defaultItem.sw = item ? item.sw : false + return item + }) } - + await writeNotifyList(defaultData) } resolve() }) diff --git a/server/app/schedule/expired-notify.js b/server/app/schedule/expired-notify.js index 5b3e3b8..61b2504 100644 --- a/server/app/schedule/expired-notify.js +++ b/server/app/schedule/expired-notify.js @@ -11,15 +11,15 @@ const expiredNotifyJob = async () => { const restDay = Number(((expired - Date.now()) / (1000 * 60 * 60 * 24)).toFixed(1)) console.log(Date.now(), restDay) let title = '服务器到期提醒' - let content = `别名: ${ name }
IP: ${ host }
到期时间:${ formatTimestamp(expired, 'week') }
控制台: ${ consoleUrl || '未填写' }` + let content = `别名: ${ name }\nIP: ${ host }\n到期时间:${ formatTimestamp(expired, 'week') }\n控制台: ${ consoleUrl || '未填写' }` if(0 <= restDay && restDay <= 1) { - let temp = '有服务器将在一天后到期,请关注
' + let temp = '有服务器将在一天后到期,请关注\n' asyncSendNotice('host_expired', title, temp + content) }else if(3 <= restDay && restDay < 4) { - let temp = '有服务器将在三天后到期,请关注
' + let temp = '有服务器将在三天后到期,请关注\n' asyncSendNotice('host_expired', title, temp + content) }else if(7 <= restDay && restDay < 8) { - let temp = '有服务器将在七天后到期,请关注
' + let temp = '有服务器将在七天后到期,请关注\n' asyncSendNotice('host_expired', title, temp + content) } } diff --git a/server/app/utils/notify.js b/server/app/utils/notify.js index 5f068d6..79b7180 100644 --- a/server/app/utils/notify.js +++ b/server/app/utils/notify.js @@ -57,12 +57,13 @@ function sendEmail({ service, user, pass }, title, content) { async function asyncSendNotice(noticeAction, title, content) { try { let sw = await getNotifySwByType(noticeAction) // 获取对应动作的通知开关 + console.log(noticeAction, sw) if (!sw) return let notifyConfig = await readNotifyConfig() let { type } = notifyConfig if (!type) return consola.error('通知类型不存在: ', type) title = `EasyNode-${ title }` - content += `
通知发送时间:${ new Date() }` + content += `\n通知发送时间:${ new Date() }` switch (type) { case 'sct': let { sendKey } = notifyConfig['sct'] diff --git a/web/src/views/setting/components/global-notify.vue b/web/src/views/setting/components/global-notify.vue index de0c2d7..a166a97 100644 --- a/web/src/views/setting/components/global-notify.vue +++ b/web/src/views/setting/components/global-notify.vue @@ -1,14 +1,9 @@