Blame view

lib/apiserver/index.js 3.09 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');
c0741a574   Adhidarma Hadiwinoto   Completed
21
22
23
24
25
26
27
28
29
  const app = express();
  messagingService.setTransport(transport);
  
  function apikeyChecker(req, res, next) {
      res.locals.has_valid_apikey = req.params.apikey === config.handler_callback_server.apikey;
      if (res.locals.has_valid_apikey) {
          next();
      }
      else {
4fbfae95f   Adhidarma Hadiwinoto   Messages history
30
          res.end('APISERVER: Invalid apikey');
c0741a574   Adhidarma Hadiwinoto   Completed
31
32
33
34
35
      }
  }
  
  function onIncomingSms(req, res) {
      res.end('OK');
e4139cb42   Adhidarma Hadiwinoto   Tidak lapor ke me...
36
37
38
  
      if (!req.query.number) return;
      if (req.query.number.indexOf('+') !== 0) return;
4fbfae95f   Adhidarma Hadiwinoto   Messages history
39
40
  
      const numberWithSuffix = req.query.number.replace(/^\+/, '') + (config.number_suffix || '');
c0741a574   Adhidarma Hadiwinoto   Completed
41

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

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

4fbfae95f   Adhidarma Hadiwinoto   Messages history
72
      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
73
74
75
76
77
78
      messagingService.onIncomingMessage({
          me: req.query.modem,
          partner: numberWithSuffix,
          msg: req.query.msg
      })
  }
1caafb61a   Adhidarma Hadiwinoto   History only rel...
79
80
  async function pageHistory(req, res) {
      res.json(await history.dump());
4fbfae95f   Adhidarma Hadiwinoto   Messages history
81
  }
c0741a574   Adhidarma Hadiwinoto   Completed
82
  app.use(function(req, res, next) {
4fbfae95f   Adhidarma Hadiwinoto   Messages history
83
      logger.verbose('APISERVER: Incoming http request', { ip: req.ip, url: req.url });
c0741a574   Adhidarma Hadiwinoto   Completed
84
85
      next();
  })
e4139cb42   Adhidarma Hadiwinoto   Tidak lapor ke me...
86

c0741a574   Adhidarma Hadiwinoto   Completed
87
88
89
90
  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
91
  app.get('/apikey/:apikey/history', pageHistory);
a40e6288d   Adhidarma Hadiwinoto   perbaikan path ro...
92
  app.use('/apikey/:apikey/modems', routerModems);
c0741a574   Adhidarma Hadiwinoto   Completed
93
94
95
96
97
  
  const listenPort = config && config.handler_callback_server ? config.handler_callback_server.listen_port : null;
  listenPort && app.listen(listenPort, () => {
      logger.info('HTTP Handler Callback server listening on port ' + listenPort);
  })