topup.js 2.82 KB
const express = require('express');

const config = require('komodo-sdk/config');
const logger = require('komodo-sdk/logger');
const coreapi = require('komodo-sdk/coreapi');
// const coreapi = require('../../coreapi');

const router = express.Router();
module.exports = router;

function onInvalidParameter(missingParameter, req, res) {
    logger.verbose(`TOPUP: Undefined ${missingParameter} parameter`, {
        xid: res.locals.xid,
        ip: req.ip,
        terminal_name: req.body.terminal_name || req.query.terminal_name,
        request_id: req.body.request_id || req.query.request_id,
        product_name: req.body.product_name || req.query.product_name,
        destination: req.body.destination || req.query.destination,
    });
    res.end('INVALID REQUEST');
}

function pagePrerequisite(req, res, next) {
    if (!req.body) req.body = {};

    if (!req.body.terminal_name && !req.query.terminal_name) {
        onInvalidParameter('terminal_name', req, res);
        return;
    }

    if (!req.body.password && !req.query.password) {
        onInvalidParameter('password', req, res);
        return;
    }

    if (!req.body.request_id && !req.query.request_id) {
        onInvalidParameter('request_id', req, res);
        return;
    }

    if (!req.body.product_name && !req.query.product_name) {
        onInvalidParameter('product_name', req, res);
        return;
    }

    if (!req.body.destination && !req.query.destination) {
        onInvalidParameter('destination', req, res);
        return;
    }

    next();
}

async function pageIndex(req, res) {
    const terminalName = `${req.body.terminal_name || req.query.terminal_name}@${req.ip.replace(/^::ffff:/, '')}`;

    const [err, coreResponse] = await coreapi({
        xid: res.locals.xid,
        path: '/prepaid/buy',
        qs: {
            terminal_name: terminalName,
            password: req.body.password || req.query.password,
            request_id: req.body.request_id || req.query.request_id,
            product_name: req.body.product_name || req.query.product_name,
            destination: req.body.destination || req.query.destination,
            origin: config.name || 'HTTPGETX',
            report_ip: config.listener.core.ip || null,
            report_port: config.listener.core.port,
            reverse_url: req.body.reverse_url || req.query.reverse_url || null,
        },
    });

    logger.verbose('Got CORE response', { xid: res.locals.xid, err, coreResponse });

    if (err) {
        logger.warn('TOPUP: ERROR on /prepaid/buy response', {
            xid: res.locals.xid, err, coreResponseTypeof: typeof coreResponse, coreResponse,
        });
        res.end('INVALID CORE RESPONSE');
        return;
    }

    res.end('OK');
}

// router.all('/', (req, res) => { res.status(404).end('404: Not implemented yet'); });
router.get('/', pagePrerequisite, pageIndex);