handler-callback-server.js 1.88 KB
"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);
})