Commit 48a5c004b3ad397d0a4f410f1de2a0be15564453

Authored by Adhidarma Hadiwinoto
1 parent c5a0b86218
Exists in master

MIgration message from config.handler_callback_server to config.apiserver

Showing 1 changed file with 15 additions and 5 deletions Inline Diff

lib/apiserver/index.js
1 "use strict"; 1 "use strict";
2 2
3 /** 3 /**
4 * Modul untuk menerima callback dari modem handler jika ada SMS masuk. 4 * Modul untuk menerima callback dari modem handler jika ada SMS masuk.
5 */ 5 */
6 6
7 7
8 const express = require('express'); 8 const express = require('express');
9 const moment = require('moment'); 9 const moment = require('moment');
10 10
11 const messagingService = require('komodo-center-messaging-client-lib'); 11 const messagingService = require('komodo-center-messaging-client-lib');
12 12
13 const config = require('komodo-sdk/config'); 13 const config = require('komodo-sdk/config');
14 const logger = require('komodo-sdk/logger'); 14 const logger = require('komodo-sdk/logger');
15 15
16 const transport = require('../transport'); 16 const transport = require('../transport');
17 const partnerLastSeen = require('../partner-last-seen'); 17 const partnerLastSeen = require('../partner-last-seen');
18 const history = require('../history'); 18 const history = require('../history');
19 // const modems = require('../modems2'); 19 // const modems = require('../modems2');
20 20
21 const routerModems = require('./router-modems'); 21 const routerModems = require('./router-modems');
22 22
23 if (config.handler_callback_server) {
24 logger.warn('Deprecated config.handler_callback_server. Please migrate it to config.apiserver!');
25 }
26
23 const app = express(); 27 const app = express();
24 messagingService.setTransport(transport); 28 messagingService.setTransport(transport);
25 29
26 function apikeyChecker(req, res, next) { 30 function apikeyChecker(req, res, next) {
27 res.locals.has_valid_apikey = req.params.apikey === config.handler_callback_server.apikey; 31 res.locals.has_valid_apikey = req.params.apikey === (config.apiserver.apikey || config.handler_callback_server.apikey);
28 if (res.locals.has_valid_apikey) { 32 if (res.locals.has_valid_apikey) {
29 next(); 33 next();
30 } 34 }
31 else { 35 else {
32 res.end('APISERVER: Invalid apikey'); 36 res.end('APISERVER: Invalid apikey');
33 } 37 }
34 } 38 }
35 39
36 function onIncomingSms(req, res) { 40 function onIncomingSms(req, res) {
37 res.end('OK'); 41 res.end('OK');
38 42
39 if (!req.query.number) return; 43 if (!req.query.number) return;
40 const numberWithSuffix = req.query.number.replace(/^\+/, '') + (config.number_suffix || ''); 44 const numberWithSuffix = req.query.number.replace(/^\+/, '') + (config.number_suffix || '');
41 45
42 partnerLastSeen.set(req.query.number, req.query.modem_imsi); 46 partnerLastSeen.set(req.query.number, req.query.modem_imsi);
43 47
44 history.push({ 48 history.push({
45 ts: req.query.ts || moment().format('YYYY-MM-DD HH:mm:ss'), 49 ts: req.query.ts || moment().format('YYYY-MM-DD HH:mm:ss'),
46 modem: { 50 modem: {
47 name: req.query.modem, 51 name: req.query.modem,
48 imsi: req.query.modem_imsi, 52 imsi: req.query.modem_imsi,
49 msisdn: req.query.modem_msisdn, 53 msisdn: req.query.modem_msisdn,
50 }, 54 },
51 direction: 'INCOMING', 55 direction: 'INCOMING',
52 partner: req.query.number, 56 partner: req.query.number,
53 message: req.query.msg, 57 message: req.query.msg,
54 }); 58 });
55 59
56 /* 60 /*
57 modems.set({ 61 modems.set({
58 name: req.query.modem, 62 name: req.query.modem,
59 device: req.query.modem_device, 63 device: req.query.modem_device,
60 imsi: req.query.modem_imsi, 64 imsi: req.query.modem_imsi,
61 msisdn: req.query.modem_msisdn, 65 msisdn: req.query.modem_msisdn,
62 networkId: req.query.modem.network_id, 66 networkId: req.query.modem.network_id,
63 networkName: req.query.modem_network_name, 67 networkName: req.query.modem_network_name,
64 signalStrength: req.query.modem_signal_strength, 68 signalStrength: req.query.modem_signal_strength,
65 uptime: req.query.uptime, 69 uptime: req.query.uptime,
66 reportIp: req.query.report_ip || req.ip, 70 reportIp: req.query.report_ip || req.ip,
67 reportPort: req.query.report_port, 71 reportPort: req.query.report_port,
68 reportApikey: req.query.report_apikey, 72 reportApikey: req.query.report_apikey,
69 reportPathSms: req.query.report_path_sms || '/sms', 73 reportPathSms: req.query.report_path_sms || '/sms',
70 }); 74 });
71 */ 75 */
72 76
73 logger.info('APISERVER: Incoming SMS', { modem: req.query.modem, from: req.query.number, from_with_suffix: numberWithSuffix, msg: req.query.msg }); 77 logger.info('APISERVER: Incoming SMS', { modem: req.query.modem, from: req.query.number, from_with_suffix: numberWithSuffix, msg: req.query.msg });
74 messagingService.onIncomingMessage({ 78 messagingService.onIncomingMessage({
75 me: req.query.modem, 79 me: req.query.modem,
76 partner: numberWithSuffix, 80 partner: numberWithSuffix,
77 partner_raw: req.query.number, 81 partner_raw: req.query.number,
78 msg: req.query.msg, 82 msg: req.query.msg,
79 origin_label: `IMSI_${req.query.modem_imsi || 'UNKNOWN'}`, 83 origin_label: `IMSI_${req.query.modem_imsi || 'UNKNOWN'}`,
80 origin_transport: 'SMS', 84 origin_transport: 'SMS',
81 origin_partner: req.query.number, 85 origin_partner: req.query.number,
82 do_not_forward_to_core: req.query.number.indexOf('+') !== 0, 86 do_not_forward_to_core: req.query.number.indexOf('+') !== 0,
83 }); 87 });
84 } 88 }
85 89
86 async function pageHistory(req, res) { 90 async function pageHistory(req, res) {
87 res.json(await history.dump()); 91 res.json(await history.dump());
88 } 92 }
89 93
90 app.use(function(req, res, next) { 94 app.use(function(req, res, next) {
91 if ( 95 if (
92 req && req.path && typeof req.path === 'string' 96 req && req.path && typeof req.path === 'string'
93 && ( 97 && (
94 req.path.search(/\/modems$/) >= 0 98 req.path.search(/\/modems$/) >= 0
95 || req.path.search(/\/modems\/set$/) >= 0 99 || req.path.search(/\/modems\/set$/) >= 0
96 ) 100 )
97 ) { 101 ) {
98 next(); 102 next();
99 return; 103 return;
100 } 104 }
101 105
102 logger.verbose('APISERVER: Incoming http request', { ip: req.ip, path: req.path, url: req.url }); 106 logger.verbose('APISERVER: Incoming http request', { ip: req.ip, path: req.path, url: req.url });
103 next(); 107 next();
104 }) 108 })
105 109
106 app.use('/apikey/:apikey', apikeyChecker); 110 app.use('/apikey/:apikey', apikeyChecker);
107 app.get('/apikey/:apikey/on-sms', onIncomingSms); 111 app.get('/apikey/:apikey/on-sms', onIncomingSms);
108 app.get('/apikey/:apikey/inbox', onIncomingSms); 112 app.get('/apikey/:apikey/inbox', onIncomingSms);
109 app.get('/apikey/:apikey/on-sms/inbox', onIncomingSms); 113 app.get('/apikey/:apikey/on-sms/inbox', onIncomingSms);
110 app.get('/apikey/:apikey/history', pageHistory); 114 app.get('/apikey/:apikey/history', pageHistory);
111 app.use('/apikey/:apikey/modems', routerModems); 115 app.use('/apikey/:apikey/modems', routerModems);
112 116
113 const listenPort = config && config.handler_callback_server ? config.handler_callback_server.listen_port : null;
114 listenPort && app.listen(listenPort, () => {
115 logger.info('HTTP Handler Callback server listening on port ' + listenPort);
116 })
117 const listenPort = (config && config.apiserver && config.apiserver.listen_port ? config.apiserver.listen_port : null)
118 || (config && config.handler_callback_server ? config.handler_callback_server.listen_port : null);
119
120 if (listenPort) {
121 app.listen(listenPort, () => {
122 logger.info('HTTP Handler Callback server listening on port ' + listenPort);
123 });