Blame view

lib/apiserver/index.js 3.94 KB
c0741a574   Adhidarma Hadiwinoto   Completed
1
2
3
4
5
6
7
8
  "use strict";
  
  /**
   * Modul untuk menerima callback dari modem handler jika ada SMS masuk.
   */
  
  
  const express = require('express');
4fbfae95f   Adhidarma Hadiwinoto   Messages history
9
  const moment = require('moment');
c0741a574   Adhidarma Hadiwinoto   Completed
10
11
12
13
14
  
  const messagingService = require('komodo-center-messaging-client-lib');
  
  const config = require('komodo-sdk/config');
  const logger = require('komodo-sdk/logger');
4fbfae95f   Adhidarma Hadiwinoto   Messages history
15
16
17
  const transport = require('../transport');
  const partnerLastSeen = require('../partner-last-seen');
  const history = require('../history');
fec24f5b5   Adhidarma Hadiwinoto   Tdk perlu update ...
18
  // const modems = require('../modems2');
c0741a574   Adhidarma Hadiwinoto   Completed
19

d23d98061   Adhidarma Hadiwinoto   router-modems
20
  const routerModems = require('./router-modems');
48a5c004b   Adhidarma Hadiwinoto   MIgration message...
21
22
23
  if (config.handler_callback_server) {
      logger.warn('Deprecated config.handler_callback_server. Please migrate it to config.apiserver!');
  }
c0741a574   Adhidarma Hadiwinoto   Completed
24
25
26
27
  const app = express();
  messagingService.setTransport(transport);
  
  function apikeyChecker(req, res, next) {
48a5c004b   Adhidarma Hadiwinoto   MIgration message...
28
      res.locals.has_valid_apikey = req.params.apikey === (config.apiserver.apikey || config.handler_callback_server.apikey);
c0741a574   Adhidarma Hadiwinoto   Completed
29
30
31
32
      if (res.locals.has_valid_apikey) {
          next();
      }
      else {
4fbfae95f   Adhidarma Hadiwinoto   Messages history
33
          res.end('APISERVER: Invalid apikey');
c0741a574   Adhidarma Hadiwinoto   Completed
34
35
36
37
38
      }
  }
  
  function onIncomingSms(req, res) {
      res.end('OK');
e4139cb42   Adhidarma Hadiwinoto   Tidak lapor ke me...
39
40
  
      if (!req.query.number) return;
4fbfae95f   Adhidarma Hadiwinoto   Messages history
41
      const numberWithSuffix = req.query.number.replace(/^\+/, '') + (config.number_suffix || '');
c0741a574   Adhidarma Hadiwinoto   Completed
42

03f73469d   Adhidarma Hadiwinoto   Partner last seen...
43
      partnerLastSeen.set(req.query.number, req.query.modem_imsi);
f53fe083f   Adhidarma Hadiwinoto   Sender chooser algo
44

4fbfae95f   Adhidarma Hadiwinoto   Messages history
45
46
47
48
49
50
51
52
53
54
55
      history.push({
          ts: req.query.ts || moment().format('YYYY-MM-DD HH:mm:ss'),
          modem: {
              name: req.query.modem,
              imsi: req.query.modem_imsi,
              msisdn: req.query.modem_msisdn,
          },
          direction: 'INCOMING',
          partner: req.query.number,
          message: req.query.msg,
      });
fec24f5b5   Adhidarma Hadiwinoto   Tdk perlu update ...
56
      /*
f43dbc16a   Adhidarma Hadiwinoto   New modem selector
57
58
      modems.set({
          name: req.query.modem,
7f757cc71   Adhidarma Hadiwinoto   Tambahan property...
59
          device: req.query.modem_device,
f43dbc16a   Adhidarma Hadiwinoto   New modem selector
60
61
          imsi: req.query.modem_imsi,
          msisdn: req.query.modem_msisdn,
7f757cc71   Adhidarma Hadiwinoto   Tambahan property...
62
63
64
          networkId: req.query.modem.network_id,
          networkName: req.query.modem_network_name,
          signalStrength: req.query.modem_signal_strength,
527c38f99   Adhidarma Hadiwinoto   ModemData._ts
65
          uptime: req.query.uptime,
f43dbc16a   Adhidarma Hadiwinoto   New modem selector
66
67
68
          reportIp: req.query.report_ip || req.ip,
          reportPort: req.query.report_port,
          reportApikey: req.query.report_apikey,
b6d23624a   Adhidarma Hadiwinoto   ModemData.reportP...
69
          reportPathSms: req.query.report_path_sms || '/sms',
f43dbc16a   Adhidarma Hadiwinoto   New modem selector
70
      });
fec24f5b5   Adhidarma Hadiwinoto   Tdk perlu update ...
71
      */
f43dbc16a   Adhidarma Hadiwinoto   New modem selector
72

4fbfae95f   Adhidarma Hadiwinoto   Messages history
73
      logger.info('APISERVER: Incoming SMS', { modem: req.query.modem, from: req.query.number, from_with_suffix: numberWithSuffix, msg: req.query.msg });
c0741a574   Adhidarma Hadiwinoto   Completed
74
75
76
      messagingService.onIncomingMessage({
          me: req.query.modem,
          partner: numberWithSuffix,
d77b332bc   Adhidarma Hadiwinoto   partner_raw
77
          partner_raw: req.query.number,
e47b79cc4   Adhidarma Hadiwinoto   Update komodo-sdk...
78
79
80
81
82
          msg: req.query.msg,
          origin_label: `IMSI_${req.query.modem_imsi || 'UNKNOWN'}`,
          origin_transport: 'SMS',
          origin_partner: req.query.number,
          do_not_forward_to_core: req.query.number.indexOf('+') !== 0,
ef1c8149d   Adhidarma Hadiwinoto   Histori pengirima...
83
      });
c0741a574   Adhidarma Hadiwinoto   Completed
84
  }
1caafb61a   Adhidarma Hadiwinoto   History only rel...
85
86
  async function pageHistory(req, res) {
      res.json(await history.dump());
4fbfae95f   Adhidarma Hadiwinoto   Messages history
87
  }
c0741a574   Adhidarma Hadiwinoto   Completed
88
  app.use(function(req, res, next) {
639d09ae5   Adhidarma Hadiwinoto   Disable logging o...
89
90
91
92
93
94
95
      if ( 
          req && req.path && typeof req.path === 'string' 
          && (
              req.path.search(/\/modems$/) >= 0 
              || req.path.search(/\/modems\/set$/) >= 0 
          )
      ) {
005d613db   Adhidarma Hadiwinoto   jangan log modems...
96
97
98
99
          next();
          return;
      }
      
8f090c597   Adhidarma Hadiwinoto   req.path
100
      logger.verbose('APISERVER: Incoming http request', { ip: req.ip, path: req.path, url: req.url });
c0741a574   Adhidarma Hadiwinoto   Completed
101
102
      next();
  })
e4139cb42   Adhidarma Hadiwinoto   Tidak lapor ke me...
103

c0741a574   Adhidarma Hadiwinoto   Completed
104
105
106
107
  app.use('/apikey/:apikey', apikeyChecker);
  app.get('/apikey/:apikey/on-sms', onIncomingSms);
  app.get('/apikey/:apikey/inbox', onIncomingSms);
  app.get('/apikey/:apikey/on-sms/inbox', onIncomingSms);
4fbfae95f   Adhidarma Hadiwinoto   Messages history
108
  app.get('/apikey/:apikey/history', pageHistory);
a40e6288d   Adhidarma Hadiwinoto   perbaikan path ro...
109
  app.use('/apikey/:apikey/modems', routerModems);
c0741a574   Adhidarma Hadiwinoto   Completed
110

48a5c004b   Adhidarma Hadiwinoto   MIgration message...
111
112
113
114
115
116
117
118
119
120
  const listenPort = (config && config.apiserver && config.apiserver.listen_port ? config.apiserver.listen_port : null)
      || (config && config.handler_callback_server ? config.handler_callback_server.listen_port : null);
  
  if (listenPort) {
      app.listen(listenPort, () => {
          logger.info('HTTP Handler Callback server listening on port ' + listenPort);
      });
  } else {
      logger.warn('Undefined config.apiserver.listen_port for APISERVER. Not listening for command.');
  }