Commit 33b054fbea3b45f351608b10ae064dd7f8325fbe

Authored by Adhidarma Hadiwinoto
1 parent 74172db4dd
Exists in master

Fix eslint on control-panel

Showing 7 changed files with 89 additions and 85 deletions Inline Diff

control-panel/index.js
1 "use strict";
2
3 require('./lib/express-init'); 1 require('./lib/express-init');
4 2
control-panel/lib/express-init.js
1 const path = require('path'); 1 const path = require('path');
2 2
3 const express = require('express'); 3 const express = require('express');
4 const session = require('express-session'); 4 const session = require('express-session');
5 const nunjucks = require('nunjucks'); 5 const nunjucks = require('nunjucks');
6 const uniqid = require('uniqid'); 6 const uniqid = require('uniqid');
7 const numeral = require('numeral'); 7 const numeral = require('numeral');
8 8
9 const config = require('komodo-sdk/config'); 9 const config = require('../../config');
10 const logger = require('tektrans-logger'); 10 const logger = require('tektrans-logger');
11 11
12 const routers = require('./routers'); 12 const routers = require('./routers');
13 13
14 // skip if no approriate config 14 // skip if no approriate config
15 if (!config || !config.control_panel || !config.control_panel.listen_port) { 15 if (!config || !config.control_panel || !config.control_panel.listen_port) {
16 return; 16 return;
17 } 17 }
18 18
19 const app = express(); 19 const app = express();
20 20
21 app.locals.config = config; 21 app.locals.config = config;
22 app.locals.title = config.control_panel.title || config.handler_name || config.username || config.origin; 22 app.locals.title = config.control_panel.title || config.handler_name || config.username || config.origin;
23 app.locals.cp_views_dir = path.dirname(__dirname) + '/views'; 23 app.locals.cp_views_dir = path.dirname(__dirname) + '/views';
24 app.locals.cp_template = app.locals.cp_views_dir + '/template.html'; 24 app.locals.cp_template = app.locals.cp_views_dir + '/template.html';
25 25
26 // session 26 // session
27 app.use(session({ 27 app.use(session({
28 secret: config.control_panel.session_secret || uniqid(), 28 secret: config.control_panel.session_secret || uniqid(),
29 resave: true, 29 resave: true,
30 saveUninitialized: false, 30 saveUninitialized: false,
31 name: config.control_panel.session_name || config.handler_name || config.origin 31 name: config.control_panel.session_name || config.handler_name || config.origin
32 })); 32 }));
33 33
34 const static_dir = path.dirname(__dirname) + '/views-static'; 34 const static_dir = path.dirname(__dirname) + '/views-static';
35 app.use(express.static(static_dir, {maxAge: 24 * 3600 * 1000})); 35 app.use(express.static(static_dir, {maxAge: 24 * 3600 * 1000}));
36 36
37 // nunjucks environment 37 // nunjucks environment
38 let nunjucksEnv = nunjucks.configure('', { 38 let nunjucksEnv = nunjucks.configure('', {
39 autoescape: true, 39 autoescape: true,
40 express: app, 40 express: app,
41 noCache: config.control_panel.template_no_cache 41 noCache: config.control_panel.template_no_cache
42 }); 42 });
43 43
44 numeral.register('locale', 'id', { 44 numeral.register('locale', 'id', {
45 delimiters: { 45 delimiters: {
46 thousands: '.', 46 thousands: '.',
47 decimal: ',' 47 decimal: ','
48 }, 48 },
49 abbreviations: { 49 abbreviations: {
50 thousand: 'ribu', 50 thousand: 'ribu',
51 million: 'juta', 51 million: 'juta',
52 billion: 'miliar', 52 billion: 'miliar',
53 trillion: 'triliun' 53 trillion: 'triliun'
54 }, 54 },
55 currency: { 55 currency: {
56 symbol: 'Rp.' 56 symbol: 'Rp.'
57 } 57 }
58 }); 58 });
59 numeral.locale('id'); 59 numeral.locale('id');
60 60
61 61
62 nunjucksEnv.addFilter('numeral', function(num) { 62 nunjucksEnv.addFilter('numeral', function(num) {
63 return numeral(num).format(); 63 return numeral(num).format();
64 }) 64 })
65 65
66 routers.init(app); 66 routers.init(app);
67 67
68 // start http server 68 // start http server
69 app.listen(config.control_panel.listen_port, function () { 69 app.listen(config.control_panel.listen_port, function () {
70 logger.info('Web control panel started', {listen_port: config.control_panel.listen_port, cp_views_dir: app.locals.cp_views_dir, static_dir: static_dir}); 70 logger.info('Web control panel started', {listen_port: config.control_panel.listen_port, cp_views_dir: app.locals.cp_views_dir, static_dir: static_dir});
71 }); 71 });
72 72
control-panel/lib/request-to-core.js
1 const request = require('request'); 1 const request = require('request');
2 2
3 const logger = require('tektrans-logger'); 3 const logger = require('tektrans-logger');
4 const core_url = require('../../core-url'); 4 const coreURLLib = require('../../core-url');
5
6 5
7 function coreUrl() { 6 function coreUrl() {
8 return core_url; 7 return coreURLLib;
9 } 8 }
10 9
11 function doRequest(core_path, qs, cb) { 10 function doRequest(corePath, qs, cb) {
12 11 const requestOptions = {
13 let requestOptions = { 12 url: coreUrl() + corePath,
14 url: coreUrl() + core_path, 13 qs,
15 qs: qs 14 };
16 }
17 15
18 request(requestOptions, function(error, response, body) { 16 request(requestOptions, (error, response, body) => {
19 if (error) { 17 if (error) {
20 logger.warn('Error requesting to core', {requestOptions: requestOptions, error: error}); 18 logger.warn('Error requesting to core', {
19 requestOptions, error,
20 });
21
21 if (cb) { 22 if (cb) {
22 cb(error); 23 cb(error);
23 } 24 }
25
24 return; 26 return;
25 } 27 }
26 28
27 if (response.statusCode != 200) { 29 if (response.statusCode !== 200) {
28 logger.warn('Core return http status code ' + response.statusCode, {requestOptions: requestOptions, httpStatus: response.statusCode}); 30 logger.warn(`Core return http status code ${response.statusCode}`, {
31 requestOptions, httpStatus: response.statusCode,
32 });
33
29 if (cb) { 34 if (cb) {
30 cb('ER_HTTP_STATUS'); 35 cb('ER_HTTP_STATUS');
31 } 36 }
32 return; 37 return;
33 } 38 }
34 39
35 logger.verbose('Core response on request'); 40 logger.verbose('Core response on request');
36 //logger.verbose('Core response on request', {body: body});
37 41
38 if (cb) { 42 if (cb) {
39 cb(null, body); 43 cb(null, body);
40 } 44 }
41 }); 45 });
42 } 46 }
43 47
44 function doRequestAndParse(core_path, qs, cb) { 48 function doRequestAndParse(corePath, qs, cb) {
45 doRequest(core_path, qs, function(error, core_response_body) { 49 doRequest(corePath, qs, (error, coreResponseBody) => {
46 if (error) { 50 if (error) {
47 cb(error); 51 cb(error);
48 return; 52 return;
49 } 53 }
50 54
51 let core_response_object; 55 let coreResponseObj;
52 56
53 try { 57 try {
54 core_response_object = JSON.parse(core_response_body); 58 coreResponseObj = JSON.parse(coreResponseBody);
55 } 59 } catch (e) {
56 catch(e) {
57 logger.warn( 60 logger.warn(
58 'ER_CORE_RESPONSE_IS_NOT_VALID_JSON', 61 'ER_CORE_RESPONSE_IS_NOT_VALID_JSON',
59 { 62 {
60 error: e, 63 error: e,
61 core_path: core_path, 64 core_path: corePath,
62 qs: qs, 65 qs,
63 core_response_body: core_response_body 66 core_response_body: coreResponseBody,
64 } 67 },
65 ); 68 );
66 69
67 cb('ER_CORE_RESPONSE_IS_NOT_VALID_JSON'); 70 cb('ER_CORE_RESPONSE_IS_NOT_VALID_JSON');
68 return; 71 return;
69 } 72 }
70 73
71 cb(null, core_response_object); 74 cb(null, coreResponseObj);
72 }); 75 });
73 } 76 }
control-panel/lib/router-config.js
1 const fs = require('fs'); 1 const fs = require('fs');
2 2
3 const moment = require('moment'); 3 const moment = require('moment');
4 const express = require('express'); 4 const express = require('express');
5 const bodyParser = require('body-parser'); 5 const bodyParser = require('body-parser');
6 const uuidv1 = require('uuid/v1'); 6 const uuidv1 = require('uuid/v1');
7 7
8 const config = require('komodo-sdk/config');
9 const logger = require('tektrans-logger'); 8 const logger = require('tektrans-logger');
10 const configReload = require('komodo-sdk/config-reload'); 9 const config = require('../../config');
10 const configReload = require('../../config-reload');
11 11
12 const misc = require('./misc'); 12 const misc = require('./misc');
13 13
14 const router = express.Router(); 14 const router = express.Router();
15 15
16 function pageJsonEditor(req, res) { 16 function pageJsonEditor(req, res) {
17 res.render( 17 res.render(
18 req.app.locals.cp_views_dir + '/config.jsoneditor.html', 18 `${req.app.locals.cp_views_dir}/config.jsoneditor.html`,
19 { 19 {
20 page_title: 'Edit Konfigurasi', 20 page_title: 'Edit Konfigurasi',
21 jsoneditor_mode: req.query.mode || "form" 21 jsoneditor_mode: req.query.mode || 'form',
22 } 22 },
23 ) 23 );
24 } 24 }
25 25
26 function pageData(req, res) { 26 function pageData(req, res) {
27 res.json(config); 27 res.json(config);
28 } 28 }
29 29
30 function pageDataSubmit(req, res) { 30 function pageDataSubmit(req, res) {
31 const backupDir = 'config-backup/'; 31 const backupDir = 'config-backup/';
32 const backupFile = backupDir + 'config.backup_' + moment().format('YYYYMMDD_HHmmss') + '_' + uuidv1() + '.json'; 32 const backupFile = `${backupDir}config.backup_${moment().format('YYYYMMDD_HHmmss')}_${uuidv1()}.json`;
33 33
34 if (!req || !req.body || typeof req.body !== 'object') { 34 if (!req || !req.body || typeof req.body !== 'object') {
35 logger.warn('Invalid new config'); 35 logger.warn('Invalid new config');
36 return res.end('Failed, data is not object'); 36 res.end('Failed, data is not object');
37 return;
37 } 38 }
38 39
39 if (Object.getOwnPropertyNames(req.body).length <= 0) { 40 if (Object.getOwnPropertyNames(req.body).length <= 0) {
40 logger.warn('New config is empty, ignoring'); 41 logger.warn('New config is empty, ignoring');
41 return res.end('Failed, data is empty'); 42 res.end('Failed, data is empty');
43 return;
42 } 44 }
43 45
44 fs.mkdir(backupDir, function() { 46 fs.mkdir(backupDir, () => {
45 fs.writeFile(backupFile, JSON.stringify(config, null, 4), function() { 47 fs.writeFile(backupFile, JSON.stringify(config, null, 4), () => {
46 fs.writeFile("config.json", JSON.stringify(req.body, null, 4), function(errWriteNewConfig) { 48 fs.writeFile('config.json', JSON.stringify(req.body, null, 4), (errWriteNewConfig) => {
47
48 if (errWriteNewConfig) { 49 if (errWriteNewConfig) {
49 return res.end('Update failed: ' + errWriteNewConfig); 50 res.end(`Update failed: ${errWriteNewConfig}`);
51 return;
50 } 52 }
51 53
52 configReload.replace(req.body); 54 configReload.replace(req.body);
53 res.end('Konfigurasi berhasil diupdate. Beberapa item mungkin perlu restart terlebih dahulu sebelum efektif berlaku.'); 55 res.end('Konfigurasi berhasil diupdate. Beberapa item mungkin perlu restart terlebih dahulu sebelum efektif berlaku.');
54 56 });
55 }) 57 });
56 }) 58 });
57 })
58 } 59 }
59 60
60 router.use(misc.needAuthUser); 61 router.use(misc.needAuthUser);
61 62
62 router.get('/', pageJsonEditor); 63 router.get('/', pageJsonEditor);
63 router.get('/data', pageData); 64 router.get('/data', pageData);
64 router.post('/data', bodyParser.json(), pageDataSubmit); 65 router.post('/data', bodyParser.json(), pageDataSubmit);
control-panel/lib/router-login.js
1 const module_name = 'CONTROL_PANEL_' + require('path').basename(__filename); 1 // eslint-disable-next-line global-require
2 const MODULE_NAME = `CONTROL_PANEL_${require('path').basename(__filename)}`;
2 3
3 const querystring = require('querystring'); 4 const querystring = require('querystring');
4 const express = require('express'); 5 const express = require('express');
5 const bodyParser = require('body-parser'); 6 const bodyParser = require('body-parser');
7 const logger = require('tektrans-logger');
8
6 const router = express.Router(); 9 const router = express.Router();
7 10
8 const config = require('komodo-sdk/config'); 11 const config = require('../../config');
9 const logger = require('tektrans-logger');
10 12
11 const requestToCore = require('./request-to-core'); 13 const requestToCore = require('./request-to-core');
12 14
13 function pageLogin(req, res) { 15 function pageLogin(req, res) {
14 if (req.session && req.session.username && req.session.terminal) { 16 if (req.session && req.session.username && req.session.terminal) {
15 res.redirect('/'); 17 res.redirect('/');
16 return; 18 return;
17 } 19 }
18 20
19 res.render( 21 res.render(
20 req.app.locals.cp_views_dir + '/login.html', 22 `${req.app.locals.cp_views_dir}/login.html`,
21 { 23 {
22 ref: req.query.ref, 24 ref: req.query.ref,
23 msg: req.query.msg 25 msg: req.query.msg,
24 } 26 },
25 ) 27 );
26 } 28 }
27 29
28 function pageLoginSubmitted(req, res) { 30 function pageLoginSubmitted(req, res) {
29 const method_name = 'pageLoginSubmitted'; 31 const methodName = 'pageLoginSubmitted';
30 32
31 if (!req || !req.body || !req.body.terminal_name || !req.body.password) { 33 if (!req || !req.body || !req.body.terminal_name || !req.body.password) {
32 const qs = { 34 const qs = {
33 msg: 'Nama terminal dan password harus diisi', 35 msg: 'Nama terminal dan password harus diisi',
34 ref: req.query.ref 36 ref: req.query.ref,
35 }; 37 };
36 38
37 res.redirect('/login?' + querystring.stringify(qs)); 39 res.redirect(`/login?${querystring.stringify(qs)}`);
38 return; 40 return;
39 } 41 }
40 42
41 const qs = { 43 const qs = {
42 terminal_name: req.body.terminal_name, 44 terminal_name: req.body.terminal_name,
43 web_password: req.body.password, 45 web_password: req.body.password,
44 request_by: config.handler_name || config.username || config.origin 46 request_by: config.handler_name || config.username || config.origin,
45 } 47 };
46 48
47 requestToCore.doRequestAndParse('/services/terminalAuthentication', qs, function(err, coreResponse) { 49 requestToCore.doRequestAndParse('/services/terminalAuthentication', qs, (err, coreResponse) => {
48 if (err) { 50 if (err) {
49 logger.warn('Error requesting authentication check to CORE', {module_name: module_name, method_name: method_name, err: err}); 51 logger.warn('Error requesting authentication check to CORE', {
52 module_name: MODULE_NAME,
53 method_name: methodName,
54 err,
55 });
50 res.end('SOMETHING WRONG'); 56 res.end('SOMETHING WRONG');
51 return; 57 return;
52 } 58 }
53 59
54 const redirectQs = { 60 const redirectQs = {
55 terminal_name: req.body.terminal_name, 61 terminal_name: req.body.terminal_name,
56 ref: req.query.ref 62 ref: req.query.ref,
57 } 63 };
58 64
59 if (coreResponse.message) { 65 if (coreResponse.message) {
60 redirectQs.msg = coreResponse.message; 66 redirectQs.msg = coreResponse.message;
61 } 67 }
62 68
63 if (coreResponse.error) { 69 if (coreResponse.error) {
64 res.redirect('/login?' + querystring.stringify(redirectQs)); 70 res.redirect(`/login?${querystring.stringify(redirectQs)}`);
65 return; 71 return;
66 } 72 }
67 73
68 if (!coreResponse.terminal) { 74 if (!coreResponse.terminal) {
69 redirectQs.msg = 'Terminal tidak terdefinisi'; 75 redirectQs.msg = 'Terminal tidak terdefinisi';
70 res.redirect('/login?' + querystring.stringify(redirectQs)); 76 res.redirect(`/login?${querystring.stringify(redirectQs)}`);
71 return; 77 return;
72 } 78 }
73 79
74 if (!coreResponse.terminal.super || !coreResponse.terminal.store_is_super) { 80 if (!coreResponse.terminal.super || !coreResponse.terminal.store_is_super) {
75 redirectQs.msg = 'Hanya super terminal pada super store yang dapat mengakses sistem.'; 81 redirectQs.msg = 'Hanya super terminal pada super store yang dapat mengakses sistem.';
76 res.redirect('/login?' + querystring.stringify(redirectQs)); 82 res.redirect(`/login?${querystring.stringify(redirectQs)}`);
77 return; 83 return;
78 } 84 }
79 85
80 req.session.username = req.body.terminal_name; 86 req.session.username = req.body.terminal_name;
81 req.session.terminal = coreResponse.terminal; 87 req.session.terminal = coreResponse.terminal;
82 88
83 let redirectUrl = req.query.ref || '/'; 89 const redirectUrl = req.query.ref || '/';
84 res.redirect(redirectUrl); 90 res.redirect(redirectUrl);
85 }); 91 });
86 } 92 }
87 93
88 function pageLogout(req, res) { 94 function pageLogout(req, res) {
89 req.session.username = null; 95 req.session.username = null;
90 req.session.terminal = null; 96 req.session.terminal = null;
91 97
92 res.redirect('/login'); 98 res.redirect('/login');
93 } 99 }
94 100
95 router.get('/', pageLogin); 101 router.get('/', pageLogin);
96 router.post('/', bodyParser.urlencoded({extended: true}), pageLoginSubmitted); 102 router.post('/', bodyParser.urlencoded({ extended: true }), pageLoginSubmitted);
97 router.get('/out', pageLogout); 103 router.get('/out', pageLogout);
98 104
99 module.exports = router; 105 module.exports = router;
control-panel/lib/router-main.js
1 const os = require('os'); 1 const os = require('os');
2 2
3 const express = require('express'); 3 const express = require('express');
4 const router = express.Router();
5
6 const numeral = require('numeral'); 4 const numeral = require('numeral');
7 5
8 const logger = require('tektrans-logger'); 6 const logger = require('tektrans-logger');
9 const matrix = require('komodo-sdk/matrix'); 7 const matrix = require('../../matrix');
10 8
11 const misc = require('./misc'); 9 const misc = require('./misc');
12 10
11 const router = express.Router();
12
13 function pageMain(req, res) { 13 function pageMain(req, res) {
14 res.redirect('/runtime'); 14 res.redirect('/runtime');
15 } 15 }
16 16
17 function pageLog(req, res) { 17 function pageLog(req, res) {
18 logger.query({json: true, order: 'desc'}, function(err) { 18 logger.query({ json: true, order: 'desc' }, (err) => {
19 if (err) { 19 if (err) {
20 return res.end('INVALID LOGGER'); 20 res.end('INVALID LOGGER');
21 return;
21 } 22 }
22 23
23 res.render( 24 res.render(
24 req.app.locals.cp_views_dir + '/log.html', 25 `${req.app.locals.cp_views_dir}/log.html`,
25 { 26 {
26 // log: JSON.stringify(results.logs, null, 4) 27 // log: JSON.stringify(results.logs, null, 4)
27 log: '[]' 28 log: '[]',
28 } 29 },
29 ); 30 );
30
31 }); 31 });
32 } 32 }
33 function pageRuntime(req, res) {
34 33
34 function pageRuntime(req, res) {
35 res.render( 35 res.render(
36 req.app.locals.cp_views_dir + '/runtime.html', 36 `${req.app.locals.cp_views_dir}/runtime.html`,
37 { 37 {
38 uptime: numeral(process.uptime()).format(), 38 uptime: numeral(process.uptime()).format(),
39 matrix: JSON.stringify(matrix, null, 4), 39 matrix: JSON.stringify(matrix, null, 4),
40 memory_usage: JSON.stringify(process.memoryUsage(), null, 4), 40 memory_usage: JSON.stringify(process.memoryUsage(), null, 4),
41 os_info: JSON.stringify({ 41 os_info: JSON.stringify({
42 uptime: os.uptime(), 42 uptime: os.uptime(),
43 loadavg: os.loadavg(), 43 loadavg: os.loadavg(),
44 hostname: os.hostname(), 44 hostname: os.hostname(),
45 type: os.type(), 45 type: os.type(),
46 platform: os.platform(), 46 platform: os.platform(),
47 arch: os.arch(), 47 arch: os.arch(),
48 release: os.release(), 48 release: os.release(),
49 totalmem: os.totalmem(), 49 totalmem: os.totalmem(),
50 }, null, 4), 50 }, null, 4),
51 } 51 },
52 ) 52 );
53 } 53 }
54 54
55 function pageTerminate(req, res) { 55 function pageTerminate(req, res) {
56 res.end('Terminating....', function() { 56 res.end('Terminating....', () => {
57 process.exit(0); 57 process.exit(0);
58 }); 58 });
59 } 59 }
60 60
61 //router.use(misc.needAuthUser);
62
63 router.get('/', pageMain); 61 router.get('/', pageMain);
64 router.get('/runtime', misc.needAuthUser, pageRuntime); 62 router.get('/runtime', misc.needAuthUser, pageRuntime);
65 router.get('/log', misc.needAuthUser, pageLog); 63 router.get('/log', misc.needAuthUser, pageLog);
66 router.get('/terminate', misc.needAuthUser, pageTerminate); 64 router.get('/terminate', misc.needAuthUser, pageTerminate);
control-panel/lib/routers.js
1 "use strict";
2
3 const routerMain = require('./router-main'); 1 const routerMain = require('./router-main');
4 const routerLogin = require('./router-login'); 2 const routerLogin = require('./router-login');
5 const routerConfig = require('./router-config'); 3 const routerConfig = require('./router-config');
6 4
7 function init(app) { 5 function init(app) {
8 app.use('/login', routerLogin); 6 app.use('/login', routerLogin);
9 app.use('/', routerMain); 7 app.use('/', routerMain);
10 app.use('/config', routerConfig); 8 app.use('/config', routerConfig);
11 } 9 }
12 10
13 exports.init = init; 11 exports.init = init;
14 12