Blame view
lib/apiserver/index.js
4.04 KB
c0741a574
|
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
|
9 |
const moment = require('moment'); |
c0741a574
|
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
|
15 16 17 |
const transport = require('../transport'); const partnerLastSeen = require('../partner-last-seen'); const history = require('../history'); |
fec24f5b5
|
18 |
// const modems = require('../modems2'); |
c0741a574
|
19 |
|
d23d98061
|
20 |
const routerModems = require('./router-modems'); |
48a5c004b
|
21 22 23 |
if (config.handler_callback_server) { logger.warn('Deprecated config.handler_callback_server. Please migrate it to config.apiserver!'); } |
c0741a574
|
24 25 26 27 |
const app = express(); messagingService.setTransport(transport); function apikeyChecker(req, res, next) { |
6cd19a9c9
|
28 |
res.locals.has_valid_apikey = req.params.apikey === ((config.apiserver && config.apiserver.apikey ? config.apiserver.apikey : null) || config.handler_callback_server.apikey); |
c0741a574
|
29 30 31 32 |
if (res.locals.has_valid_apikey) { next(); } else { |
780f6ea74
|
33 |
logger.warn('Invalid apikey', { ip: req.ip }); |
4fbfae95f
|
34 |
res.end('APISERVER: Invalid apikey'); |
c0741a574
|
35 36 37 38 39 |
} } function onIncomingSms(req, res) { res.end('OK'); |
e4139cb42
|
40 41 |
if (!req.query.number) return; |
4fbfae95f
|
42 |
const numberWithSuffix = req.query.number.replace(/^\+/, '') + (config.number_suffix || ''); |
c0741a574
|
43 |
|
03f73469d
|
44 |
partnerLastSeen.set(req.query.number, req.query.modem_imsi); |
f53fe083f
|
45 |
|
4fbfae95f
|
46 47 48 49 50 51 52 53 54 55 56 |
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, }); |
fec24f5b5
|
57 |
/* |
f43dbc16a
|
58 59 |
modems.set({ name: req.query.modem, |
7f757cc71
|
60 |
device: req.query.modem_device, |
f43dbc16a
|
61 62 |
imsi: req.query.modem_imsi, msisdn: req.query.modem_msisdn, |
7f757cc71
|
63 64 65 |
networkId: req.query.modem.network_id, networkName: req.query.modem_network_name, signalStrength: req.query.modem_signal_strength, |
527c38f99
|
66 |
uptime: req.query.uptime, |
f43dbc16a
|
67 68 69 |
reportIp: req.query.report_ip || req.ip, reportPort: req.query.report_port, reportApikey: req.query.report_apikey, |
b6d23624a
|
70 |
reportPathSms: req.query.report_path_sms || '/sms', |
f43dbc16a
|
71 |
}); |
fec24f5b5
|
72 |
*/ |
f43dbc16a
|
73 |
|
4fbfae95f
|
74 |
logger.info('APISERVER: Incoming SMS', { modem: req.query.modem, from: req.query.number, from_with_suffix: numberWithSuffix, msg: req.query.msg }); |
c0741a574
|
75 76 77 |
messagingService.onIncomingMessage({ me: req.query.modem, partner: numberWithSuffix, |
d77b332bc
|
78 |
partner_raw: req.query.number, |
e47b79cc4
|
79 80 81 82 83 |
msg: req.query.msg, origin_label: `IMSI_${req.query.modem_imsi || 'UNKNOWN'}`, origin_transport: 'SMS', origin_partner: req.query.number, do_not_forward_to_core: req.query.number.indexOf('+') !== 0, |
ef1c8149d
|
84 |
}); |
c0741a574
|
85 |
} |
1caafb61a
|
86 87 |
async function pageHistory(req, res) { res.json(await history.dump()); |
4fbfae95f
|
88 |
} |
c0741a574
|
89 |
app.use(function(req, res, next) { |
639d09ae5
|
90 91 92 93 94 95 96 |
if ( req && req.path && typeof req.path === 'string' && ( req.path.search(/\/modems$/) >= 0 || req.path.search(/\/modems\/set$/) >= 0 ) ) { |
005d613db
|
97 98 99 100 |
next(); return; } |
8f090c597
|
101 |
logger.verbose('APISERVER: Incoming http request', { ip: req.ip, path: req.path, url: req.url }); |
c0741a574
|
102 103 |
next(); }) |
e4139cb42
|
104 |
|
c0741a574
|
105 106 107 108 |
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
|
109 |
app.get('/apikey/:apikey/history', pageHistory); |
a40e6288d
|
110 |
app.use('/apikey/:apikey/modems', routerModems); |
c0741a574
|
111 |
|
48a5c004b
|
112 113 114 115 116 117 118 119 120 121 |
const listenPort = (config && config.apiserver && config.apiserver.listen_port ? config.apiserver.listen_port : null) || (config && config.handler_callback_server ? config.handler_callback_server.listen_port : null); if (listenPort) { app.listen(listenPort, () => { logger.info('HTTP Handler Callback server listening on port ' + listenPort); }); } else { logger.warn('Undefined config.apiserver.listen_port for APISERVER. Not listening for command.'); } |