"use strict"; /** * Modul untuk menerima callback dari modem handler jika ada SMS masuk. */ const express = require('express'); const messagingService = require('komodo-center-messaging-client-lib'); const config = require('komodo-sdk/config'); const logger = require('komodo-sdk/logger'); const transport = require('./transport'); const partnerLastSeen = require('./partner-last-seen'); 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 { res.end('HANDLER-CALLBACK-SERVER: Invalid apikey'); } } function onIncomingSms(req, res) { res.end('OK'); if (!req.query.number) return; if (req.query.number.indexOf('+') !== 0) return; const numberWithSuffix = req.query.number + (config.number_suffix || ''); partnerLastSeen.set(req.query.number, req.query.modem); logger.info('HANDLER-CALLBACK-SERVER: Incoming SMS', { modem: req.query.modem, from: req.query.number, from_with_suffix: numberWithSuffix, msg: req.query.msg }); messagingService.onIncomingMessage({ me: req.query.modem, partner: numberWithSuffix, msg: req.query.msg }) } app.use(function(req, res, next) { logger.verbose('HANDLER-CALLBACK-SERVER: Incoming http request', { ip: req.ip, url: req.url }); next(); }) 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); 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); })