🐛 bug fix
This commit is contained in:
@@ -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] 支持多用户。
|
||||
|
||||
+7
-1
@@ -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';
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
|
||||
+1
-1
@@ -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];
|
||||
|
||||
@@ -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);
|
||||
|
||||
+1
-1
@@ -18,7 +18,7 @@
|
||||
<div class="message-body">
|
||||
运行模式:<%= process.env.MODE === '1' ? "Heroku 模式" : "普通模式"%>
|
||||
<br>
|
||||
内存占用: <%= (process.memoryUsage().rss / (1024 *1024)).toFixed(2) %> MB
|
||||
内存占用:<%= (process.memoryUsage().rss / (1024 *1024)).toFixed(2) %> MB
|
||||
</div>
|
||||
</article>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user