Blame view

lib/partner-listener/routers/topup.js 4.87 KB
9e61d939f   Adhidarma Hadiwinoto   TOPUP: cleansed
1
  const MODULE_NAME = 'PARTNER-LISTENER.ROUTER.TOPUP';
f2c18879a   Adhidarma Hadiwinoto   INQUIRY finished
2
3
4
  const express = require('express');
  
  const config = require('komodo-sdk/config');
810fa18da   Adhidarma Hadiwinoto   Migrate to tektra...
5
  const logger = require('tektrans-logger');
f2c18879a   Adhidarma Hadiwinoto   INQUIRY finished
6
7
  const coreapi = require('komodo-sdk/coreapi');
  // const coreapi = require('../../coreapi');
cd4feda87   Adhidarma Hadiwinoto   APISERVER and MATRIX
8
  const matrix = require('../../matrix');
732c359a7   Adhidarma Hadiwinoto   Partner listener ...
9
  const dumper = require('../dumper');
f2c18879a   Adhidarma Hadiwinoto   INQUIRY finished
10
11
12
  
  const router = express.Router();
  module.exports = router;
f2be872ef   Adhidarma Hadiwinoto   config.terminals_...
13
14
15
16
17
  const terminalsWithLocation = Array.isArray(config.terminals_with_location)
      ? config.terminals_with_location
          .filter((item) => typeof item === 'string')
          .map((item) => (item.trim().toLowerCase()))
      : [];
f2c18879a   Adhidarma Hadiwinoto   INQUIRY finished
18
  function onInvalidParameter(missingParameter, req, res) {
9e61d939f   Adhidarma Hadiwinoto   TOPUP: cleansed
19
      logger.verbose(`${MODULE_NAME} 1536D577: Undefined ${missingParameter} parameter`, {
f2c18879a   Adhidarma Hadiwinoto   INQUIRY finished
20
21
22
23
24
25
26
27
28
29
30
31
          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 = {};
d7eb80819   Adhidarma Hadiwinoto   Pengamanan termin...
32
33
      const terminalName = req.body.terminal_name || req.query.terminal_name;
      if (!terminalName || typeof terminalName !== 'string') {
f2c18879a   Adhidarma Hadiwinoto   INQUIRY finished
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
          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) {
9e61d939f   Adhidarma Hadiwinoto   TOPUP: cleansed
62
      const { xid } = res.locals;
f485865e4   Adhidarma Hadiwinoto   Fix terminalsWith...
63
64
      const terminalNameWithoutIp = ((req.body.terminal_name || req.query.terminal_name) || '').trim();
      const terminalName = `${terminalNameWithoutIp}@${req.ip.replace(/^::ffff:/, '')}`;
f2c18879a   Adhidarma Hadiwinoto   INQUIRY finished
65

f2be872ef   Adhidarma Hadiwinoto   config.terminals_...
66
67
68
69
70
71
72
73
74
75
76
      const 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,
      };
f485865e4   Adhidarma Hadiwinoto   Fix terminalsWith...
77
      if (terminalsWithLocation.indexOf(terminalNameWithoutIp.toLowerCase()) >= 0) {
f2be872ef   Adhidarma Hadiwinoto   config.terminals_...
78
79
80
81
82
83
          const location = req.body.location
              || req.body.location_id
              || req.query.location
              || req.query.location_id;
  
          if (location) {
0ce2484a6   Adhidarma Hadiwinoto   Add log on includ...
84
85
86
87
88
              logger.verbose(`${MODULE_NAME} 5C41FBFA: Including location from partner request`, {
                  xid,
                  terminalName,
                  location,
              });
f2be872ef   Adhidarma Hadiwinoto   config.terminals_...
89
90
91
              qs.location = location;
          }
      }
b403448ad   Adhidarma Hadiwinoto   Refactor some matrix
92
      matrix.core.sent += 1;
cd4feda87   Adhidarma Hadiwinoto   APISERVER and MATRIX
93

f2c18879a   Adhidarma Hadiwinoto   INQUIRY finished
94
      const [err, coreResponse] = await coreapi({
9e61d939f   Adhidarma Hadiwinoto   TOPUP: cleansed
95
          xid,
f2c18879a   Adhidarma Hadiwinoto   INQUIRY finished
96
          path: '/prepaid/buy',
f2be872ef   Adhidarma Hadiwinoto   config.terminals_...
97
          qs,
f2c18879a   Adhidarma Hadiwinoto   INQUIRY finished
98
      });
bdbbbf27d   Adhidarma Hadiwinoto   TOPUP: Forward di...
99
      if (err || !coreResponse) {
b403448ad   Adhidarma Hadiwinoto   Refactor some matrix
100
101
102
103
104
105
106
107
          matrix.core.sent_failed += 1;
          matrix.core.last_error = {
              xid,
              ts: new Date(),
              e: err,
              eCode: err.code,
              eMessage: err.message,
          };
9e61d939f   Adhidarma Hadiwinoto   TOPUP: cleansed
108
109
110
111
112
          logger.warn(`${MODULE_NAME} 8DEBE15F: ERROR on /prepaid/buy response`, {
              xid,
              err,
              coreResponseTypeof: typeof coreResponse,
              coreResponse,
f2c18879a   Adhidarma Hadiwinoto   INQUIRY finished
113
114
          });
          res.end('INVALID CORE RESPONSE');
732c359a7   Adhidarma Hadiwinoto   Partner listener ...
115
116
  
          dumper(xid, req, 'INVALID CORE RESPONSE');
f2c18879a   Adhidarma Hadiwinoto   INQUIRY finished
117
118
          return;
      }
9e61d939f   Adhidarma Hadiwinoto   TOPUP: cleansed
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
      logger.verbose(`${MODULE_NAME} 2528A9B4: Got CORE response`, {
          xid,
          coreResponse,
      });
  
      const responseToPartner = {
          httpgetx_xid: xid,
          request_id: coreResponse.request_id,
          transaction_id: coreResponse.transaction_id,
          transaction_date: coreResponse.transaction_date,
          store_name: coreResponse.store_name,
          terminal_name: coreResponse.terminal_name,
          product_name: coreResponse.product_name,
          destination: coreResponse.destination,
          rc: coreResponse.rc,
050d92ffb   Adhidarma Hadiwinoto   Undefined on miss...
134
          sn: coreResponse.sn || undefined,
70df828c5   Adhidarma Hadiwinoto   TOPUP: undefined ...
135
136
          amount: Number(coreResponse.amount) || undefined,
          ending_balance: Number(coreResponse.ending_balance) || undefined,
9e61d939f   Adhidarma Hadiwinoto   TOPUP: cleansed
137
138
139
140
          message: coreResponse.message,
      };
  
      res.json(responseToPartner);
732c359a7   Adhidarma Hadiwinoto   Partner listener ...
141
      dumper(xid, req, responseToPartner);
f2c18879a   Adhidarma Hadiwinoto   INQUIRY finished
142
  }
65f444c36   Adhidarma Hadiwinoto   Activating /topup
143
  // router.all('/', (req, res) => { res.status(404).end('404: Not implemented yet'); });
f2c18879a   Adhidarma Hadiwinoto   INQUIRY finished
144
  router.get('/', pagePrerequisite, pageIndex);