Commit 48ba4619d04ded0617eea07dbdd3be6f251849aa

Authored by Adhidarma Hadiwinoto
1 parent 23bee92dd5
Exists in master

Trust proxy by config.partner.callback.trust_proxy

Showing 2 changed files with 9 additions and 0 deletions Inline Diff

1 { 1 {
2 "handler_name": "KOMODO-GW-HTTPGETX", 2 "handler_name": "KOMODO-GW-HTTPGETX",
3 "pull_interval_ms": 1000, 3 "pull_interval_ms": 1000,
4 "partner": { 4 "partner": {
5 "url": "http://PLEASE_CHANGE_ME:25614", 5 "url": "http://PLEASE_CHANGE_ME:25614",
6 "terminal_name": "PLEASE_CHANGE_ME", 6 "terminal_name": "PLEASE_CHANGE_ME",
7 "password": "PLEASE_CHANGE_ME", 7 "password": "PLEASE_CHANGE_ME",
8 "dump_request": true, 8 "dump_request": true,
9 "callback": { 9 "callback": {
10 "port": 14000, 10 "port": 14000,
11 "url": "http://PLEASE_CHANGE_ME:14000", 11 "url": "http://PLEASE_CHANGE_ME:14000",
12 "apikey": [ 12 "apikey": [
13 "PLEASE_CHANGE_ME" 13 "PLEASE_CHANGE_ME"
14 ], 14 ],
15 "trust_proxy": ["loopback"],
15 "dump_request": true 16 "dump_request": true
16 } 17 }
17 }, 18 },
18 "control_panel": { 19 "control_panel": {
19 "listen_port": 16101, 20 "listen_port": 16101,
20 "url": "http://localhost:16101/" 21 "url": "http://localhost:16101/"
21 }, 22 },
22 "apiserver": { 23 "apiserver": {
23 "port": 16102, 24 "port": 16102,
24 "apikey": "PLEASE_CHANGE_ME", 25 "apikey": "PLEASE_CHANGE_ME",
25 "url": "http://localhost:16102/apikey/PLEASE_CHANGE_ME" 26 "url": "http://localhost:16102/apikey/PLEASE_CHANGE_ME"
26 }, 27 },
27 "push_server": { 28 "push_server": {
28 "apikey": "PLEASE_CHANGE_ME", 29 "apikey": "PLEASE_CHANGE_ME",
29 "advice": { 30 "advice": {
30 "port": 16103, 31 "port": 16103,
31 "url": "http://localhost:16103/apikey/PLEASE_CHANGE_ME/advice" 32 "url": "http://localhost:16103/apikey/PLEASE_CHANGE_ME/advice"
32 } 33 }
33 }, 34 },
34 "products": [ 35 "products": [
35 ], 36 ],
36 "remote_products": {}, 37 "remote_products": {},
37 "do_not_verbose_log_report": true 38 "do_not_verbose_log_report": true
38 } 39 }
lib/callback/index.js
1 const MODULE_NAME = 'CALLBACK'; 1 const MODULE_NAME = 'CALLBACK';
2 2
3 const express = require('express'); 3 const express = require('express');
4 const uniqid = require('uniqid'); 4 const uniqid = require('uniqid');
5 5
6 const config = require('komodo-sdk/config'); 6 const config = require('komodo-sdk/config');
7 const logger = require('tektrans-logger'); 7 const logger = require('tektrans-logger');
8 8
9 const morgan = require('morgan'); 9 const morgan = require('morgan');
10 const moment = require('moment'); 10 const moment = require('moment');
11 const rfs = require('rotating-file-stream'); 11 const rfs = require('rotating-file-stream');
12 12
13 const dumper = require('./dumper'); 13 const dumper = require('./dumper');
14 const apikeyChecker = require('./apikey-checker'); 14 const apikeyChecker = require('./apikey-checker');
15 const handlerPrepaid = require('./handler-prepaid'); 15 const handlerPrepaid = require('./handler-prepaid');
16 const handlerPostpaid = require('./handler-postpaid'); 16 const handlerPostpaid = require('./handler-postpaid');
17 17
18 const baseFileName = 'logs/callback_access_log'; 18 const baseFileName = 'logs/callback_access_log';
19 19
20 const app = express(); 20 const app = express();
21 21
22 const listenPort = config.partner.callback && config.partner.callback.port; 22 const listenPort = config.partner.callback && config.partner.callback.port;
23 23
24 if (!listenPort) { 24 if (!listenPort) {
25 logger.warn(`${MODULE_NAME} BC903CB7: Unknown listen port. Please specified on config.partner.callback.port`); 25 logger.warn(`${MODULE_NAME} BC903CB7: Unknown listen port. Please specified on config.partner.callback.port`);
26 process.exit(1); 26 process.exit(1);
27 } 27 }
28 28
29 if (config.partner && config.partner.callback && config.partner.callback.trust_proxy) {
30 logger.verbose(`${MODULE_NAME} 9774C2DB: Trusting proxy`, {
31 trusted: config.partner.callback.trust_proxy,
32 });
33
34 app.set('trust proxy', config.partner.callback.trust_proxy);
35 }
36
29 app.use((req, res, next) => { 37 app.use((req, res, next) => {
30 res.locals.xid = uniqid(); 38 res.locals.xid = uniqid();
31 next(); 39 next();
32 }); 40 });
33 41
34 morgan.token('xid', (req, res) => (res.locals.xid)); 42 morgan.token('xid', (req, res) => (res.locals.xid));
35 43
36 const accessLogFilenameGenerator = (time, index) => { 44 const accessLogFilenameGenerator = (time, index) => {
37 if (!time) return baseFileName; 45 if (!time) return baseFileName;
38 46
39 return [ 47 return [
40 baseFileName, 48 baseFileName,
41 moment(time).format('YYYY-MM-DD'), 49 moment(time).format('YYYY-MM-DD'),
42 index || null, 50 index || null,
43 ].filter((item) => item) 51 ].filter((item) => item)
44 .join('.'); 52 .join('.');
45 }; 53 };
46 54
47 const accessLogStream = rfs.createStream(accessLogFilenameGenerator, { 55 const accessLogStream = rfs.createStream(accessLogFilenameGenerator, {
48 interval: '1d', 56 interval: '1d',
49 }); 57 });
50 58
51 app.use( 59 app.use(
52 morgan( 60 morgan(
53 ':remote-addr - :remote-user [:date[clf]] ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent" :xid', 61 ':remote-addr - :remote-user [:date[clf]] ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent" :xid',
54 { 62 {
55 stream: accessLogStream, 63 stream: accessLogStream,
56 }, 64 },
57 ), 65 ),
58 ); 66 );
59 67
60 app.use((req, res, next) => { 68 app.use((req, res, next) => {
61 const { xid } = res.locals; 69 const { xid } = res.locals;
62 70
63 logger.info(`${MODULE_NAME} 78F5DD49: Got a request on callback listener`, { 71 logger.info(`${MODULE_NAME} 78F5DD49: Got a request on callback listener`, {
64 xid, 72 xid,
65 ip: req.ip, 73 ip: req.ip,
66 method: req.method, 74 method: req.method,
67 url: req.url, 75 url: req.url,
68 }); 76 });
69 77
70 next(); 78 next();
71 }); 79 });
72 80
73 app.use('/apikey/:apikey', apikeyChecker); 81 app.use('/apikey/:apikey', apikeyChecker);
74 app.use('/apikey/:apikey', express.urlencoded({ extended: true })); 82 app.use('/apikey/:apikey', express.urlencoded({ extended: true }));
75 app.use('/apikey/:apikey', express.json()); 83 app.use('/apikey/:apikey', express.json());
76 84
77 app.use('/apikey/:apikey', dumper); 85 app.use('/apikey/:apikey', dumper);
78 app.use('/apikey/:apikey/prepaid', handlerPrepaid); 86 app.use('/apikey/:apikey/prepaid', handlerPrepaid);
79 app.use('/apikey/:apikey/TOPUP', handlerPrepaid); 87 app.use('/apikey/:apikey/TOPUP', handlerPrepaid);
80 app.use('/apikey/:apikey/:hitType', handlerPostpaid); 88 app.use('/apikey/:apikey/:hitType', handlerPostpaid);
81 89
82 app 90 app
83 .listen(listenPort, () => { 91 .listen(listenPort, () => {
84 logger.info(`${MODULE_NAME} F702D60D: Callback listener ready to get request`, { 92 logger.info(`${MODULE_NAME} F702D60D: Callback listener ready to get request`, {
85 listenPort, 93 listenPort,
86 }); 94 });
87 }) 95 })
88 .on('error', (e) => { 96 .on('error', (e) => {
89 logger.warn(`${MODULE_NAME} B299BD82: Exception on EXPRESS SERVER`, { 97 logger.warn(`${MODULE_NAME} B299BD82: Exception on EXPRESS SERVER`, {
90 eCode: e.code, 98 eCode: e.code,
91 eMessage: e.message, 99 eMessage: e.message,
92 }); 100 });
93 101
94 process.exit(1); 102 process.exit(1);
95 }); 103 });
96 104