shadowsocks-manager
Version:
A shadowsocks manager tool for multi user and traffic control.
100 lines (87 loc) • 3.14 kB
JavaScript
const log4js = require('log4js');
const logger = log4js.getLogger('webgui');
const expressLogger = log4js.getLogger('express');
const config = appRequire('services/config').all();
const path = require('path');
const express = require('express');
// const WebSocketServer = require('ws').Server;
const session = require('express-session');
const knex = appRequire('init/knex').knex;
const KnexSessionStore = require('connect-session-knex')(session);
const store = new KnexSessionStore({ knex });
const sessionParser = session({
secret: '5E14cd8749A',
rolling: true,
resave: true,
saveUninitialized: true,
cookie: { secure: false, httpOnly: true, maxAge: 7 * 24 * 3600 * 1000 },
store,
});
const bodyParser = require('body-parser');
const compression = require('compression');
const expressValidator = require('express-validator');
const app = express();
const cors = require('cors');
app.set('trust proxy', 'loopback');
app.use(log4js.connectLogger(expressLogger, {
level: 'auto',
format: '[:req[x-real-ip]] :method :status :response-timems :url',
}));
if(config.plugins.webgui.cors) {
const whitelist = config.plugins.webgui.cors;
const corsOptions = {
origin: whitelist,
methods: ['GET', 'PUT', 'POST', 'DELETE'],
allowedHeaders: ['Content-Type'],
credentials: true,
};
app.use(cors(corsOptions));
}
app.use(bodyParser.json());
app.use(expressValidator());
app.use(compression());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(sessionParser);
app.engine('.html', require('ejs').__express);
app.engine('.js', require('ejs').__express);
app.set('view engine', 'html');
app.set('views', path.resolve('./plugins/webgui/views'));
app.use('/libs', express.static(path.resolve('./plugins/webgui/libs')));
app.use('/public', express.static(path.resolve('./plugins/webgui/public')));
app.use('/api/*', (req, res, next) => {
res.setHeader('Surrogate-Control', 'no-store');
res.setHeader('Cache-Control', 'no-store, no-cache, must-revalidate, proxy-revalidate');
res.setHeader('Pragma', 'no-cache');
res.setHeader('Expires', '0');
next();
});
const port = config.plugins.webgui.port || 8080;
const host = config.plugins.webgui.host || '0.0.0.0';
app.listen(port, host, () => {
logger.info(`server start at ${ host }:${ port }`);
}).on('error', err => {
logger.error('express server error: ' + err);
process.exit(1);
});
// const wss = new WebSocketServer({
// server,
// path: '/user',
// verifyClient: function (info, done){
// sessionParser(info.req, {}, function (){
// // console.log(info.req.session);
// if(info.req.session.user && info.req.session.type === 'normal') {
// done(true);
// } else {
// done(false);
// }
// });
// }
// });
app.use((err, req, res, next) => {
return res.render('error');
});
exports.app = app;
// exports.wss = wss;
// exports.sessionParser = sessionParser;
// exports.dependence = ['webgui_ref', 'group', 'macAccount', 'webgui_order'];
appRequire('plugins/webgui/server/route');