topup.js
2.82 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
const express = require('express');
const config = require('komodo-sdk/config');
const logger = require('komodo-sdk/logger');
const coreapi = require('komodo-sdk/coreapi');
// const coreapi = require('../../coreapi');
const router = express.Router();
module.exports = router;
function onInvalidParameter(missingParameter, req, res) {
logger.verbose(`TOPUP: Undefined ${missingParameter} parameter`, {
xid: res.locals.xid,
ip: req.ip,
terminal_name: req.body.terminal_name || req.query.terminal_name,
request_id: req.body.request_id || req.query.request_id,
product_name: req.body.product_name || req.query.product_name,
destination: req.body.destination || req.query.destination,
});
res.end('INVALID REQUEST');
}
function pagePrerequisite(req, res, next) {
if (!req.body) req.body = {};
if (!req.body.terminal_name && !req.query.terminal_name) {
onInvalidParameter('terminal_name', req, res);
return;
}
if (!req.body.password && !req.query.password) {
onInvalidParameter('password', req, res);
return;
}
if (!req.body.request_id && !req.query.request_id) {
onInvalidParameter('request_id', req, res);
return;
}
if (!req.body.product_name && !req.query.product_name) {
onInvalidParameter('product_name', req, res);
return;
}
if (!req.body.destination && !req.query.destination) {
onInvalidParameter('destination', req, res);
return;
}
next();
}
async function pageIndex(req, res) {
const terminalName = `${req.body.terminal_name || req.query.terminal_name}@${req.ip.replace(/^::ffff:/, '')}`;
const [err, coreResponse] = await coreapi({
xid: res.locals.xid,
path: '/prepaid/buy',
qs: {
terminal_name: terminalName,
password: req.body.password || req.query.password,
request_id: req.body.request_id || req.query.request_id,
product_name: req.body.product_name || req.query.product_name,
destination: req.body.destination || req.query.destination,
origin: config.name || 'HTTPGETX',
report_ip: config.listener.core.ip || null,
report_port: config.listener.core.port,
reverse_url: req.body.reverse_url || req.query.reverse_url || null,
},
});
logger.verbose('Got CORE response', { xid: res.locals.xid, err, coreResponse });
if (err) {
logger.warn('TOPUP: ERROR on /prepaid/buy response', {
xid: res.locals.xid, err, coreResponseTypeof: typeof coreResponse, coreResponse,
});
res.end('INVALID CORE RESPONSE');
return;
}
res.end('OK');
}
// router.all('/', (req, res) => { res.status(404).end('404: Not implemented yet'); });
router.get('/', pagePrerequisite, pageIndex);