From 1590693547bf207090f1b451e5f23e6de9821660 Mon Sep 17 00:00:00 2001 From: Unknown Date: Thu, 29 Jun 2017 21:22:00 +0200 Subject: [PATCH] New server route to fetch config Added a new route to the Express server to supply client with config. Removed the original 'cookie' hack --- clientonly/index.js | 47 +++++++++++++++++++++------------------------ js/server.js | 7 ++++--- 2 files changed, 26 insertions(+), 28 deletions(-) diff --git a/clientonly/index.js b/clientonly/index.js index 1a8fa0a6..7212fd7e 100644 --- a/clientonly/index.js +++ b/clientonly/index.js @@ -6,7 +6,7 @@ (function () { const cookie = require("cookie"); - var config = { }; + var config = {}; // Parse command line arguments, if any var addressIndex = process.argv.indexOf("--address"); @@ -38,41 +38,38 @@ // Select http or https module, depending on reqested url const lib = url.startsWith("https") ? require("https") : require("http"); const request = lib.get(url, (response) => { - // Handle http errors - if (response.statusCode < 200 || response.statusCode > 299) { - reject(new Error(`Failed to load page, status code: ${response.statusCode}`)); - } - if (response.headers["set-cookie"]) { - response.headers["set-cookie"].forEach( - function (cookiestr) { - if (cookiestr.startsWith("config")) { - var cookieString = JSON.parse(cookie.parse(cookiestr)["config"]); - resolve(cookieString); - } - } - ); - }; - reject(new Error(`Unable to read config cookie from server (${url}`)); + var configData = ""; + + // Gather incomming data + response.on("data", function(chunk) { + configData += chunk; + }); + // Resolve promise at the end of the HTTP/HTTPS stream + response.on("end", function() { + resolve(JSON.parse(configData)); + }); + }); + + request.on("error", function(error) { + reject(new Error(`Unable to read config from server (${url} (${error.message}`)); }); - // Handle connection errors of the request - request.on("error", (err) => reject(new Error(`Failed to load page, error message: ${err}`))); }) }; // Only start the client if a non-local server was provided if (["localhost", "127.0.0.1", "::1", "::ffff:127.0.0.1", undefined].indexOf(config.address) === -1) { - getServerConfig(`http://${config.address}:${config.port}/`) - .then(function (cookieConfig) { + getServerConfig(`http://${config.address}:${config.port}/config/`) + .then(function (config) { // Pass along the server config via an environment variable - var env = Object.create( process.env ); + var env = Object.create(process.env); var options = { env: env }; - cookieConfig.address = config.address; - cookieConfig.port = config.port; - env.config = JSON.stringify(cookieConfig); + config.address = config.address; + config.port = config.port; + env.config = JSON.stringify(config); // Spawn electron application const electron = require("electron"); - const child = require("child_process").spawn(electron, ["js/electron.js"], options ); + const child = require("child_process").spawn(electron, ["js/electron.js"], options); // Pipe all child process output to current stdout child.stdout.on("data", function (buf) { diff --git a/js/server.js b/js/server.js index 6ac5fe04..8520e392 100644 --- a/js/server.js +++ b/js/server.js @@ -52,6 +52,10 @@ var Server = function(config, callback) { res.send(global.version); }); + app.get("/config", function(req,res) { + res.send(config); + }); + app.get("/", function(req, res) { var html = fs.readFileSync(path.resolve(global.root_path + "/index.html"), {encoding: "utf8"}); html = html.replace("#VERSION#", global.version); @@ -62,9 +66,6 @@ var Server = function(config, callback) { } html = html.replace("#CONFIG_FILE#", configFile); - // Set a temporary cookie called "config" to the JSON encoded config object - res.cookie("config", JSON.stringify(config)); - res.send(html); });