Commit 1584924d4bb4d72ffa219c9c4b0ecffdf41b9023
1 parent
98fa55b40f
Exists in
master
Ignore message if not from +62xxx
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('+') !== 0, | 87 | do_not_forward_to_core: req.query.number.indexOf('+62') !== 0, |
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 |