Blame view
lib/apiserver/index.js
3.24 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'); |
c0741a574
|
21 22 23 24 25 26 27 28 29 |
const app = express(); messagingService.setTransport(transport); function apikeyChecker(req, res, next) { res.locals.has_valid_apikey = req.params.apikey === config.handler_callback_server.apikey; if (res.locals.has_valid_apikey) { next(); } else { |
4fbfae95f
|
30 |
res.end('APISERVER: Invalid apikey'); |
c0741a574
|
31 32 33 34 35 |
} } function onIncomingSms(req, res) { res.end('OK'); |
e4139cb42
|
36 37 |
if (!req.query.number) return; |
4fbfae95f
|
38 |
const numberWithSuffix = req.query.number.replace(/^\+/, '') + (config.number_suffix || ''); |
c0741a574
|
39 |
|
03f73469d
|
40 |
partnerLastSeen.set(req.query.number, req.query.modem_imsi); |
f53fe083f
|
41 |
|
4fbfae95f
|
42 43 44 45 46 47 48 49 50 51 52 |
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
|
53 |
/* |
f43dbc16a
|
54 55 |
modems.set({ name: req.query.modem, |
7f757cc71
|
56 |
device: req.query.modem_device, |
f43dbc16a
|
57 58 |
imsi: req.query.modem_imsi, msisdn: req.query.modem_msisdn, |
7f757cc71
|
59 60 61 |
networkId: req.query.modem.network_id, networkName: req.query.modem_network_name, signalStrength: req.query.modem_signal_strength, |
527c38f99
|
62 |
uptime: req.query.uptime, |
f43dbc16a
|
63 64 65 |
reportIp: req.query.report_ip || req.ip, reportPort: req.query.report_port, reportApikey: req.query.report_apikey, |
b6d23624a
|
66 |
reportPathSms: req.query.report_path_sms || '/sms', |
f43dbc16a
|
67 |
}); |
fec24f5b5
|
68 |
*/ |
f43dbc16a
|
69 |
|
4fbfae95f
|
70 |
logger.info('APISERVER: Incoming SMS', { modem: req.query.modem, from: req.query.number, from_with_suffix: numberWithSuffix, msg: req.query.msg }); |
c0741a574
|
71 72 73 |
messagingService.onIncomingMessage({ me: req.query.modem, partner: numberWithSuffix, |
e47b79cc4
|
74 75 76 77 78 |
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, |
c0741a574
|
79 80 |
}) } |
1caafb61a
|
81 82 |
async function pageHistory(req, res) { res.json(await history.dump()); |
4fbfae95f
|
83 |
} |
c0741a574
|
84 |
app.use(function(req, res, next) { |
4fbfae95f
|
85 |
logger.verbose('APISERVER: Incoming http request', { ip: req.ip, url: req.url }); |
c0741a574
|
86 87 |
next(); }) |
e4139cb42
|
88 |
|
c0741a574
|
89 90 91 92 |
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
|
93 |
app.get('/apikey/:apikey/history', pageHistory); |
a40e6288d
|
94 |
app.use('/apikey/:apikey/modems', routerModems); |
c0741a574
|
95 96 97 98 99 |
const listenPort = config && config.handler_callback_server ? config.handler_callback_server.listen_port : null; listenPort && app.listen(listenPort, () => { logger.info('HTTP Handler Callback server listening on port ' + listenPort); }) |