diff --git a/README.md b/README.md index 712917e..9489944 100644 --- a/README.md +++ b/README.md @@ -87,7 +87,7 @@ ## 发送消息的方式 1. 发送纯文本消息:直接 HTTP GET 请求 `https://你的域名/前缀/消息`,缺点是有字数限制,且只能是纯文本,这是微信模板消息的限制。 2. 发送 Markdown 消息,调用方式分为两种: - + GET 请求方式:`https://你的域名/前缀/?&title=消息标题&description=简短的消息描述&content=markdown格式的消息内容&email=test@qq.com` + + GET 请求方式:`https://你的域名/前缀/?&title=消息标题&description=简短的消息描述&content=markdown格式的消息内容&email=test@qq.com&token=private` + POST 请求方式:请求路径为 `https://你的域名/前缀/`,参数有: 1. `type`:(可选)发送方式 + `test`:通过微信公众号测试号推送 @@ -97,6 +97,7 @@ 3. `description`:(必填)消息的描述 4. `content`:(可选)消息内容,支持 Markdown 5. `email`:(可选)当该项不为空时,将强制覆盖 type 参数,强制消息类型为邮件消息,收件邮箱即此处指定的邮箱。如果 type 为 `email` 且 email 参数为空,则邮件将发送至用户设置的默认邮箱。 + 6. `token`:(可选)如果你设置了 ACCESS_TOKEN,则你需要附上该参数以验证身份。 ## 待做清单 - [x] 支持多用户。 diff --git a/common/message.js b/common/message.js index 9e1948c..c974097 100644 --- a/common/message.js +++ b/common/message.js @@ -1,10 +1,16 @@ -const { getUserDefaultMethod } = require('./token'); +const { getUserDefaultMethod, checkAccessToken } = require('./token'); const { pushWeChatMessage } = require('./wechat'); const { pushWeChatCorpMessage } = require('./wechat-corp'); const { pushEmailMessage } = require('./email'); const { Message } = require('../models'); async function processMessage(userPrefix, message) { + if (!checkAccessToken(userPrefix, message.token)) { + return { + success: false, + message: `invalid access token`, + }; + } if (message.email) { // If message has the attribute "email", override its type. message.type = 'email'; diff --git a/common/token.js b/common/token.js index 61918e2..6b6e4c8 100644 --- a/common/token.js +++ b/common/token.js @@ -75,9 +75,19 @@ function getUserDefaultMethod(prefix) { return user.defaultMethod; } +function checkAccessToken(prefix, token) { + let user = tokenStore.get(prefix); + if (user.accessToken === '') { + return true; + } else { + return user.accessToken === token; + } +} + module.exports = { initializeTokenStore, updateTokenStore, getUserDefaultMethod, tokenStore, + checkAccessToken, }; diff --git a/routers/index.js b/routers/index.js index 6cd3930..3ea3787 100644 --- a/routers/index.js +++ b/routers/index.js @@ -145,7 +145,7 @@ router.post('/configure', userRequired, async (req, res, next) => { for (let field in user) { let value = user[field]; value = value.trim(); - if (value) { + if (value || field === 'accessToken') { user[field] = value; } else { delete user[field]; diff --git a/routers/user.js b/routers/user.js index 4720acb..81c3c87 100644 --- a/routers/user.js +++ b/routers/user.js @@ -38,6 +38,7 @@ router.all('/:userPrefix', async (req, res, next) => { description: req.query.description || req.body.description || '无描述', content: req.query.content || req.body.content, email: req.query.email || req.body.email, + token: req.query.token || req.body.token, }; let result = await processMessage(userPrefix, message); res.json(result); diff --git a/views/index.ejs b/views/index.ejs index 1479ca6..5963895 100644 --- a/views/index.ejs +++ b/views/index.ejs @@ -18,7 +18,7 @@