wmmihaa-microservicebus-node
Version:
node.js node for microservicebus. Please visit https://microservicebus.com for more information.
190 lines (170 loc) • 7.31 kB
JavaScript
// DEBUG
//process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
var path = require("path");
var os = require('os');
var url = require('url');
var request = require("request");
var exec = require('child_process').exec;
var debug = process.execArgv.find(function (e) { return e.startsWith('--debug'); }) !== undefined;
var MAXIMEITRYCOUNT = 3;
var currentImieTryCount = 0;
// Load settings
var SettingsHelper = require("./lib/SettingsHelper.js");
var settingsHelper = new SettingsHelper();
var packagePath = settingsHelper.nodePackagePath;
process.env.NODE_PATH = packagePath;
process.env.HOME = os.userInfo().homedir;
require('app-module-path').addPath(packagePath);
require('module').globalPaths.push(packagePath);
var snapLoginHandler = new SnapLoginHandler(settingsHelper);
// If user hasn't logged in before we'll try to get the IMEI id
snapLoginHandler.start(settingsHelper.isFirstStart());
function SnapLoginHandler(settingsHelper) {
console.log("STARTSNAP: SnapLoginHandler started");
var self = this;
this.interval = null;
var count = 0;
this.start = function (isFirstStart) {
this.interval = setInterval(function () {
if (isFirstStart && (currentImieTryCount < MAXIMEITRYCOUNT)) {
tryGetIMEI(function (imei) {
if (imei) {
clearInterval(self.interval);
self.interval = setInterval(function () {
tryLoginUsingICCID(imei, function (done) {
if (done) {
clearInterval(self.interval);
console.log("done");
}
});
}, 2000);
}
else {
currentImieTryCount++;
}
});
}
else if (isFirstStart && (currentImieTryCount >= MAXIMEITRYCOUNT)) {
clearInterval(self.interval);
console.log();
console.log("Was not able to get the IMEI id :(");
console.log("Let's try logging in using whitelist instead...");
console.log();
process.argv.push("-w");
require("./start.js");
return;
}
else {
pingBeforeStart(function (online) {
if (online) {
clearInterval(self.interval);
console.log("STARTSNAP: Online");
try{
require("./start.js");
return;
}
catch(ex){
console.log("Failed to call start.js. " + ex);
setTimeout(() => {
try{
console.log("Retrying to require start.js");
require("./start.js");
return;
}
catch(ex){
console.log("Failed again :(" + ex);
return;
}
}, 1000);
}
}
})
}
}, 10000);
};
function pingBeforeStart(callback) {
var hubUri = url.parse(settingsHelper.settings.hubUri);
var uri = 'https://' + hubUri.host;
console.log("STARTSNAP: pinging..." + uri);
request.post({ url: uri, timeout: 5000 }, function (err, response, body) {
if (err) {
// Offline mode...
if ((err.code === "ECONNREFUSED" ||
err.code === "EACCES" ||
err.code === "ENOTFOUND") &&
settingsHelper.settings.policies &&
settingsHelper.settings.policies.disconnectPolicy.offlineMode) {
console.log('Starting snap in offline mode');
require("./start.js");
callback(true);
}
else {
console.error("STARTSNAP: ERROR: error: " + err);
callback();
return;
}
}
else if (response.statusCode !== 200) {
console.error("STARTSNAP: FAILED: response: " + response.statusCode);
callback();
return;
}
else {
console.log("STARTSNAP: Got response from microServiceBus.com. All good...");
require("./start.js");
callback(true);
}
})
}
function tryGetIMEI(callback) {
exec("mmcli -m 0|grep -oE \"imei: '(.*)'\"|sed 's/imei: //g'|sed \"s/'//g\"", function (error, stdout, stderr) {
console.log('STARTSNAP: imei: ' + stdout);
if (error) {
console.log("STARTSNAP: Unable to get the IMEI id");
console.log('STARTSNAP: ERROR: ' + error);
callback();
}
else {
imei = stdout;
callback(imei);
}
});
}
function tryLoginUsingICCID(imei, callback) {
var hubUri = url.parse(settingsHelper.settings.hubUri);
var uri = 'https://' + hubUri.host + '/jasper/signInUsingICCID?iccid=' + imei;
console.log("STARTSNAP: calling jasper service..." + uri);
request.post({ url: uri, timeout: 5000 }, function (err, response, body) {
if (err) {
console.error("STARTSNAP: ERROR: error: " + err);
callback();
return;
}
else if (response.statusCode === 302) {
settingsHelper.settings.hubUri = "wss://" + url.parse(response.headers.location).host;
console.log('REDIRECTED TO: ' + settingsHelper.settings.hubUri);
settingsHelper.save();
callback();
return;
}
else if (response.statusCode !== 200) {
console.error("STARTSNAP: FAILED: response: " + response.statusCode);
callback();
return;
}
else {
console.log("STARTSNAP: Got settings from microServiceBus.com. All good...");
var settings = JSON.parse(body);
settingsHelper.settings.id = settings.id;
settingsHelper.settings.nodeName = settings.nodeName;
settingsHelper.settings.organizationId = settings.organizationId;
settingsHelper.settings.sas = settings.sas;
settingsHelper.save();
console.log("STARTSNAP: Saved settings");
require("./start.js");
callback(true);
}
})
}
}