Compare View
Commits (3)
Changes
Showing 4 changed files Inline Diff
control-panel/lib/misc.js
1 | "use strict"; | 1 | "use strict"; |
2 | 2 | ||
3 | const querystring = require('querystring'); | 3 | const querystring = require('querystring'); |
4 | 4 | ||
5 | function needAuthUser(req, res, next) { | 5 | function needAuthUser(req, res, next) { |
6 | if (!req || !req.session || !req.session.username) { | 6 | if (!req || !req.session || !req.session.username) { |
7 | const qs = { | 7 | const qs = { |
8 | msg: 'Anda diharuskan login sebagai super terminal dari super password untuk mengakses halaman yang diminta.', | 8 | msg: 'Anda diharuskan login sebagai super terminal dari super password untuk mengakses halaman yang diminta.', |
9 | ref: req.get('Referer') | 9 | ref: req.get('Referer') |
10 | }; | 10 | }; |
11 | 11 | ||
12 | res.redirect('/login?' + querystring.stringify(qs)); | 12 | res.redirect('/login?' + querystring.stringify(qs)); |
13 | return; | 13 | return; |
14 | } | 14 | } |
15 | 15 | ||
16 | next(); | 16 | next(); |
17 | } | 17 | } |
18 | 18 | ||
19 | exports.needAuthUser = needAuthUser; | 19 | exports.needAuthUser = needAuthUser; |
20 | 20 |
control-panel/lib/router-login.js
1 | "use strict"; | 1 | "use strict"; |
2 | 2 | ||
3 | const module_name = 'CONTROL_PANEL_' + require('path').basename(__filename); | 3 | const module_name = 'CONTROL_PANEL_' + require('path').basename(__filename); |
4 | 4 | ||
5 | const querystring = require('querystring'); | 5 | const querystring = require('querystring'); |
6 | const express = require('express'); | 6 | const express = require('express'); |
7 | const bodyParser = require('body-parser'); | 7 | const bodyParser = require('body-parser'); |
8 | const router = express.Router(); | 8 | const router = express.Router(); |
9 | 9 | ||
10 | const config = require('komodo-sdk/config'); | 10 | const config = require('komodo-sdk/config'); |
11 | const logger = require('komodo-sdk/logger'); | 11 | const logger = require('komodo-sdk/logger'); |
12 | 12 | ||
13 | const requestToCore = require('./request-to-core'); | 13 | const requestToCore = require('./request-to-core'); |
14 | 14 | ||
15 | function pageLogin(req, res, next) { | 15 | function pageLogin(req, res, next) { |
16 | if (req.session && req.session.username && req.session.terminal) { | 16 | if (req.session && req.session.username && req.session.terminal) { |
17 | res.redirect('/'); | 17 | res.redirect('/'); |
18 | return; | 18 | return; |
19 | } | 19 | } |
20 | 20 | ||
21 | res.render( | 21 | res.render( |
22 | req.app.locals.cp_views_dir + '/login.html', | 22 | req.app.locals.cp_views_dir + '/login.html', |
23 | { | 23 | { |
24 | ref: req.query.ref, | 24 | ref: req.query.ref, |
25 | msg: req.query.msg | 25 | msg: req.query.msg |
26 | } | 26 | } |
27 | ) | 27 | ) |
28 | } | 28 | } |
29 | 29 | ||
30 | function pageLoginSubmitted(req, res, next) { | 30 | function pageLoginSubmitted(req, res, next) { |
31 | const method_name = 'pageLoginSubmitted'; | 31 | const method_name = 'pageLoginSubmitted'; |
32 | 32 | ||
33 | if (!req || !req.body || !req.body.terminal_name || !req.body.password) { | 33 | if (!req || !req.body || !req.body.terminal_name || !req.body.password) { |
34 | const qs = { | 34 | const qs = { |
35 | msg: 'Nama terminal dan password harus diisi', | 35 | msg: 'Nama terminal dan password harus diisi', |
36 | ref: req.query.ref | 36 | ref: req.query.ref |
37 | }; | 37 | }; |
38 | 38 | ||
39 | res.redirect('/login?' + querystring.stringify(qs)); | 39 | res.redirect('/login?' + querystring.stringify(qs)); |
40 | return; | 40 | return; |
41 | } | 41 | } |
42 | 42 | ||
43 | const qs = { | 43 | const qs = { |
44 | terminal_name: req.body.terminal_name, | 44 | terminal_name: req.body.terminal_name, |
45 | web_password: req.body.password, | 45 | web_password: req.body.password, |
46 | request_by: config.handler_name || config.username || config.origin | 46 | request_by: config.handler_name || config.username || config.origin |
47 | } | 47 | } |
48 | 48 | ||
49 | requestToCore.doRequestAndParse('/services/terminalAuthentication', qs, function(err, coreResponse) { | 49 | requestToCore.doRequestAndParse('/services/terminalAuthentication', qs, function(err, coreResponse) { |
50 | if (err) { | 50 | if (err) { |
51 | 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', {module_name: module_name, method_name: method_name, err: err}); |
52 | res.end('SOMETHING WRONG'); | 52 | res.end('SOMETHING WRONG'); |
53 | return; | 53 | return; |
54 | } | 54 | } |
55 | 55 | ||
56 | const redirectQs = { | 56 | const redirectQs = { |
57 | terminal_name: req.body.terminal_name, | 57 | terminal_name: req.body.terminal_name, |
58 | ref: req.query.ref | 58 | ref: req.query.ref |
59 | } | 59 | } |
60 | 60 | ||
61 | if (coreResponse.message) { | 61 | if (coreResponse.message) { |
62 | redirectQs.msg = coreResponse.message; | 62 | redirectQs.msg = coreResponse.message; |
63 | } | 63 | } |
64 | 64 | ||
65 | if (coreResponse.error) { | 65 | if (coreResponse.error) { |
66 | res.redirect('/login?' + querystring.stringify(redirectQs)); | 66 | res.redirect('/login?' + querystring.stringify(redirectQs)); |
67 | return; | 67 | return; |
68 | } | 68 | } |
69 | 69 | ||
70 | if (!coreResponse.terminal) { | 70 | if (!coreResponse.terminal) { |
71 | redirectQs.msg = 'Terminal tidak terdefinisi'; | 71 | redirectQs.msg = 'Terminal tidak terdefinisi'; |
72 | res.redirect('/login?' + querystring.stringify(redirectQs)); | 72 | res.redirect('/login?' + querystring.stringify(redirectQs)); |
73 | return; | 73 | return; |
74 | } | 74 | } |
75 | 75 | ||
76 | if (!coreResponse.terminal.super || !coreResponse.terminal.store_is_super) { | 76 | if (!coreResponse.terminal.super || !coreResponse.terminal.store_is_super) { |
77 | redirectQs.msg = 'Hanya super terminal pada super store yang dapat mengakses sistem.'; | 77 | redirectQs.msg = 'Hanya super terminal pada super store yang dapat mengakses sistem.'; |
78 | res.redirect('/login?' + querystring.stringify(redirectQs)); | 78 | res.redirect('/login?' + querystring.stringify(redirectQs)); |
79 | return; | 79 | return; |
80 | } | 80 | } |
81 | 81 | ||
82 | req.session.username = req.body.terminal_name; | 82 | req.session.username = req.body.terminal_name; |
83 | req.session.terminal = coreResponse.terminal; | 83 | req.session.terminal = coreResponse.terminal; |
84 | 84 | ||
85 | let redirectUrl = req.query.ref || '/'; | 85 | let redirectUrl = req.query.ref || '/'; |
86 | res.redirect(redirectUrl); | 86 | res.redirect(redirectUrl); |
87 | }); | 87 | }); |
88 | } | 88 | } |
89 | 89 | ||
90 | function pageLogout(req, res, next) { | 90 | function pageLogout(req, res, next) { |
91 | req.session.username = null; | 91 | req.session.username = null; |
92 | req.session.terminal = null; | 92 | req.session.terminal = null; |
93 | 93 | ||
94 | res.redirect('/login'); | 94 | res.redirect('/login'); |
95 | } | 95 | } |
96 | 96 | ||
97 | router.get('/', pageLogin); | 97 | router.get('/', pageLogin); |
98 | router.post('/', bodyParser.urlencoded({extended: true}), pageLoginSubmitted); | 98 | router.post('/', bodyParser.urlencoded({extended: true}), pageLoginSubmitted); |
99 | router.get('/out', pageLogout); | 99 | router.get('/out', pageLogout); |
100 | 100 | ||
101 | module.exports = router; | 101 | module.exports = router; |
102 | 102 |
control-panel/views/config.jsoneditor.html
1 | {% extends cp_views_dir + "/template.html" %} | 1 | {% extends cp_views_dir + "/template.html" %} |
2 | 2 | ||
3 | {% block head %} | 3 | {% block head %} |
4 | <link href="/control-panel/jsoneditor/jsoneditor.css" rel="stylesheet" type="text/css"> | 4 | <link href="/control-panel/jsoneditor/jsoneditor.css" rel="stylesheet" type="text/css"> |
5 | <script src="/control-panel/jsoneditor/jsoneditor.js"></script> | 5 | <script src="/control-panel/jsoneditor/jsoneditor.js"></script> |
6 | {% endblock %} | 6 | {% endblock %} |
7 | 7 | ||
8 | {% block content %} | 8 | {% block content %} |
9 | 9 | ||
10 | <h2>{{ page_title }}</h2> | 10 | <h2>{{ page_title }}</h2> |
11 | 11 | ||
12 | <div id="jsoneditor"></div> | 12 | <div id="jsoneditor"></div> |
13 | 13 | ||
14 | <script> | 14 | <script> |
15 | function saveData() { | 15 | function saveData() { |
16 | //window.alert(JSON.stringify(editor.get())); | 16 | //window.alert(JSON.stringify(editor.get())); |
17 | jQuery.ajax({ | 17 | jQuery.ajax({ |
18 | type: "POST", | 18 | type: "POST", |
19 | url: '/config/data', | 19 | url: '/config/data', |
20 | contentType: 'application/json', | 20 | contentType: 'application/json', |
21 | data: JSON.stringify(editor.get()), | 21 | data: JSON.stringify(editor.get()), |
22 | success: function(responseBody, textStatus, jqXHR) { | 22 | success: function(responseBody, textStatus, jqXHR) { |
23 | window.alert(responseBody); | 23 | window.alert(responseBody); |
24 | location.reload(); | 24 | location.reload(); |
25 | } | 25 | } |
26 | }); | 26 | }); |
27 | } | 27 | } |
28 | 28 | ||
29 | function loadData() { | 29 | function loadData() { |
30 | jQuery.ajax('/config/data').done(function(data) { | 30 | jQuery.ajax('/config/data').done(function(data) { |
31 | editor.setName('CONFIG'); | 31 | editor.setName('CONFIG'); |
32 | editor.set(data); | 32 | editor.set(data); |
33 | editor.expandAll(); | 33 | editor.expandAll(); |
34 | }); | 34 | }); |
35 | } | 35 | } |
36 | 36 | ||
37 | var container = document.getElementById("jsoneditor"); | 37 | var container = document.getElementById("jsoneditor"); |
38 | var options = { | 38 | var options = { |
39 | mode: '{{ jsoneditor_mode }}', | 39 | mode: '{{ jsoneditor_mode }}', |
40 | modes: ["form", "tree", "code"], | 40 | modes: ["form", "tree", "code"], |
41 | onChange: function() { | 41 | onChange: function() { |
42 | $("#buttonSubmit").removeAttr('disabled'); | 42 | $("#buttonSubmit").removeAttr('disabled'); |
43 | } | 43 | } |
44 | }; | 44 | }; |
45 | 45 | ||
46 | var editor = new JSONEditor(container, options); | 46 | var editor = new JSONEditor(container, options); |
47 | loadData(); | 47 | loadData(); |
48 | 48 | ||
49 | </script> | 49 | </script> |
50 | 50 | ||
51 | <br><br> | 51 | <br><br> |
52 | 52 | ||
53 | <div class="panel panel-default"> | 53 | <div class="panel panel-default"> |
54 | <div class="panel-body"> | 54 | <div class="panel-body"> |
55 | 55 | ||
56 | <button id="buttonSubmit" type="submit" class="btn btn-primary" | 56 | <button id="buttonSubmit" type="submit" class="btn btn-primary" |
57 | onclick="saveData()" | 57 | onclick="saveData()" |
58 | disabled | 58 | disabled |
59 | > | 59 | > |
60 | Eksekusi dan Simpan | 60 | Eksekusi dan Simpan |
61 | </button> | 61 | </button> |
62 | 62 | ||
63 | <button id="buttonSubmit" type="submit" class="btn btn-primary" | 63 | <button id="buttonSubmit" type="submit" class="btn btn-primary" |
64 | onclick="location.reload()" | 64 | onclick="location.reload()" |
65 | > | 65 | > |
66 | Reload Konfigurasi | 66 | Reload Konfigurasi |
67 | </button> | 67 | </button> |
68 | 68 | ||
69 | <button type="button" class="btn btn-danger" data-toggle="modal" data-target="#restartConfirmationModal"> | 69 | <button type="button" class="btn btn-danger" data-toggle="modal" data-target="#restartConfirmationModal"> |
70 | Restart Aplikasi | 70 | Restart Aplikasi |
71 | </button> | 71 | </button> |
72 | 72 | ||
73 | </div> | 73 | </div> |
74 | </div> | 74 | </div> |
75 | 75 | ||
76 | {% include cp_views_dir + "/restart.confirmation.modal.html" %} | 76 | {% include cp_views_dir + "/restart.confirmation.modal.html" %} |
77 | 77 | ||
78 | {% include "views/config.help.html" ignore missing %} | 78 | {% include "views/config.help.html" ignore missing %} |
79 | 79 | ||
80 | {% endblock %} | 80 | {% endblock %} |
81 | 81 |
package.json
1 | { | 1 | { |
2 | "name": "komodo-sdk", | 2 | "name": "komodo-sdk", |
3 | "version": "1.10.4", | 3 | "version": "1.10.5", |
4 | "description": "SDK for Komodo", | 4 | "description": "SDK for Komodo", |
5 | "main": "index.js", | 5 | "main": "index.js", |
6 | "scripts": { | 6 | "scripts": { |
7 | "test": "mocha", | 7 | "test": "mocha", |
8 | "postversion": "git push && git push --tags" | 8 | "postversion": "git push && git push --tags" |
9 | }, | 9 | }, |
10 | "repository": { | 10 | "repository": { |
11 | "type": "git", | 11 | "type": "git", |
12 | "url": "git@gitlab.kodesumber.com:komodo/komodo-sdk.git" | 12 | "url": "git@gitlab.kodesumber.com:komodo/komodo-sdk.git" |
13 | }, | 13 | }, |
14 | "keywords": [ | 14 | "keywords": [ |
15 | "ppob", | 15 | "ppob", |
16 | "payment", | 16 | "payment", |
17 | "komodo" | 17 | "komodo" |
18 | ], | 18 | ], |
19 | "author": "Adhidarma Hadiwinoto <gua@adhisimon.org>", | 19 | "author": "Adhidarma Hadiwinoto <gua@adhisimon.org>", |
20 | "license": "ISC", | 20 | "license": "ISC", |
21 | "dependencies": { | 21 | "dependencies": { |
22 | "basic-auth": "^2.0.0", | 22 | "basic-auth": "^2.0.0", |
23 | "body-parser": "^1.18.2", | 23 | "body-parser": "^1.18.2", |
24 | "express": "^4.16.2", | 24 | "express": "^4.16.2", |
25 | "express-session": "^1.15.6", | 25 | "express-session": "^1.15.6", |
26 | "lru-cache": "^4.1.1", | 26 | "lru-cache": "^4.1.1", |
27 | "moment": "^2.19.1", | 27 | "moment": "^2.19.1", |
28 | "numeral": "^2.0.6", | 28 | "numeral": "^2.0.6", |
29 | "nunjucks": "^3.0.1", | 29 | "nunjucks": "^3.0.1", |
30 | "request": "^2.81.0", | 30 | "request": "^2.81.0", |
31 | "simple-git": "^1.80.1", | 31 | "simple-git": "^1.80.1", |
32 | "strftime": "^0.10.0", | 32 | "strftime": "^0.10.0", |
33 | "uniqid": "^4.1.1", | 33 | "uniqid": "^4.1.1", |
34 | "uuid": "^3.1.0", | 34 | "uuid": "^3.1.0", |
35 | "winston": "^2.3.1", | 35 | "winston": "^2.3.1", |
36 | "winston-circular-buffer": "^1.0.0", | 36 | "winston-circular-buffer": "^1.0.0", |
37 | "winston-daily-rotate-file": "^1.4.6" | 37 | "winston-daily-rotate-file": "^1.4.6" |
38 | } | 38 | } |
39 | } | 39 | } |
40 | 40 |