From 4a21ef9e6e46acaeef904139238a6dba8eb45ec6 Mon Sep 17 00:00:00 2001 From: Dorian Niemiec Date: Tue, 15 Aug 2023 16:38:21 +0200 Subject: [PATCH] Improve error handling and also prevent configuration file leakage. --- index.js | 27 +++++++++++++++++++-------- mod.info | 2 +- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/index.js b/index.js index ff0b6ba..b47cc8f 100644 --- a/index.js +++ b/index.js @@ -1,4 +1,5 @@ var fs = require("fs"); +var os = require("os"); var http = require("http"); var https = require("https"); @@ -34,7 +35,7 @@ Mod.prototype.callback = function callback(req, res, serverconsole, responseEnd, if (!port) port = 80; if (!securePort && secureHostname) securePort = 443; if (!hostname) { - callServerError(500, "reverse-proxy-mod/1.0.2", new Error("Proxy server is misconfigured. Hostname property is missing.")); + callServerError(500, "reverse-proxy-mod/1.0.4", new Error("Proxy server is misconfigured. Hostname property is missing.")); return; } try { @@ -71,23 +72,33 @@ Mod.prototype.callback = function callback(req, res, serverconsole, responseEnd, delete sres.headers["keep-alive"]; delete sres.headers["Keep-Alive"]; res.writeHead(sres.statusCode, sres.headers); - sres.pipe(res, { - end: true + sres.pipe(res); + res.prependListener("end", function() { + try { + sres.end(); + } catch(ex) {} }); }); proxy.on("error", (ex) => { try { - if (ex.code == "ETIMEDOUT") { - callServerError(504, "reverse-proxy-mod/1.0.2", ex); //Server error + if (ex.code == "ENOTFOUND" || ex.code == "EHOSTUNREACH" || ex.code == "ECONNREFUSED") { + callServerError(503, "reverse-proxy-mod/1.0.4", ex); //Server error + } else if (ex.code == "ETIMEDOUT") { + callServerError(504, "reverse-proxy-mod/1.0.4", ex); //Server error } else { - callServerError(502, "reverse-proxy-mod/1.0.2", ex); //Server error + callServerError(502, "reverse-proxy-mod/1.0.4", ex); //Server error } } catch (ex) {} serverconsole.errmessage("Client fails to recieve content."); //Log into SVR.JS }); - req.pipe(proxy, { - end: true + req.pipe(proxy); + req.prependListener("end", function() { + try { + proxy.end(); + } catch(ex) {} }); + } else if ((href == "/reverse-proxy-config.json" || (os.platform() == "win32" && href.toLowerCase() == "/reverse-proxy-config.json")) && path.normalize(__dirname + "/../../..") == process.cwd()) { + callServerError(403, "reverse-proxy-mod/1.02"); } else { elseCallback(); } diff --git a/mod.info b/mod.info index ee45023..1965cd0 100644 --- a/mod.info +++ b/mod.info @@ -1,4 +1,4 @@ { "name": "Reverse proxy mod for SVR.JS 3.x", - "version": "Nightly-GitMaster" + "version": "Nightly-GitMain" }