Blame view

lib/apiserver/index.js 2.69 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');
f43dbc16a   Adhidarma Hadiwinoto   New modem selector
18
  const modems = require('../modems2');
c0741a574   Adhidarma Hadiwinoto   Completed
19
20
21
22
23
24
25
26
27
28
  
  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
29
          res.end('APISERVER: Invalid apikey');
c0741a574   Adhidarma Hadiwinoto   Completed
30
31
32
33
34
      }
  }
  
  function onIncomingSms(req, res) {
      res.end('OK');
e4139cb42   Adhidarma Hadiwinoto   Tidak lapor ke me...
35
36
37
  
      if (!req.query.number) return;
      if (req.query.number.indexOf('+') !== 0) return;
4fbfae95f   Adhidarma Hadiwinoto   Messages history
38
39
  
      const numberWithSuffix = req.query.number.replace(/^\+/, '') + (config.number_suffix || '');
c0741a574   Adhidarma Hadiwinoto   Completed
40

f53fe083f   Adhidarma Hadiwinoto   Sender chooser algo
41
      partnerLastSeen.set(req.query.number, req.query.modem);
4fbfae95f   Adhidarma Hadiwinoto   Messages history
42
43
44
45
46
47
48
49
50
51
52
      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,
      });
f43dbc16a   Adhidarma Hadiwinoto   New modem selector
53
54
55
56
57
58
59
60
      modems.set({
          name: req.query.modem,
          imsi: req.query.modem_imsi,
          msisdn: req.query.modem_msisdn,
          reportIp: req.query.report_ip || req.ip,
          reportPort: req.query.report_port,
          reportApikey: req.query.report_apikey,
      });
4fbfae95f   Adhidarma Hadiwinoto   Messages history
61
      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
62
63
64
65
66
67
      messagingService.onIncomingMessage({
          me: req.query.modem,
          partner: numberWithSuffix,
          msg: req.query.msg
      })
  }
1caafb61a   Adhidarma Hadiwinoto   History only rel...
68
69
  async function pageHistory(req, res) {
      res.json(await history.dump());
4fbfae95f   Adhidarma Hadiwinoto   Messages history
70
  }
c0741a574   Adhidarma Hadiwinoto   Completed
71
  app.use(function(req, res, next) {
4fbfae95f   Adhidarma Hadiwinoto   Messages history
72
      logger.verbose('APISERVER: Incoming http request', { ip: req.ip, url: req.url });
c0741a574   Adhidarma Hadiwinoto   Completed
73
74
      next();
  })
e4139cb42   Adhidarma Hadiwinoto   Tidak lapor ke me...
75

c0741a574   Adhidarma Hadiwinoto   Completed
76
77
78
79
  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
80
  app.get('/apikey/:apikey/history', pageHistory);
c0741a574   Adhidarma Hadiwinoto   Completed
81
82
83
84
85
  
  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);
  })