Commit 4c2bf5924809dcaf16971ae942377b1163ab96b9

Authored by Adhidarma Hadiwinoto
1 parent 1dce6b7b58
Exists in master

Add "/" handler on callback

Showing 1 changed file with 12 additions and 0 deletions Inline Diff

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) { 29 if (config.partner && config.partner.callback && config.partner.callback.trust_proxy) {
30 logger.verbose(`${MODULE_NAME} 9774C2DB: Trusting proxy`, { 30 logger.verbose(`${MODULE_NAME} 9774C2DB: Trusting proxy`, {
31 trusted: config.partner.callback.trust_proxy, 31 trusted: config.partner.callback.trust_proxy,
32 }); 32 });
33 33
34 app.set('trust proxy', config.partner.callback.trust_proxy); 34 app.set('trust proxy', config.partner.callback.trust_proxy);
35 } 35 }
36 36
37 app.use((req, res, next) => { 37 app.use((req, res, next) => {
38 res.locals.xid = uniqid(); 38 res.locals.xid = uniqid();
39 next(); 39 next();
40 }); 40 });
41 41
42 morgan.token('xid', (req, res) => (res.locals.xid)); 42 morgan.token('xid', (req, res) => (res.locals.xid));
43 43
44 const accessLogFilenameGenerator = (time, index) => { 44 const accessLogFilenameGenerator = (time, index) => {
45 if (!time) return baseFileName; 45 if (!time) return baseFileName;
46 46
47 return [ 47 return [
48 baseFileName, 48 baseFileName,
49 moment(time).format('YYYY-MM-DD'), 49 moment(time).format('YYYY-MM-DD'),
50 index || null, 50 index || null,
51 ].filter((item) => item) 51 ].filter((item) => item)
52 .join('.'); 52 .join('.');
53 }; 53 };
54 54
55 const accessLogStream = rfs.createStream(accessLogFilenameGenerator, { 55 const accessLogStream = rfs.createStream(accessLogFilenameGenerator, {
56 interval: '1d', 56 interval: '1d',
57 }); 57 });
58 58
59 app.use( 59 app.use(
60 morgan( 60 morgan(
61 ':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',
62 { 62 {
63 stream: accessLogStream, 63 stream: accessLogStream,
64 }, 64 },
65 ), 65 ),
66 ); 66 );
67 67
68 app.use((req, res, next) => { 68 app.use((req, res, next) => {
69 const { xid } = res.locals; 69 const { xid } = res.locals;
70 70
71 logger.info(`${MODULE_NAME} 78F5DD49: Got a request on callback listener`, { 71 logger.info(`${MODULE_NAME} 78F5DD49: Got a request on callback listener`, {
72 xid, 72 xid,
73 ip: req.ip, 73 ip: req.ip,
74 method: req.method, 74 method: req.method,
75 url: req.url, 75 url: req.url,
76 }); 76 });
77 77
78 next(); 78 next();
79 }); 79 });
80 80
81 app.use('/apikey/:apikey', apikeyChecker); 81 app.use('/apikey/:apikey', apikeyChecker);
82 app.use('/apikey/:apikey', express.urlencoded({ extended: true })); 82 app.use('/apikey/:apikey', express.urlencoded({ extended: true }));
83 app.use('/apikey/:apikey', express.json()); 83 app.use('/apikey/:apikey', express.json());
84 84
85 app.use('/apikey/:apikey', dumper); 85 app.use('/apikey/:apikey', dumper);
86 app.use('/apikey/:apikey/prepaid', handlerPrepaid); 86 app.use('/apikey/:apikey/prepaid', handlerPrepaid);
87 app.use('/apikey/:apikey/TOPUP', handlerPrepaid); 87 app.use('/apikey/:apikey/TOPUP', handlerPrepaid);
88 app.use('/apikey/:apikey/:hitType', handlerPostpaid); 88 app.use('/apikey/:apikey/:hitType', handlerPostpaid);
89 89
90 app.use('/', (req, res) => {
91 const { xid } = res.locals;
92
93 res.json({
94 status: 'OK',
95 error: null,
96 ts: new Date(),
97 message: 'Have you RTFM?',
98 xid,
99 });
100 });
101
90 app 102 app
91 .listen(listenPort, () => { 103 .listen(listenPort, () => {
92 logger.info(`${MODULE_NAME} F702D60D: Callback listener ready to get request`, { 104 logger.info(`${MODULE_NAME} F702D60D: Callback listener ready to get request`, {
93 listenPort, 105 listenPort,
94 }); 106 });
95 }) 107 })
96 .on('error', (e) => { 108 .on('error', (e) => {
97 logger.warn(`${MODULE_NAME} B299BD82: Exception on EXPRESS SERVER`, { 109 logger.warn(`${MODULE_NAME} B299BD82: Exception on EXPRESS SERVER`, {
98 eCode: e.code, 110 eCode: e.code,
99 eMessage: e.message, 111 eMessage: e.message,
100 }); 112 });
101 113
102 process.exit(1); 114 process.exit(1);
103 }); 115 });
104 116