Blame view

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

f53fe083f   Adhidarma Hadiwinoto   Sender chooser algo
40
      partnerLastSeen.set(req.query.number, req.query.modem);
4fbfae95f   Adhidarma Hadiwinoto   Messages history
41
42
43
44
45
46
47
48
49
50
51
52
53
      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,
      });
  
      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
54
55
56
57
58
59
      messagingService.onIncomingMessage({
          me: req.query.modem,
          partner: numberWithSuffix,
          msg: req.query.msg
      })
  }
4fbfae95f   Adhidarma Hadiwinoto   Messages history
60
61
62
  function pageHistory(req, res) {
      res.json((history.dump() || []).reverse());
  }
c0741a574   Adhidarma Hadiwinoto   Completed
63
  app.use(function(req, res, next) {
4fbfae95f   Adhidarma Hadiwinoto   Messages history
64
      logger.verbose('APISERVER: Incoming http request', { ip: req.ip, url: req.url });
c0741a574   Adhidarma Hadiwinoto   Completed
65
66
      next();
  })
e4139cb42   Adhidarma Hadiwinoto   Tidak lapor ke me...
67

c0741a574   Adhidarma Hadiwinoto   Completed
68
69
70
71
  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
72
  app.get('/apikey/:apikey/history', pageHistory);
c0741a574   Adhidarma Hadiwinoto   Completed
73
74
75
76
77
  
  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);
  })