Blame view

lib/apiserver/index.js 4.04 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) {
6cd19a9c9   Adhidarma Hadiwinoto   Typo
28
      res.locals.has_valid_apikey = req.params.apikey === ((config.apiserver && config.apiserver.apikey ? config.apiserver.apikey : null) || config.handler_callback_server.apikey);
c0741a574   Adhidarma Hadiwinoto   Completed
29
30
31
32
      if (res.locals.has_valid_apikey) {
          next();
      }
      else {
780f6ea74   Adhidarma Hadiwinoto   Log on invalid ap...
33
          logger.warn('Invalid apikey', { ip: req.ip });
4fbfae95f   Adhidarma Hadiwinoto   Messages history
34
          res.end('APISERVER: Invalid apikey');
c0741a574   Adhidarma Hadiwinoto   Completed
35
36
37
38
39
      }
  }
  
  function onIncomingSms(req, res) {
      res.end('OK');
e4139cb42   Adhidarma Hadiwinoto   Tidak lapor ke me...
40
41
  
      if (!req.query.number) return;
4fbfae95f   Adhidarma Hadiwinoto   Messages history
42
      const numberWithSuffix = req.query.number.replace(/^\+/, '') + (config.number_suffix || '');
c0741a574   Adhidarma Hadiwinoto   Completed
43

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

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

4fbfae95f   Adhidarma Hadiwinoto   Messages history
74
      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
75
76
77
      messagingService.onIncomingMessage({
          me: req.query.modem,
          partner: numberWithSuffix,
d77b332bc   Adhidarma Hadiwinoto   partner_raw
78
          partner_raw: req.query.number,
e47b79cc4   Adhidarma Hadiwinoto   Update komodo-sdk...
79
80
81
82
83
          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...
84
      });
c0741a574   Adhidarma Hadiwinoto   Completed
85
  }
1caafb61a   Adhidarma Hadiwinoto   History only rel...
86
87
  async function pageHistory(req, res) {
      res.json(await history.dump());
4fbfae95f   Adhidarma Hadiwinoto   Messages history
88
  }
c0741a574   Adhidarma Hadiwinoto   Completed
89
  app.use(function(req, res, next) {
639d09ae5   Adhidarma Hadiwinoto   Disable logging o...
90
91
92
93
94
95
96
      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...
97
98
99
100
          next();
          return;
      }
      
8f090c597   Adhidarma Hadiwinoto   req.path
101
      logger.verbose('APISERVER: Incoming http request', { ip: req.ip, path: req.path, url: req.url });
c0741a574   Adhidarma Hadiwinoto   Completed
102
103
      next();
  })
e4139cb42   Adhidarma Hadiwinoto   Tidak lapor ke me...
104

c0741a574   Adhidarma Hadiwinoto   Completed
105
106
107
108
  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
109
  app.get('/apikey/:apikey/history', pageHistory);
a40e6288d   Adhidarma Hadiwinoto   perbaikan path ro...
110
  app.use('/apikey/:apikey/modems', routerModems);
c0741a574   Adhidarma Hadiwinoto   Completed
111

48a5c004b   Adhidarma Hadiwinoto   MIgration message...
112
113
114
115
116
117
118
119
120
121
  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.');
  }