🐛 bug fix
This commit is contained in:
@@ -87,7 +87,7 @@
|
|||||||
## 发送消息的方式
|
## 发送消息的方式
|
||||||
1. 发送纯文本消息:直接 HTTP GET 请求 `https://你的域名/前缀/消息`,缺点是有字数限制,且只能是纯文本,这是微信模板消息的限制。
|
1. 发送纯文本消息:直接 HTTP GET 请求 `https://你的域名/前缀/消息`,缺点是有字数限制,且只能是纯文本,这是微信模板消息的限制。
|
||||||
2. 发送 Markdown 消息,调用方式分为两种:
|
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://你的域名/前缀/`,参数有:
|
+ POST 请求方式:请求路径为 `https://你的域名/前缀/`,参数有:
|
||||||
1. `type`:(可选)发送方式
|
1. `type`:(可选)发送方式
|
||||||
+ `test`:通过微信公众号测试号推送
|
+ `test`:通过微信公众号测试号推送
|
||||||
@@ -97,6 +97,7 @@
|
|||||||
3. `description`:(必填)消息的描述
|
3. `description`:(必填)消息的描述
|
||||||
4. `content`:(可选)消息内容,支持 Markdown
|
4. `content`:(可选)消息内容,支持 Markdown
|
||||||
5. `email`:(可选)当该项不为空时,将强制覆盖 type 参数,强制消息类型为邮件消息,收件邮箱即此处指定的邮箱。如果 type 为 `email` 且 email 参数为空,则邮件将发送至用户设置的默认邮箱。
|
5. `email`:(可选)当该项不为空时,将强制覆盖 type 参数,强制消息类型为邮件消息,收件邮箱即此处指定的邮箱。如果 type 为 `email` 且 email 参数为空,则邮件将发送至用户设置的默认邮箱。
|
||||||
|
6. `token`:(可选)如果你设置了 ACCESS_TOKEN,则你需要附上该参数以验证身份。
|
||||||
|
|
||||||
## 待做清单
|
## 待做清单
|
||||||
- [x] 支持多用户。
|
- [x] 支持多用户。
|
||||||
|
|||||||
+7
-1
@@ -1,10 +1,16 @@
|
|||||||
const { getUserDefaultMethod } = require('./token');
|
const { getUserDefaultMethod, checkAccessToken } = require('./token');
|
||||||
const { pushWeChatMessage } = require('./wechat');
|
const { pushWeChatMessage } = require('./wechat');
|
||||||
const { pushWeChatCorpMessage } = require('./wechat-corp');
|
const { pushWeChatCorpMessage } = require('./wechat-corp');
|
||||||
const { pushEmailMessage } = require('./email');
|
const { pushEmailMessage } = require('./email');
|
||||||
const { Message } = require('../models');
|
const { Message } = require('../models');
|
||||||
|
|
||||||
async function processMessage(userPrefix, message) {
|
async function processMessage(userPrefix, message) {
|
||||||
|
if (!checkAccessToken(userPrefix, message.token)) {
|
||||||
|
return {
|
||||||
|
success: false,
|
||||||
|
message: `invalid access token`,
|
||||||
|
};
|
||||||
|
}
|
||||||
if (message.email) {
|
if (message.email) {
|
||||||
// If message has the attribute "email", override its type.
|
// If message has the attribute "email", override its type.
|
||||||
message.type = 'email';
|
message.type = 'email';
|
||||||
|
|||||||
@@ -75,9 +75,19 @@ function getUserDefaultMethod(prefix) {
|
|||||||
return user.defaultMethod;
|
return user.defaultMethod;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function checkAccessToken(prefix, token) {
|
||||||
|
let user = tokenStore.get(prefix);
|
||||||
|
if (user.accessToken === '') {
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return user.accessToken === token;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
initializeTokenStore,
|
initializeTokenStore,
|
||||||
updateTokenStore,
|
updateTokenStore,
|
||||||
getUserDefaultMethod,
|
getUserDefaultMethod,
|
||||||
tokenStore,
|
tokenStore,
|
||||||
|
checkAccessToken,
|
||||||
};
|
};
|
||||||
|
|||||||
+1
-1
@@ -145,7 +145,7 @@ router.post('/configure', userRequired, async (req, res, next) => {
|
|||||||
for (let field in user) {
|
for (let field in user) {
|
||||||
let value = user[field];
|
let value = user[field];
|
||||||
value = value.trim();
|
value = value.trim();
|
||||||
if (value) {
|
if (value || field === 'accessToken') {
|
||||||
user[field] = value;
|
user[field] = value;
|
||||||
} else {
|
} else {
|
||||||
delete user[field];
|
delete user[field];
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ router.all('/:userPrefix', async (req, res, next) => {
|
|||||||
description: req.query.description || req.body.description || '无描述',
|
description: req.query.description || req.body.description || '无描述',
|
||||||
content: req.query.content || req.body.content,
|
content: req.query.content || req.body.content,
|
||||||
email: req.query.email || req.body.email,
|
email: req.query.email || req.body.email,
|
||||||
|
token: req.query.token || req.body.token,
|
||||||
};
|
};
|
||||||
let result = await processMessage(userPrefix, message);
|
let result = await processMessage(userPrefix, message);
|
||||||
res.json(result);
|
res.json(result);
|
||||||
|
|||||||
+1
-1
@@ -18,7 +18,7 @@
|
|||||||
<div class="message-body">
|
<div class="message-body">
|
||||||
运行模式:<%= process.env.MODE === '1' ? "Heroku 模式" : "普通模式"%>
|
运行模式:<%= process.env.MODE === '1' ? "Heroku 模式" : "普通模式"%>
|
||||||
<br>
|
<br>
|
||||||
内存占用: <%= (process.memoryUsage().rss / (1024 *1024)).toFixed(2) %> MB
|
内存占用:<%= (process.memoryUsage().rss / (1024 *1024)).toFixed(2) %> MB
|
||||||
</div>
|
</div>
|
||||||
</article>
|
</article>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user