Blame view

lib/partner-listener/routers/topup.js 5.18 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');
a9aef2698   Adhidarma Hadiwinoto   Separate webhook ...
10
  const webhookSender = require('../../webhook-sender');
f2c18879a   Adhidarma Hadiwinoto   INQUIRY finished
11
12
13
  
  const router = express.Router();
  module.exports = router;
f2be872ef   Adhidarma Hadiwinoto   config.terminals_...
14
15
16
17
18
  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
19
  function onInvalidParameter(missingParameter, req, res) {
9e61d939f   Adhidarma Hadiwinoto   TOPUP: cleansed
20
      logger.verbose(`${MODULE_NAME} 1536D577: Undefined ${missingParameter} parameter`, {
f2c18879a   Adhidarma Hadiwinoto   INQUIRY finished
21
22
23
24
25
26
27
28
29
30
31
32
          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...
33
34
      const terminalName = req.body.terminal_name || req.query.terminal_name;
      if (!terminalName || typeof terminalName !== 'string') {
f2c18879a   Adhidarma Hadiwinoto   INQUIRY finished
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
          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
63
      const { xid } = res.locals;
f485865e4   Adhidarma Hadiwinoto   Fix terminalsWith...
64
65
      const terminalNameWithoutIp = ((req.body.terminal_name || req.query.terminal_name) || '').trim();
      const terminalName = `${terminalNameWithoutIp}@${req.ip.replace(/^::ffff:/, '')}`;
f2c18879a   Adhidarma Hadiwinoto   INQUIRY finished
66

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

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

732c359a7   Adhidarma Hadiwinoto   Partner listener ...
143
      dumper(xid, req, responseToPartner);
a9aef2698   Adhidarma Hadiwinoto   Separate webhook ...
144
145
146
  
      const webhookType = 'KOMODO-CENTER-HTTPGETX.PARTNER-LISTENER.DIRECT-RESPONSE';
      webhookSender(xid, webhookType, responseToPartner);
f2c18879a   Adhidarma Hadiwinoto   INQUIRY finished
147
  }
65f444c36   Adhidarma Hadiwinoto   Activating /topup
148
  // router.all('/', (req, res) => { res.status(404).end('404: Not implemented yet'); });
f2c18879a   Adhidarma Hadiwinoto   INQUIRY finished
149
  router.get('/', pagePrerequisite, pageIndex);
445cb97fc   Adhidarma Hadiwinoto   pagePrerequisites...
150
  router.post('/', express.urlencoded({ extended: true }), express.json({ extended: true }), pagePrerequisite, pageIndex);