Commit 508470f717a8d76dd47b616797c8a4e4a3b2084e
1 parent
dbfe31e3a8
Exists in
master
and in
1 other branch
ready to test
Showing 5 changed files with 156 additions and 0 deletions Side-by-side Diff
.gitignore
config.json
index.js
package.json
... | ... | @@ -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 | +} |
transport.js
... | ... | @@ -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; |