Commit 508470f717a8d76dd47b616797c8a4e4a3b2084e

Authored by Adhidarma Hadiwinoto
1 parent dbfe31e3a8
Exists in master and in 1 other branch ad2mt

ready to test

Showing 5 changed files with 156 additions and 0 deletions Side-by-side Diff

... ... @@ -0,0 +1,3 @@
  1 +/node_modules/
  2 +/logs/
  3 +config.js
... ... @@ -0,0 +1,7 @@
  1 +{
  2 + "listen_port": 25613,
  3 + "center_port": 25614,
  4 + "origin": "HTTPGET0",
  5 + "do_not_prefix_request_id": true,
  6 + "core_url": "http://localhost:32972/apikey/c47ed08df360a15f9c60e8cfb3020f7d083b3f89"
  7 +}
... ... @@ -0,0 +1,7 @@
  1 +"use strict";
  2 +
  3 +const transport = require('./transport');
  4 +const trxCenter = require('komodo-sdk/center/messaging/trx-center');
  5 +
  6 +transport.init(trxCenter.callback);
  7 +trxCenter.setTransport(transport);
... ... @@ -0,0 +1,24 @@
  1 +{
  2 + "name": "komodo-center-httpget",
  3 + "version": "1.0.0",
  4 + "description": "Komodo HTTP GET Center",
  5 + "main": "index.js",
  6 + "scripts": {
  7 + "test": "mocha"
  8 + },
  9 + "repository": {
  10 + "type": "git",
  11 + "url": "git@gitlab.kodesumber.com:komodo/komodo-center-httpget.git"
  12 + },
  13 + "keywords": [
  14 + "komodo",
  15 + "ppob",
  16 + "center"
  17 + ],
  18 + "author": "Adhidarma Hadiwinoto <me@adhisimon.org>",
  19 + "license": "ISC",
  20 + "dependencies": {
  21 + "komodo-sdk": "git+http://gitlab.kodesumber.com/komodo/komodo-sdk.git",
  22 + "request": "^2.81.0"
  23 + }
  24 +}
... ... @@ -0,0 +1,115 @@
  1 +"use strict";
  2 +
  3 +const http = require('http');
  4 +const url = require('url');
  5 +const request = require('request');
  6 +
  7 +const config = require('komodo-sdk/config')
  8 +const logger = require('komodo-sdk/logger');
  9 +
  10 +let _callback;
  11 +
  12 +function createHttpServer() {
  13 + let listenPort = config.center_port;
  14 +
  15 + http.createServer(onRequest).listen(listenPort, function() {
  16 + logger.info('Center HTTP server listen on port ' + listenPort);
  17 + });;
  18 +}
  19 +
  20 +function onRequest(req, res) {
  21 +
  22 + let remote_address = req.socket.address().address.replace(/^::ffff:/, '');
  23 +
  24 + logger.verbose('Got a request from ' + remote_address);
  25 +
  26 + let qs = url.parse(req.url, true).query;
  27 +
  28 + let partner = qs.terminal_name + '@' + remote_address;
  29 + let password = qs.password;
  30 + let reverse_url = qs.reverse_url;
  31 +
  32 + let product_name = qs.product_name;
  33 + let destination = qs.destination;
  34 + let request_id = qs.request_id;
  35 +
  36 + if (!qs.terminal_name || !password || !reverse_url || ! product_name || !destination || !request_id) {
  37 + res.end('INVALID REQUEST');
  38 + return;
  39 + }
  40 +
  41 + let msg = [ product_name, destination, password, request_id ].join('.');
  42 +
  43 + _callback.onIncomingMessage(
  44 + {
  45 + me: config.username,
  46 + partner: partner,
  47 + msg: msg.trim(),
  48 + reverse_url: reverse_url
  49 + },
  50 +
  51 + function(err, _result) {
  52 + let result = cleanResponseToPartner(_result);
  53 +
  54 + logger.verbose('Forwarding CORE response to partner', _result);
  55 + res.end(JSON.stringify(result));
  56 + }
  57 + )
  58 +}
  59 +
  60 +function cleanResponseToPartner(_data) {
  61 + let data = JSON.parse(JSON.stringify(_data));
  62 +
  63 + delete data.origin;
  64 + delete data.origin_report_ip;
  65 + delete data.origin_report_port;
  66 + delete data.reverse_url;
  67 +
  68 + return data;
  69 +}
  70 +
  71 +function init(cb) {
  72 + if (!cb) {
  73 + logger.warn('Callback is not defined');
  74 + console.trace();
  75 + process.exit(1);
  76 + return;
  77 + }
  78 +
  79 + _callback = cb;
  80 +
  81 + createHttpServer();
  82 +}
  83 +
  84 +function send(partner, msg, params) {
  85 + logger.verbose('Got response from CORE', {partner: partner, msg: msg, params: params});
  86 +
  87 + if (!params || !params.reverse_url) {
  88 + logger.verbose('Undefined reverse_url, not forwarding message to partner');
  89 + return;
  90 + }
  91 +
  92 +
  93 + let reqOptions = {
  94 + url: params.reverse_url,
  95 + qs: cleanResponseToPartner(params)
  96 + }
  97 +
  98 + logger.verbose('Sending reverse report to partner', {request: reqOptions});
  99 + request(reqOptions, function(err, res, body) {
  100 + if (err) {
  101 + logger.warn('Error sending reverse report to partner', {request: reqOptions, err: err});
  102 + return;
  103 + }
  104 +
  105 + if (res.statusCode != 200) {
  106 + logger.warn('Partner not returning HTTP status code 200 on reverse report', {request: reqOptions, http_status: res.statusCode});
  107 + return;
  108 + }
  109 +
  110 + logger.verbose('Reverse report has been sent to partner', {request: reqOptions});
  111 + })
  112 +}
  113 +
  114 +exports.init = init;
  115 +exports.send = send;