Blame view

lib/partner-listener/routers/topup.js 4.53 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
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
          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) {
9e61d939f   Adhidarma Hadiwinoto   TOPUP: cleansed
62
      const { xid } = res.locals;
f2c18879a   Adhidarma Hadiwinoto   INQUIRY finished
63
      const terminalName = `${req.body.terminal_name || req.query.terminal_name}@${req.ip.replace(/^::ffff:/, '')}`;
f2be872ef   Adhidarma Hadiwinoto   config.terminals_...
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
      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,
      };
  
      if (terminalsWithLocation.indexOf(terminalName.toLowerCase()) >= 0) {
          const location = req.body.location
              || req.body.location_id
              || req.query.location
              || req.query.location_id;
  
          if (location) {
              qs.location = location;
          }
      }
b403448ad   Adhidarma Hadiwinoto   Refactor some matrix
86
      matrix.core.sent += 1;
cd4feda87   Adhidarma Hadiwinoto   APISERVER and MATRIX
87

f2c18879a   Adhidarma Hadiwinoto   INQUIRY finished
88
      const [err, coreResponse] = await coreapi({
9e61d939f   Adhidarma Hadiwinoto   TOPUP: cleansed
89
          xid,
f2c18879a   Adhidarma Hadiwinoto   INQUIRY finished
90
          path: '/prepaid/buy',
f2be872ef   Adhidarma Hadiwinoto   config.terminals_...
91
          qs,
f2c18879a   Adhidarma Hadiwinoto   INQUIRY finished
92
      });
bdbbbf27d   Adhidarma Hadiwinoto   TOPUP: Forward di...
93
      if (err || !coreResponse) {
b403448ad   Adhidarma Hadiwinoto   Refactor some matrix
94
95
96
97
98
99
100
101
          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
102
103
104
105
106
          logger.warn(`${MODULE_NAME} 8DEBE15F: ERROR on /prepaid/buy response`, {
              xid,
              err,
              coreResponseTypeof: typeof coreResponse,
              coreResponse,
f2c18879a   Adhidarma Hadiwinoto   INQUIRY finished
107
108
          });
          res.end('INVALID CORE RESPONSE');
732c359a7   Adhidarma Hadiwinoto   Partner listener ...
109
110
  
          dumper(xid, req, 'INVALID CORE RESPONSE');
f2c18879a   Adhidarma Hadiwinoto   INQUIRY finished
111
112
          return;
      }
9e61d939f   Adhidarma Hadiwinoto   TOPUP: cleansed
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
      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...
128
          sn: coreResponse.sn || undefined,
70df828c5   Adhidarma Hadiwinoto   TOPUP: undefined ...
129
130
          amount: Number(coreResponse.amount) || undefined,
          ending_balance: Number(coreResponse.ending_balance) || undefined,
9e61d939f   Adhidarma Hadiwinoto   TOPUP: cleansed
131
132
133
134
          message: coreResponse.message,
      };
  
      res.json(responseToPartner);
732c359a7   Adhidarma Hadiwinoto   Partner listener ...
135
      dumper(xid, req, responseToPartner);
f2c18879a   Adhidarma Hadiwinoto   INQUIRY finished
136
  }
65f444c36   Adhidarma Hadiwinoto   Activating /topup
137
  // router.all('/', (req, res) => { res.status(404).end('404: Not implemented yet'); });
f2c18879a   Adhidarma Hadiwinoto   INQUIRY finished
138
  router.get('/', pagePrerequisite, pageIndex);