Compare View

switch
from
...
to
 
Commits (3)

Changes

Showing 7 changed files Side-by-side Diff

... ... @@ -10,4 +10,4 @@ process.title = `KOMODO-CENTER@${(config && typeof config.name === 'string') ? c
10 10  
11 11  
12 12 require('./lib/transport');
13   -require('./lib/handler-callback-server');
14 13 \ No newline at end of file
  14 +require('./lib/apiserver');
15 15 \ No newline at end of file
lib/apiserver/index.js
... ... @@ -0,0 +1,81 @@
  1 +"use strict";
  2 +
  3 +/**
  4 + * Modul untuk menerima callback dari modem handler jika ada SMS masuk.
  5 + */
  6 +
  7 +
  8 +const express = require('express');
  9 +const moment = require('moment');
  10 +
  11 +const messagingService = require('komodo-center-messaging-client-lib');
  12 +
  13 +const config = require('komodo-sdk/config');
  14 +const logger = require('komodo-sdk/logger');
  15 +
  16 +const transport = require('../transport');
  17 +const partnerLastSeen = require('../partner-last-seen');
  18 +const history = require('../history');
  19 +
  20 +const app = express();
  21 +messagingService.setTransport(transport);
  22 +
  23 +function apikeyChecker(req, res, next) {
  24 + res.locals.has_valid_apikey = req.params.apikey === config.handler_callback_server.apikey;
  25 + if (res.locals.has_valid_apikey) {
  26 + next();
  27 + }
  28 + else {
  29 + res.end('APISERVER: Invalid apikey');
  30 + }
  31 +}
  32 +
  33 +function onIncomingSms(req, res) {
  34 + res.end('OK');
  35 +
  36 + if (!req.query.number) return;
  37 + if (req.query.number.indexOf('+') !== 0) return;
  38 +
  39 + const numberWithSuffix = req.query.number.replace(/^\+/, '') + (config.number_suffix || '');
  40 +
  41 + partnerLastSeen.set(req.query.number, req.query.modem);
  42 +
  43 + history.push({
  44 + ts: req.query.ts || moment().format('YYYY-MM-DD HH:mm:ss'),
  45 + modem: {
  46 + name: req.query.modem,
  47 + imsi: req.query.modem_imsi,
  48 + msisdn: req.query.modem_msisdn,
  49 + },
  50 + direction: 'INCOMING',
  51 + partner: req.query.number,
  52 + message: req.query.msg,
  53 + });
  54 +
  55 + logger.info('APISERVER: Incoming SMS', { modem: req.query.modem, from: req.query.number, from_with_suffix: numberWithSuffix, msg: req.query.msg });
  56 + messagingService.onIncomingMessage({
  57 + me: req.query.modem,
  58 + partner: numberWithSuffix,
  59 + msg: req.query.msg
  60 + })
  61 +}
  62 +
  63 +function pageHistory(req, res) {
  64 + res.json((history.dump() || []).reverse());
  65 +}
  66 +
  67 +app.use(function(req, res, next) {
  68 + logger.verbose('APISERVER: Incoming http request', { ip: req.ip, url: req.url });
  69 + next();
  70 +})
  71 +
  72 +app.use('/apikey/:apikey', apikeyChecker);
  73 +app.get('/apikey/:apikey/on-sms', onIncomingSms);
  74 +app.get('/apikey/:apikey/inbox', onIncomingSms);
  75 +app.get('/apikey/:apikey/on-sms/inbox', onIncomingSms);
  76 +app.get('/apikey/:apikey/history', pageHistory);
  77 +
  78 +const listenPort = config && config.handler_callback_server ? config.handler_callback_server.listen_port : null;
  79 +listenPort && app.listen(listenPort, () => {
  80 + logger.info('HTTP Handler Callback server listening on port ' + listenPort);
  81 +})
0 82 \ No newline at end of file
... ... @@ -0,0 +1,15 @@
  1 +'use strict';
  2 +
  3 +const CircularBuffer = require("circular-buffer");
  4 +const history = new CircularBuffer(200);
  5 +
  6 +function push(item) {
  7 + history.push(item);
  8 +}
  9 +
  10 +function dump() {
  11 + history.toarray();
  12 +}
  13 +
  14 +exports.push = push;
  15 +exports.dump = dump;
0 16 \ No newline at end of file
... ... @@ -2,12 +2,14 @@
2 2  
3 3 const request = require('request');
4 4 const uuidv4 = require('uuid/v4');
  5 +const moment = require('moment');
5 6  
6 7 const config = require('komodo-sdk/config');
7 8 const logger = require('komodo-sdk/logger');
8 9  
9 10 const modems = require('./modems');
10 11 const partnerLastSeen = require('./partner-last-seen');
  12 +const history = require('./history');
11 13  
12 14 async function _getApproriateHandlerByLastSeen(partnerNumber) {
13 15 logger.verbose('Looking for last seen on for partner number ' + partnerNumber);
... ... @@ -84,6 +86,17 @@ function _send(destinationNumber, msg, handlerName) {
84 86  
85 87 const reqId = uuidv4();
86 88  
  89 + history.push({
  90 + ts: moment().format('YYYY-MM-DD HH:mm:ss'),
  91 + modem: {
  92 + name: handlerName,
  93 + },
  94 + direction: 'OUTGOING',
  95 + partner: destinationNumber,
  96 + message: msg,
  97 + });
  98 +
  99 +
87 100 const requestOptions = {
88 101 url: modem.url,
89 102 qs: {
1 1 {
2 2 "name": "komodo-center-sms",
3   - "version": "0.9.3",
  3 + "version": "0.9.4",
4 4 "lockfileVersion": 1,
5 5 "requires": true,
6 6 "dependencies": {
... ... @@ -469,9 +469,9 @@
469 469 }
470 470 },
471 471 "circular-buffer": {
472   - "version": "0.0.6",
473   - "resolved": "https://registry.npmjs.org/circular-buffer/-/circular-buffer-0.0.6.tgz",
474   - "integrity": "sha1-6c+iujGdNw3idDtgCMpTnN3r9TY="
  472 + "version": "1.0.2",
  473 + "resolved": "https://registry.npmjs.org/circular-buffer/-/circular-buffer-1.0.2.tgz",
  474 + "integrity": "sha1-+g4VLtYp92/iTd+J5y69AHhsWm4="
475 475 },
476 476 "class-utils": {
477 477 "version": "0.3.6",
... ... @@ -4421,6 +4421,13 @@
4421 4421 "integrity": "sha1-6ZH3W5n/IFVR4O5HK3XSAdvT4ns=",
4422 4422 "requires": {
4423 4423 "circular-buffer": "0.0.6"
  4424 + },
  4425 + "dependencies": {
  4426 + "circular-buffer": {
  4427 + "version": "0.0.6",
  4428 + "resolved": "https://registry.npmjs.org/circular-buffer/-/circular-buffer-0.0.6.tgz",
  4429 + "integrity": "sha1-6c+iujGdNw3idDtgCMpTnN3r9TY="
  4430 + }
4424 4431 }
4425 4432 },
4426 4433 "winston-daily-rotate-file": {
1 1 {
2 2 "name": "komodo-center-sms",
3   - "version": "0.9.3",
  3 + "version": "0.9.4",
4 4 "description": "SMS center for Komodo",
5 5 "main": "index.js",
6 6 "scripts": {
... ... @@ -20,9 +20,11 @@
20 20 "author": "Adhidarma Hadiwinoto <me@adhisimon.org>",
21 21 "license": "ISC",
22 22 "dependencies": {
  23 + "circular-buffer": "^1.0.2",
23 24 "express": "^4.17.1",
24 25 "komodo-center-messaging-client-lib": "git+http://gitlab.kodesumber.com/komodo/komodo-center-messaging-client-lib.git",
25 26 "komodo-sdk": "git+http://gitlab.kodesumber.com/komodo/komodo-sdk.git",
  27 + "moment": "^2.24.0",
26 28 "redis": "^2.8.0",
27 29 "request": "^2.88.0",
28 30 "uuid": "^3.3.2"