🎉 able to login & logout
This commit is contained in:
+72
-71
@@ -1,84 +1,85 @@
|
||||
const express = require('express');
|
||||
const router = express.Router();
|
||||
const crypto = require('crypto');
|
||||
const fs = require('fs');
|
||||
const { User } = require('../models');
|
||||
const { tokenStore } = require('../common/token');
|
||||
|
||||
router.all('/', (req, res, next) => {
|
||||
fs.promises
|
||||
.access('./.env')
|
||||
.then(() => {
|
||||
res.render('info', {
|
||||
message: '服务已在运行。',
|
||||
});
|
||||
// pushMessage(
|
||||
// req,
|
||||
// res,
|
||||
// `请注意,ip 地址为 ${req.ip} 的用户访问了你的消息通知服务,如果非你本人,则你的私有消息通知服务可能已被泄露,当前版本无法阻止其他用户通过本系统向你发送消息。`
|
||||
// );
|
||||
})
|
||||
.catch(() => {
|
||||
res.render('configure');
|
||||
});
|
||||
router.get('/', (req, res, next) => {
|
||||
res.render('index', {
|
||||
message: '',
|
||||
});
|
||||
});
|
||||
|
||||
router.post('/configure', (req, res, next) => {
|
||||
fs.promises
|
||||
.access('./.env')
|
||||
.then(() => {
|
||||
res.render('message', {
|
||||
message: '.env 文件已经存在,请手动删除该文件后重试!',
|
||||
});
|
||||
})
|
||||
.catch(() => {
|
||||
let content =
|
||||
`APP_ID=${req.body.APP_ID}\n` +
|
||||
`APP_SECRET=${req.body.APP_SECRET}\n` +
|
||||
`TOKEN=${req.body.TOKEN}\n` +
|
||||
`TEMPLATE_ID=${req.body.TEMPLATE_ID}\n` +
|
||||
`OPEN_ID=${req.body.OPEN_ID}`;
|
||||
fs.promises
|
||||
.writeFile('./.env', content, 'utf8')
|
||||
.then(() => {
|
||||
res.render('message', {
|
||||
message:
|
||||
'.env 文件写入成功,程序即将自动关闭以应用写入的新的环境变量,需要进程守护程序自动重启应用或者手动重启。',
|
||||
});
|
||||
process.exit();
|
||||
})
|
||||
.catch((e) => {
|
||||
res.render('info', {
|
||||
message: '在尝试写入 .env 文件时发生错误:' + e,
|
||||
});
|
||||
});
|
||||
});
|
||||
router.get('/login', (req, res, next) => {
|
||||
res.render('login', {
|
||||
message: '',
|
||||
});
|
||||
});
|
||||
|
||||
router.all('/verify', (req, res, next) => {
|
||||
// 验证消息来自微信服务器:https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Access_Overview.html
|
||||
const { signature, timestamp, nonce, echostr } = req.query;
|
||||
const token = process.env.TOKEN;
|
||||
let tmp_array = [token, timestamp, nonce].sort();
|
||||
let tmp_string = tmp_array.join('');
|
||||
tmp_string = crypto.createHash('sha1').update(tmp_string).digest('hex');
|
||||
if (tmp_string === signature) {
|
||||
res.send(echostr);
|
||||
} else {
|
||||
res.send('verification failed');
|
||||
router.post('/login', async (req, res, next) => {
|
||||
let user = {
|
||||
username: req.body.username,
|
||||
password: req.body.password,
|
||||
};
|
||||
let message = '';
|
||||
try {
|
||||
user = await User.findOne({ where: user });
|
||||
if (user) {
|
||||
req.session.user = user;
|
||||
return res.redirect('/');
|
||||
} else {
|
||||
message = '用户名或密码错误';
|
||||
}
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
message = e.message;
|
||||
}
|
||||
res.render('login', {
|
||||
message,
|
||||
});
|
||||
});
|
||||
|
||||
router.get('/register', (req, res, next) => {
|
||||
res.render('register');
|
||||
});
|
||||
|
||||
router.post('/register', async (req, res, next) => {
|
||||
let user = {
|
||||
username: req.body.username,
|
||||
password: req.body.password,
|
||||
};
|
||||
try {
|
||||
user = await User.create(user);
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
}
|
||||
});
|
||||
|
||||
router.all('/push', (req, res, next) => {
|
||||
let content = req.query.content || req.body.content;
|
||||
pushMessage(req, res, content);
|
||||
});
|
||||
|
||||
router.get('/favicon.ico', (req, res, next) => {
|
||||
res.sendStatus(404);
|
||||
});
|
||||
|
||||
router.all('/:content', (req, res, next) => {
|
||||
let content = req.params.content;
|
||||
pushMessage(req, res, content);
|
||||
router.post('/configure', async (req, res, next) => {
|
||||
let user = {
|
||||
username: req.body.username,
|
||||
password: req.body.password,
|
||||
accessToken: req.body.accessToken,
|
||||
email: req.body.email,
|
||||
prefix: req.body.prefix,
|
||||
wechatAppId: req.body.wechatAppId,
|
||||
wechatAppSecret: req.body.wechatAppSecret,
|
||||
wechatTemplateId: req.body.wechatTemplateId,
|
||||
wechatOpenId: req.body.wechatOpenId,
|
||||
wechatVerifyToken: req.body.wechatVerifyToken,
|
||||
};
|
||||
try {
|
||||
user = await User.create(user);
|
||||
tokenStore.set(user.prefix, {
|
||||
appId: user.wechatAppId,
|
||||
appSecret: user.wechatAppSecret,
|
||||
templateId: user.wechatTemplateId,
|
||||
openId: user.wechatOpenId,
|
||||
wechatVerifyToken: user.wechatVerifyToken,
|
||||
token: '',
|
||||
});
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
|
||||
+10
-43
@@ -1,9 +1,6 @@
|
||||
const express = require('express');
|
||||
const lexer = require('marked').lexer;
|
||||
const parser = require('marked').parser;
|
||||
const Message = require('../models/message').Message;
|
||||
const pushWeChatMessage = require('../common/wechat').pushWeChatMessage;
|
||||
const formatTime = require('../common/utils').formatTime;
|
||||
|
||||
const router = express.Router();
|
||||
|
||||
@@ -11,49 +8,19 @@ function md2html(markdown) {
|
||||
return parser(lexer(markdown));
|
||||
}
|
||||
|
||||
router.get('/:description', (req, res, next) => {
|
||||
req.query.description = req.params.description;
|
||||
next();
|
||||
router.get('/delete/:id', (req, res, next) => {
|
||||
// TODO: delete message
|
||||
res.json({
|
||||
success: true,
|
||||
message: 'Ok',
|
||||
});
|
||||
});
|
||||
|
||||
router.all('/', (req, res) => {
|
||||
let message = {
|
||||
title: req.query.title || req.body.title || '无标题',
|
||||
status: 1,
|
||||
created_by: '系统', // TODO
|
||||
created_time: formatTime(),
|
||||
description: req.query.description || req.body.description,
|
||||
content: md2html(req.query.content || req.body.content),
|
||||
};
|
||||
|
||||
Message.create(message)
|
||||
.then((value) => {
|
||||
console.log(value);
|
||||
pushWeChatMessage(message.description, message.link)
|
||||
.then((response) => {
|
||||
res.json(response);
|
||||
})
|
||||
.catch((reason) => {
|
||||
res.json(reason);
|
||||
});
|
||||
})
|
||||
.catch((reason) => {
|
||||
res.json(reason);
|
||||
});
|
||||
});
|
||||
|
||||
router.get('/detail/:id', (req, res) => {
|
||||
router.get('/:id', (req, res, next) => {
|
||||
const id = req.params.id;
|
||||
Message.getById(id)
|
||||
.then((value) => {
|
||||
console.log(value);
|
||||
res.render('message', value[0]);
|
||||
})
|
||||
.catch((reason) => {
|
||||
res.render('info', {
|
||||
message: '获取该消息时发生了错误:' + reason,
|
||||
});
|
||||
});
|
||||
// TODO: show article
|
||||
req.query.description = req.params.description;
|
||||
res.render('article');
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
const express = require('express');
|
||||
const crypto = require('crypto');
|
||||
const Message = require('../models/message').Message;
|
||||
const { processMessage } = require('../common/message');
|
||||
const { tokenStore } = require('../common/token');
|
||||
|
||||
const router = express.Router();
|
||||
|
||||
router.get('/:userPrefix/configure', (req, res, next) => {
|
||||
res.render('configure');
|
||||
});
|
||||
|
||||
router.all('/:userPrefix/verify', (req, res, next) => {
|
||||
// 验证消息来自微信服务器:https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Access_Overview.html
|
||||
const userPrefix = req.params.userPrefix;
|
||||
const { signature, timestamp, nonce, echostr } = req.query;
|
||||
const token = tokenStore.get(userPrefix).wechatVerifyToken;
|
||||
let tmp_array = [token, timestamp, nonce].sort();
|
||||
let tmp_string = tmp_array.join('');
|
||||
tmp_string = crypto.createHash('sha1').update(tmp_string).digest('hex');
|
||||
if (tmp_string === signature) {
|
||||
res.send(echostr);
|
||||
} else {
|
||||
res.send('verification failed');
|
||||
}
|
||||
});
|
||||
|
||||
router.all('/:userPrefix', async (req, res, next) => {
|
||||
const userPrefix = req.params.userPrefix;
|
||||
let message = {
|
||||
type: req.query.type || req.body.type || '0',
|
||||
title: req.query.title || req.body.title || '无标题',
|
||||
description: req.query.description || req.body.description,
|
||||
content: req.query.content || req.body.content,
|
||||
};
|
||||
let result = await processMessage(userPrefix, message);
|
||||
res.json(result);
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
Reference in New Issue
Block a user