Blame view
lib/apiserver/index.js
2.39 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'); |
c0741a574
|
18 19 20 21 22 23 24 25 26 27 |
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
|
28 |
res.end('APISERVER: Invalid apikey'); |
c0741a574
|
29 30 31 32 33 |
} } function onIncomingSms(req, res) { res.end('OK'); |
e4139cb42
|
34 35 36 |
if (!req.query.number) return; if (req.query.number.indexOf('+') !== 0) return; |
4fbfae95f
|
37 38 |
const numberWithSuffix = req.query.number.replace(/^\+/, '') + (config.number_suffix || ''); |
c0741a574
|
39 |
|
f53fe083f
|
40 |
partnerLastSeen.set(req.query.number, req.query.modem); |
4fbfae95f
|
41 42 43 44 45 46 47 48 49 50 51 52 53 |
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, }); logger.info('APISERVER: Incoming SMS', { modem: req.query.modem, from: req.query.number, from_with_suffix: numberWithSuffix, msg: req.query.msg }); |
c0741a574
|
54 55 56 57 58 59 |
messagingService.onIncomingMessage({ me: req.query.modem, partner: numberWithSuffix, msg: req.query.msg }) } |
4fbfae95f
|
60 61 62 |
function pageHistory(req, res) { res.json((history.dump() || []).reverse()); } |
c0741a574
|
63 |
app.use(function(req, res, next) { |
4fbfae95f
|
64 |
logger.verbose('APISERVER: Incoming http request', { ip: req.ip, url: req.url }); |
c0741a574
|
65 66 |
next(); }) |
e4139cb42
|
67 |
|
c0741a574
|
68 69 70 71 |
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
|
72 |
app.get('/apikey/:apikey/history', pageHistory); |
c0741a574
|
73 74 75 76 77 |
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); }) |