index.js
2.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
const MODULE_NAME = 'SDK-SUPPLIER-PRODUCT-QUOTA.CONTROL-PANEL';
const path = require('path');
const express = require('express');
const nunjucks = require('nunjucks');
const session = require('express-session');
const uniqid = require('uniqid');
const config = require('komodo-sdk/config');
const logger = require('komodo-sdk/logger');
const routerMain = require('./routers/main');
const coreTerminalAuth = require('../core-terminal-auth');
const app = express();
app.use(session({
secret: (config.sdk_supplier_product_quota
&& config.sdk_supplier_product_quota.session_secret) || uniqid(),
resave: true,
saveUninitialized: false,
}));
const viewsDir = path.join(__dirname, 'views');
nunjucks.configure(viewsDir, {
autoescape: true,
express: app,
noCache: config.sdk_supplier_product_quota && config.sdk_supplier_product_quota.no_cache,
});
const staticDir = path.join(__dirname, 'public');
app.use(express.static(staticDir));
logger.info(`${MODULE_NAME}: Serving static files on ${staticDir}`);
function validateSession(req, res, next) {
if (!req.session.terminal || !req.session.terminal.id) {
res.redirect('/login');
return;
}
next();
}
app.use((req, res, next) => {
res.locals.handler_name = config.handler_name;
res.locals.xid = uniqid();
next();
});
app.get('/', (req, res) => {
res.redirect('/main');
});
app.get('/logout', (req, res) => {
req.session.terminal = null;
req.session.store = null;
res.redirect('/login');
});
app.get('/login', (req, res) => {
res.render('signin.njk');
});
app.post('/login', express.urlencoded({ extended: false }), async (req, res) => {
const { username, password } = req.body;
const terminal = await coreTerminalAuth.validateWebPassword(username, password);
if (!terminal || !terminal.store_is_super) {
res.redirect('/login');
return;
}
if (
config.sdk_supplier_product_quota
&& !config.sdk_supplier_product_quota.allow_non_super_terminal_login
&& !terminal.terminal_is_super
) {
res.redirect('/login');
return;
}
req.session.terminal = {
id: terminal.id,
name: terminal.name,
super: terminal.terminal_is_super,
};
req.session.store = {
id: terminal.store_id,
name: terminal.store_name,
super: terminal.store_is_super,
};
res.redirect('/');
});
app.use('/main', validateSession, routerMain);
const listenPort = config.sdk_supplier_product_quota && config.sdk_supplier_product_quota.port;
if (listenPort) {
app.listen(listenPort, () => {
logger.info(`4226C307 ${MODULE_NAME}: Control panel ready`, { listenPort });
}).on('error', (err) => {
logger.warn(`83FB2789 ${MODULE_NAME}: Control panel failed to start`, {
listenPort, eCode: err.code, eMessage: err.message,
});
});
}