| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209 |
- const express = require('express');
- const router = express.Router();
- const { User } = require('../models');
- const { tokenStore } = require('../common/token');
- const requestWeChatToken = require('../common/wechat').requestToken;
- const requestCorpToken = require('../common/wechat-corp').requestToken;
- const {
- userRequired,
- adminRequired,
- allowRegister,
- } = require('../middlewares/web_auth');
- const config = require('../config');
- router.get('/', (req, res, next) => {
- let showGuidance = false;
- if (
- req.session.user &&
- !req.session.user.wechatAppId &&
- !req.session.user.corpId &&
- !req.session.user.smtpUser
- ) {
- showGuidance = true;
- }
- if (process.env.MODE === '1') {
- showGuidance = false;
- }
- res.render('index', {
- message: req.flash('message'),
- showGuidance,
- });
- });
- router.get('/login', (req, res, next) => {
- res.render('login', {
- message: req.flash('message'),
- });
- });
- router.post('/login', async (req, res, next) => {
- if (process.env.MODE === '1') {
- return res.render('register', {
- message: '当前运行模式为 Heroku 模式,该模式下禁止用户登录',
- isErrorMessage: true,
- });
- }
- let user = {
- username: req.body.username,
- password: req.body.password,
- };
- let message = '';
- res.locals.isErrorMessage = true;
- try {
- user = await User.findOne({ where: user });
- if (user) {
- req.session.user = user;
- req.flash(
- 'message',
- `欢迎${user.isAdmin ? '管理员' : '普通'}用户 ${
- user.username
- } 登录系统!`
- );
- return res.redirect('/');
- } else {
- message = '用户名或密码错误';
- }
- } catch (e) {
- console.error(e);
- message = e.message;
- }
- res.render('login', {
- message,
- });
- });
- router.get('/logout', userRequired, (req, res, next) => {
- req.session.user = undefined;
- req.flash('message', '已退出登录');
- res.redirect('/');
- });
- router.get('/register', allowRegister, (req, res, next) => {
- res.render('register');
- });
- router.post('/register', allowRegister, async (req, res, next) => {
- if (process.env.MODE === '1') {
- return res.render('register', {
- message: '当前运行模式为 Heroku 模式,该模式下禁止用户注册',
- isErrorMessage: true,
- });
- }
- let user = {
- username: req.body.username,
- password: req.body.password,
- };
- let message = '';
- try {
- user = await User.create(user);
- message = '用户创建成功,请登录';
- req.flash('message', message);
- return res.redirect('/login');
- } catch (e) {
- console.error(e);
- message = '用户名已被占用';
- }
- res.render('register', { message, isErrorMessage: true });
- });
- router.get('/configure', userRequired, (req, res, next) => {
- let showPasswordWarning = false;
- if (req.session.user && req.session.user.password === '123456') {
- showPasswordWarning = true;
- }
- res.locals.message = req.flash('message');
- res.locals.showPasswordWarning = showPasswordWarning;
- if (req.session.user.prefix === null) {
- req.session.user.prefix = req.session.user.username;
- }
- res.locals.verifyUrl = config.href + req.session.user.prefix + '/verify';
- res.render('configure', req.session.user);
- });
- router.post('/configure', userRequired, async (req, res, next) => {
- let id = req.session.user.id;
- let user = {
- // Common
- username: req.body.username,
- password: req.body.password,
- accessToken: req.body.accessToken,
- defaultMethod: req.body.defaultMethod,
- prefix: req.body.prefix,
- // WeChat public account
- wechatAppId: req.body.wechatAppId,
- wechatAppSecret: req.body.wechatAppSecret,
- wechatTemplateId: req.body.wechatTemplateId,
- wechatOpenId: req.body.wechatOpenId,
- wechatVerifyToken: req.body.wechatVerifyToken,
- // Email
- email: req.body.email,
- smtpServer: req.body.smtpServer,
- smtpUser: req.body.smtpUser,
- smtpPass: req.body.smtpPass,
- // WeChat corp
- corpId: req.body.corpId,
- corpAgentId: req.body.corpAgentId,
- corpAppSecret: req.body.corpAppSecret,
- corpUserId: req.body.corpUserId,
- };
- for (let field in user) {
- let value = user[field];
- value = value.trim();
- if (value || field === 'accessToken') {
- user[field] = value;
- } else {
- delete user[field];
- }
- }
- let message = '';
- try {
- let userObj = await User.findOne({
- where: {
- id: id,
- },
- });
- if (userObj) {
- await userObj.update(user);
- }
- if (userObj.prefix !== req.session.user.prefix) {
- tokenStore.delete(req.session.user.prefix);
- }
- req.session.user = userObj;
- tokenStore.set(userObj.prefix, {
- // Common
- accessToken: userObj.accessToken,
- defaultMethod: userObj.defaultMethod,
- // WeChat test account
- wechatAppId: userObj.wechatAppId,
- wechatAppSecret: userObj.wechatAppSecret,
- wechatTemplateId: userObj.wechatTemplateId,
- wechatOpenId: userObj.wechatOpenId,
- wechatVerifyToken: userObj.wechatVerifyToken,
- wechatToken: await requestWeChatToken(
- userObj.wechatAppId,
- userObj.wechatAppSecret
- ),
- // Email
- email: userObj.email,
- smtpServer: userObj.smtpServer,
- smtpUser: userObj.smtpUser,
- smtpPass: userObj.smtpPass,
- // WeChat corporation account
- corpId: userObj.corpId,
- corpAgentId: userObj.corpAgentId,
- corpAppSecret: userObj.corpAppSecret,
- corpUserId: userObj.corpUserId,
- corpToken: await requestCorpToken(userObj.corpId, userObj.corpAppSecret),
- });
- message = '配置更新成功';
- console.debug(tokenStore);
- } catch (e) {
- console.error(e);
- message = e.message;
- }
- req.flash('message', message);
- res.redirect('/configure');
- });
- module.exports = router;
|