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