Commit f03137636179efcbfae36de868a8426bdc7936f2

Authored by Adhidarma Hadiwinoto
1 parent 1584924d4b
Exists in master

Do not forward to CORE if number less than 8 chars

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