| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 | require('dotenv').config();const express = require('express');const path = require('path');const session = require('express-session');const flash = require('connect-flash');const rateLimit = require('express-rate-limit');const compression = require('compression');const cookieParser = require('cookie-parser');const logger = require('morgan');const http = require('http');const serveStatic = require('serve-static');const config = require('./config');const indexRouter = require('./routers/index');const messageRouter = require('./routers/message');const userRouter = require('./routers/user');const { refreshToken } = require('./common/wechat');const { initializeTokenStore, registerWebSocket } = require('./common/token');const app = express();const WebSocket = require('ws');app.locals.isLogged = false;app.locals.isAdmin = false;app.locals.message = '';app.locals.isErrorMessage = false;setTimeout(async () => {  // TODO: Here we need an improvement! I have tried EventEmitter but it's not working. :(  await initializeTokenStore();  await refreshToken();  setInterval(async () => refreshToken(), 100 * 60 * 1000);}, 1000);app.set('views', path.join(__dirname, 'views'));app.set('view engine', 'ejs');app.set('trust proxy', true);app.use(  rateLimit({    windowMs: 30 * 1000,    max: 30  }));app.use(  '/login',  rateLimit({    windowMs: 60 * 1000,    max: 5  }));app.use(compression());app.use(logger('dev'));app.use(express.json());app.use(express.urlencoded({ extended: false }));app.use(cookieParser(config.cookie_secret));app.use(  session({    resave: true,    saveUninitialized: true,    secret: config.session_secret  }));app.use(flash());app.use(express.static(path.join(__dirname, 'public')));app.use(  '/public',  serveStatic(path.join(__dirname, `public`), {    maxAge: '600000'  }));app.use('*', (req, res, next) => {  if (req.session.user !== undefined) {    res.locals.isLogged = true;    res.locals.isAdmin = req.session.user.isAdmin;  }  next();});app.use('/message', messageRouter);app.use('/', indexRouter);app.use('/', userRouter);const server = http.createServer(app);const wss = new WebSocket.Server({ server });server.listen(config.port);wss.on('connection', (ws) => {  ws.on('message', (data) => {    let message = JSON.parse(data.toString());    if (message.prefix) {      registerWebSocket(message.prefix, message.token, ws);    }  });});module.exports = app;
 |