Node.js C9 backup K2v_relay

relay.js 2013

Most likely a man in the middle logger for trouble shooting machine that M2C (KE2 to Ver Cloud) interface

var http = require("http");
var https = require("https");
var url = require("url");

var serverStartedDateTimeFormatted = formatDate(new Date());

function start() {
 writeLogWithTimeStamp("Starting");

 // Original request handler
 function onRequest(request, response) {
 
 request.url_parts = url.parse(request.url, true);
 writeLogWithTimeStamp(request.url);
 
 writeLogWithTimeStamp(request.url_parts.query.xml);
 
 // Define request to be relayed, use original path
 // Note: No body in original
 var options = {
 hostname: xxxxx.verisae.com',
 port: xxx,
 path: request.url,
 method: 'POST'
 };
 
 // create the relayed request
 var relay_request = https.request(options);

 // define handlers for response to relayed request
 relay_request.addListener('response', function (relay_response) {
 
 writeLogWithTimeStamp(relay_response.statusCode);
 
 relay_response.addListener('data', function(chunk) {
 // writeLogWithTimeStamp(chunk);
 response.write(chunk, 'binary');
 process.stdout.write(chunk);
 });
 
 relay_response.addListener('end', function() {
 response.end();
 });
 
 response.writeHead(relay_response.statusCode, relay_response.headers);
 });
 
 request.addListener('data', function(chunk) {
 relay_request.write(chunk, 'binary');
 });
 
 request.addListener('end', function() {
 relay_request.end();
 });
 
 }

 var server = http.createServer(onRequest).listen(process.env.PORT, process.env.IP);
 writeLogServerUpSince();
 setInterval(function () {
 writeLogServerUpSince();
 }, 60000);
}

//************************************************************************
// Utilities

function writeLogWithTimeStamp(message) {
 console.log(formatDate(new Date()) + " " + message);
}

function writeLog(message) {
 console.log(message);
}

function writeLogServerUpSince() {
 writeLogWithTimeStamp("Server up since " + serverStartedDateTimeFormatted);
}

function pad(number, length) {
 var str = '' + number;
 while (str.length < length) {
 str = '0' + str;
 }
 return str;
}

function formatDate(date) {
 var dateStamp = '';
 dateStamp += date.getFullYear();
 dateStamp += '-';
 dateStamp += date.getMonth() + 1;
 dateStamp += '-';
 dateStamp += date.getDate();
 dateStamp += '_';
 dateStamp += pad(date.getHours(), 2);
 dateStamp += ':';
 dateStamp += pad(date.getMinutes(), 2);
 dateStamp += ':';
 dateStamp += pad(date.getSeconds(), 2);
 dateStamp += ':';
 dateStamp += pad(date.getMilliseconds(), 3);

 return dateStamp;
}

function is_int(value) {
 if ((parseFloat(value) == parseInt(value)) && !isNaN(value)) {
 return true;
 } else {
 return false;
 }
}

process.on('uncaughtException', function (err) {
 console.log((new Date()).toUTCString() + ' uncaughtException:', err.message);
 console.error(err.stack);
 //process.exit(1);
});


// END Utilities
//************************************************************************

exports.start = start;

start();