Commit 4c2bf5924809dcaf16971ae942377b1163ab96b9
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 |