From 92242b757d024c6e7b8999d67911ba378754fd76 Mon Sep 17 00:00:00 2001 From: Dorian Niemiec Date: Thu, 23 Nov 2023 04:34:17 +0100 Subject: [PATCH] Clean up the code --- index.js | 824 +++++++++++++++++++++++++++---------------------------- 1 file changed, 412 insertions(+), 412 deletions(-) diff --git a/index.js b/index.js index c06d825..0ed3413 100644 --- a/index.js +++ b/index.js @@ -18,14 +18,14 @@ var configJSONS = JSON.parse(fs.readFileSync(__dirname + "/../../../config.json" var exttointerpreteruser = {}; var scriptExts = []; try { - exttointerpreteruser = JSON.parse(fs.readFileSync(__dirname + "/../../../redbrick-interpreters.json")); -} catch(ex) { - + exttointerpreteruser = JSON.parse(fs.readFileSync(__dirname + "/../../../redbrick-interpreters.json")); +} catch (ex) { + } try { - scriptExts = JSON.parse(fs.readFileSync(__dirname + "/../../../redbrick-scriptexts.json")); -} catch(ex) { - + scriptExts = JSON.parse(fs.readFileSync(__dirname + "/../../../redbrick-scriptexts.json")); +} catch (ex) { + } function Mod() {} @@ -72,210 +72,210 @@ Mod.prototype.callback = function (req, res, serverconsole, responseEnd, href, e ".rb": ["ruby"], ".php": ["php-cgi"] }; - if(os.platform() == "win32") { + if (os.platform() == "win32") { exttointerpreter[".exe"] = []; exttointerpreter[".bat"] = ["cmd", "/c"]; exttointerpreter[".vbs"] = ["cscript"]; } - - fs.stat(fname, function (err, stats) { - if (err) { - if (!callServerError) { - res.writeHead(500, { - "Content-Type": "text/html", - "Server": "RedBrick/" + version - }); - res.end("

RedBrick Error!

Reason: " + err.message + "

"); - } else { - callServerError(500, "RedBrick/" + version, err); - } - return; - } - if (stats.size == 0) { - afterShebangCallback(false); - return; - } - var s = fs.createReadStream(fname); - s.on("error", function (err) { - if (!callServerError) { - res.writeHead(500, { - "Content-Type": "text/html", - "Server": "RedBrick/" + version - }); - res.end("

RedBrick Error!

Reason: " + err.message + "

"); - } else { - callServerError(500, "RedBrick/" + version, err); - } - return; - }).on("open", function () { - var rl = readline.createInterface({ - input: s, + fs.stat(fname, function (err, stats) { + if (err) { + if (!callServerError) { + res.writeHead(500, { + "Content-Type": "text/html", + "Server": "RedBrick/" + version }); + res.end("

RedBrick Error!

Reason: " + err.message + "

"); + } else { + callServerError(500, "RedBrick/" + version, err); + } + return; - rl.once("line", function (line) { - rl.close(); - if (line.substr(0, 2) == "#!") { - var args = line.substr(2).match(/(?:[^" ]|\\(?:.|$)|"[^"]*(?:"|$))+/g); - if (!args) args = []; - args = args.map(function (arg) { - return arg.replace(/"/g, ""); - }); - afterShebangCallback(args); - } else if (os.platform() != "win32" && line.substr(0, 4) == "\x7fELF") { - afterShebangCallback("binary"); - } else { - afterShebangCallback(false); - } + } + if (stats.size == 0) { + afterShebangCallback(false); + return; + } + var s = fs.createReadStream(fname); + s.on("error", function (err) { + if (!callServerError) { + res.writeHead(500, { + "Content-Type": "text/html", + "Server": "RedBrick/" + version }); + res.end("

RedBrick Error!

Reason: " + err.message + "

"); + } else { + callServerError(500, "RedBrick/" + version, err); + } + return; + }).on("open", function () { + var rl = readline.createInterface({ + input: s, + }); + + rl.once("line", function (line) { + rl.close(); + if (line.substr(0, 2) == "#!") { + var args = line.substr(2).match(/(?:[^" ]|\\(?:.|$)|"[^"]*(?:"|$))+/g); + if (!args) args = []; + args = args.map(function (arg) { + return arg.replace(/"/g, ""); + }); + afterShebangCallback(args); + } else if (os.platform() != "win32" && line.substr(0, 4) == "\x7fELF") { + afterShebangCallback("binary"); + } else { + afterShebangCallback(false); + } }); }); + }); - function afterShebangCallback(passedArgs) { - var ext = path.extname(fname); - var args = []; - var buffer = ""; - var stderr = ""; - var headerendline = -1; - var cned = false; - args.push(fname); - if (passedArgs == "binary") { + function afterShebangCallback(passedArgs) { + var ext = path.extname(fname); + var args = []; + var buffer = ""; + var stderr = ""; + var headerendline = -1; + var cned = false; + args.push(fname); + if (passedArgs == "binary") { + filename = (process.cwd() + (os.platform() == "win32" ? "\\" + fname.replace(/\//g, "\\") : "/" + fname)).replace(os.platform() == "win32" ? /\\+/ : /\/+/, os.platform() == "win32" ? "\\" : "/"); + args = []; + } else if (passedArgs) { + if (os.platform() == "win32") { + args = passedArgs; + args.push((process.cwd() + ("\\" + fname.replace(/\//g, "\\"))).replace(/\\+/, "\\")); + filename = args.shift(); + } else { filename = (process.cwd() + (os.platform() == "win32" ? "\\" + fname.replace(/\//g, "\\") : "/" + fname)).replace(os.platform() == "win32" ? /\\+/ : /\/+/, os.platform() == "win32" ? "\\" : "/"); args = []; - } else if (passedArgs) { - if (os.platform() == "win32") { - args = passedArgs; - args.push((process.cwd() + ("\\" + fname.replace(/\//g, "\\"))).replace(/\\+/, "\\")); - filename = args.shift(); - } else { - filename = (process.cwd() + (os.platform() == "win32" ? "\\" + fname.replace(/\//g, "\\") : "/" + fname)).replace(os.platform() == "win32" ? /\\+/ : /\/+/, os.platform() == "win32" ? "\\" : "/"); - args = []; - } - } else { - args = exttointerpreteruser[ext]; - if (args === null) { + } + } else { + args = exttointerpreteruser[ext]; + if (args === null) { + elseCallback(); + return; + } else if (!args) { + args = exttointerpreter[ext]; + if (!args) { elseCallback(); return; - } else if (!args) { - args = exttointerpreter[ext]; - if (!args) { - elseCallback(); - return; + } + } + args.push((process.cwd() + (os.platform() == "win32" ? "\\" + fname.replace(/\//g, "\\") : "/" + fname)).replace(os.platform() == "win32" ? /\\+/ : /\/+/, os.platform() == "win32" ? "\\" : "/")); + filename = args.shift(); + } + + var wd = fname.split("/"); + wd[0] = ""; + wd[wd.length - 1] = ""; + wd = wd.join(os.platform() == "win32" ? "\\" : "/"); + var interpreter = childProcess.spawn(filename, args, { + cwd: (process.cwd() + wd).replace(os.platform() == "win32" ? /\\+/ : /\/+/, os.platform() == "win32" ? "\\" : "/"), + env: env + }); + interpreter.on("error", (error) => { + if (!callServerError) { + res.writeHead(500, { + "Content-Type": "text/html", + "Server": "RedBrick/" + version + }); + res.end("

RedBrick Error!

Reason: " + error.message + "

"); + } else { + callServerError(500, "RedBrick/" + version, error); + } + }); + var dataHandler = function (data) { + buffer += data.toString("latin1"); + var m = null; + if (!cned) m = buffer.match(/(?:\r\n\r\n|\n\r\n\r|\n\n|\r\r)/); + if (!cned && m) { + cned = true; + eol = m[0]; + headerendline = m.index; + var bheaders = buffer.substr(0, headerendline).split(/(?:\r\n|\n\r|\n|\r)/); + var bheaderso = {}; + if (dh) bheaderso = dh; + var code = 200; + var msg = "OK"; + var httpMatch = bheaders[0].match(/^HTTP\/[^ ]+ ([0-9]{3})(?: (.*))?$/); + if (httpMatch) { + bheaders.shift(); + code = parseInt(httpMatch[1]); + if (httpMatch[2]) msg = httpMatch[2]; + else msg = http.STATUS_CODES[code]; + } else if (bheaders[0].indexOf(":") == -1) { + var heada = bheaders.shift(); + var hso = heada.match(/^([0-9]{3})(?: (.*))?$/); + if (hso) { + code = parseInt(hso[1]); + if (hso[2]) msg = hso[2]; + else msg = http.STATUS_CODES[code]; } } - args.push((process.cwd() + (os.platform() == "win32" ? "\\" + fname.replace(/\//g, "\\") : "/" + fname)).replace(os.platform() == "win32" ? /\\+/ : /\/+/, os.platform() == "win32" ? "\\" : "/")); - filename = args.shift(); - } - - var wd = fname.split("/"); - wd[0] = ""; - wd[wd.length - 1] = ""; - wd = wd.join(os.platform() == "win32" ? "\\" : "/"); - var interpreter = childProcess.spawn(filename, args, { - cwd: (process.cwd() + wd).replace(os.platform() == "win32" ? /\\+/ : /\/+/, os.platform() == "win32" ? "\\" : "/"), - env: env - }); - interpreter.on("error", (error) => { - if (!callServerError) { - res.writeHead(500, { - "Content-Type": "text/html", - "Server": "RedBrick/" + version - }); - res.end("

RedBrick Error!

Reason: " + error.message + "

"); - } else { - callServerError(500, "RedBrick/" + version, error); - } - }); - var dataHandler = function (data) { - buffer += data.toString("latin1"); - var m = null; - if (!cned) m = buffer.match(/(?:\r\n\r\n|\n\r\n\r|\n\n|\r\r)/); - if (!cned && m) { - cned = true; - eol = m[0]; - headerendline = m.index; - var bheaders = buffer.substr(0, headerendline).split(/(?:\r\n|\n\r|\n|\r)/); - var bheaderso = {}; - if (dh) bheaderso = dh; - var code = 200; - var msg = "OK"; - var httpMatch = bheaders[0].match(/^HTTP\/[^ ]+ ([0-9]{3})(?: (.*))?$/); - if (httpMatch) { - bheaders.shift(); - code = parseInt(httpMatch[1]); - if (httpMatch[2]) msg = httpMatch[2]; - else msg = http.STATUS_CODES[code]; - } else if (bheaders[0].indexOf(":") == -1) { - var heada = bheaders.shift(); - var hso = heada.match(/^([0-9]{3})(?: (.*))?$/); - if (hso) { - code = parseInt(hso[1]); - if (hso[2]) msg = hso[2]; + for (var i = 0; i < bheaders.length; i++) { + var headerp = bheaders[i].match(/^([^:]*)(?:: (.*))?/); + if (!headerp) headerp = []; + var headern = headerp[1]; + var headerv = headerp[2]; + if (headern.toLowerCase() == "status") { + var httpMatch = headerv.match(/^([0-9]{3})(?: (.*))?$/); + if (httpMatch) { + code = parseInt(httpMatch[1]); + if (httpMatch[2]) msg = httpMatch[2]; else msg = http.STATUS_CODES[code]; } + } else if (headern.toLowerCase() == "set-cookie") { + if (!bheaderso["Set-Cookie"]) bheaderso["Set-Cookie"] = []; + bheaderso["Set-Cookie"].push(headerv); + } else { + bheaderso[headern] = headerv; } - for (var i = 0; i < bheaders.length; i++) { - var headerp = bheaders[i].match(/^([^:]*)(?:: (.*))?/); - if(!headerp) headerp = []; - var headern = headerp[1]; - var headerv = headerp[2]; - if (headern.toLowerCase() == "status") { - var httpMatch = headerv.match(/^([0-9]{3})(?: (.*))?$/); - if(httpMatch) { - code = parseInt(httpMatch[1]); - if (httpMatch[2]) msg = httpMatch[2]; - else msg = http.STATUS_CODES[code]; - } - } else if (headern.toLowerCase() == "set-cookie") { - if (!bheaderso["Set-Cookie"]) bheaderso["Set-Cookie"] = []; - bheaderso["Set-Cookie"].push(headerv); - } else { - bheaderso[headern] = headerv; - } - } + } - if (code == 200 && (bheaderso["Location"] || bheaderso["location"])) { - code = 302; - msg = "Found"; - } + if (code == 200 && (bheaderso["Location"] || bheaderso["location"])) { + code = 302; + msg = "Found"; + } - try { - res.writeHead(code, msg, bheaderso); - res.write(buffer.substr(headerendline + eol.length), "latin1"); - } catch (ex) { - if (!callServerError) { - res.writeHead(500); - res.end(ex.stack); - } else { - callServerError(500, "RedBrick/" + version, ex); - } - return; + try { + res.writeHead(code, msg, bheaderso); + res.write(buffer.substr(headerendline + eol.length), "latin1"); + } catch (ex) { + if (!callServerError) { + res.writeHead(500); + res.end(ex.stack); + } else { + callServerError(500, "RedBrick/" + version, ex); + } + return; + } + } else { + if (cned && !res.finished) res.write(data); + } + }; + if (interpreter.stdout) { + interpreter.stdout.on("data", dataHandler); + interpreter.stderr.on("data", function (data) { + stderr += data.toString(); + }); + req.pipe(interpreter.stdin); + interpreter.on("exit", (code, signal) => { + if (!cned && (signal || code !== 0)) { + var ex = new Error("Process execution failed!" + (stderr ? " Reason: " + stderr.trim() : "")); + if (!callServerError) { + res.writeHead(500); + res.end(ex.stack); + } else { + callServerError(500, "RedBrick/" + version, ex); } } else { - if (cned && !res.finished) res.write(data); + res.end(); } - }; - if (interpreter.stdout) { - interpreter.stdout.on("data", dataHandler); - interpreter.stderr.on("data", function (data) { - stderr += data.toString(); - }); - req.pipe(interpreter.stdin); - interpreter.on("exit", (code, signal) => { - if (!cned && (signal || code !== 0)) { - var ex = new Error("Process execution failed!" + (stderr ? " Reason: " + stderr.trim() : "")); - if (!callServerError) { - res.writeHead(500); - res.end(ex.stack); - } else { - callServerError(500, "RedBrick/" + version, ex); - } - } else { - res.end(); - } - }); - } + }); } + } } function executeCGIWithEnv(a, b, req, res, pubip, port, software, dh) { @@ -304,7 +304,7 @@ Mod.prototype.callback = function (req, res, serverconsole, responseEnd, href, e nEnv["SERVER_ADDR"] = pubip.replace(/^::ffff:/i, ""); if (nEnv["SERVER_ADDR"].indexOf(":") != -1) nEnv["SERVER_ADDR"] = "[" + nEnv["SERVER_ADDR"] + "]"; } - if(configJSON.serverAdministratorEmail && configJSON.serverAdministratorEmail != "[no contact information]") { + if (configJSON.serverAdministratorEmail && configJSON.serverAdministratorEmail != "[no contact information]") { nEnv["SERVER_ADMIN"] = configJSON.serverAdministratorEmail; } nEnv["SERVER_NAME"] = req.headers.host; @@ -315,9 +315,9 @@ Mod.prototype.callback = function (req, res, serverconsole, responseEnd, href, e nEnv["GATEWAY_INTERFACE"] = "CGI/1.1"; nEnv["REQUEST_URI"] = (!origHref || origHref == href) ? req.url : (origHref + (uobject.search ? ("?" + uobject.search) : "")); nEnv["REMOTE_ADDR"] = (req.socket.realRemoteAddress ? req.socket.realRemoteAddress : ((req.headers["x-forwarded-for"] && configJSON.enableIPSpoofing) ? req.headers["x-forwarded-for"].split(",")[0].replace(/ /g, "") : req.socket.remoteAddress)).replace(/^::ffff:/i, ""); - if(req.socket.realRemoteAddress && req.socket.realRemotePort) { + if (req.socket.realRemoteAddress && req.socket.realRemotePort) { nEnv["REMOTE_PORT"] = req.socket.realRemotePort; - } else if(!(req.socket.realRemoteAddress && !req.socket.realRemotePort)) { + } else if (!(req.socket.realRemoteAddress && !req.socket.realRemotePort)) { nEnv["REMOTE_PORT"] = req.socket.remotePort; } nEnv["SCRIPT_NAME"] = a; @@ -337,7 +337,7 @@ Mod.prototype.callback = function (req, res, serverconsole, responseEnd, href, e var isCgiBin = href.match(new RegExp("/cgi-bin(?:$|[?#/])", os.platform() == "win32" ? "i" : "")); var isScriptExt = scriptExts.indexOf("." + ext) != -1; - + if ((href == "/redbrick-interpreters.json" || href == "/redbrick-scriptexts.json" || (os.platform() == "win32" && (href.toLowerCase() == "/redbrick-interpreters.json" || href.toLowerCase() == "/redbrick-scriptexts.json"))) && path.normalize(__dirname + "/../../..") == process.cwd()) { if (!callServerError) { res.writeHead(403, "Forbidden", { @@ -345,19 +345,19 @@ Mod.prototype.callback = function (req, res, serverconsole, responseEnd, href, e "Server": "RedBrick/" + version }); res.write( - "403 Forbidden

403 Forbidden

You don't have access to specific page.

SVR.JS " + - configJSON.version + - " (" + - os.platform()[0].toUpperCase() + - os.platform().slice(1) + - "; Node.JS/" + - process.version + - ") RedBrick/" + - version + - " " + - (req.headers.host == undefined ? "" : " on " + req.headers.host) + - "

" - ); + "403 Forbidden

403 Forbidden

You don't have access to specific page.

SVR.JS " + + configJSON.version + + " (" + + os.platform()[0].toUpperCase() + + os.platform().slice(1) + + "; Node.JS/" + + process.version + + ") RedBrick/" + + version + + " " + + (req.headers.host == undefined ? "" : " on " + req.headers.host) + + "

" + ); res.end(JSON.stringify(exttointerpreteruser, null, 2)); } else { callServerError(403, "RedBrick/" + version); @@ -366,39 +366,22 @@ Mod.prototype.callback = function (req, res, serverconsole, responseEnd, href, e fs.stat("." + href, function (err, stats) { if (!err) { if (!stats.isFile()) { - if(isCgiBin || scriptExts.indexOf(".php") != -1) { - fs.stat("." + href + "/index.php", function (e2, s2) { - if (!e2 && s2.isFile()) { - try { - executeCGIWithEnv( - (href + "/index.php").replace(/\/+/g, "/"), - "", - req, - res, - req.socket.localAddress, - req.socket.localPort, - getCustomHeaders ? - getCustomHeaders()["Server"] + - " RedBrick/" + - version : - "SVR.JS/" + - configJSON.version + - " (" + - os.platform()[0].toUpperCase() + - os.platform().slice(1) + - "; Node.JS/" + - process.version + - ") RedBrick/" + - version, - bheaders - ); - } catch (ex) { - if (!callServerError) { - res.writeHead(500, "Internal Server Error", abheaders); - res.write( - "500 Internal Server Error

500 Internal Server Error

A server had unexpected exception. Below, the stack trace of the error is shown:

" + - ex.stack.replace(/\r\n/g, "
").replace(/\n/g, "
").replace(/\r/g, "
").replace(/ /g, " ") + - "

Please contact the developer/administrator of the website.

SVR.JS " + + if (isCgiBin || scriptExts.indexOf(".php") != -1) { + fs.stat("." + href + "/index.php", function (e2, s2) { + if (!e2 && s2.isFile()) { + try { + executeCGIWithEnv( + (href + "/index.php").replace(/\/+/g, "/"), + "", + req, + res, + req.socket.localAddress, + req.socket.localPort, + getCustomHeaders ? + getCustomHeaders()["Server"] + + " RedBrick/" + + version : + "SVR.JS/" + configJSON.version + " (" + os.platform()[0].toUpperCase() + @@ -406,32 +389,16 @@ Mod.prototype.callback = function (req, res, serverconsole, responseEnd, href, e "; Node.JS/" + process.version + ") RedBrick/" + - version + - " " + - (req.headers.host == undefined ? "" : " on " + req.headers.host) + - "

" + version, + bheaders ); - res.end(); - } else { - callServerError(500, "RedBrick/" + version, ex); - } - } - } else if(isCgiBin || scriptExts.indexOf(".cgi") != -1) { - fs.stat("." + href + "/index.cgi", function (e3, s3) { - if (!e3 && s3.isFile()) { - try { - executeCGIWithEnv( - (href + "/index.cgi").replace(/\/+/g, "/"), - "", - req, - res, - req.socket.localAddress, - req.socket.localPort, - getCustomHeaders ? - getCustomHeaders()["Server"] + - " RedBrick/" + - version : - "SVR.JS/" + + } catch (ex) { + if (!callServerError) { + res.writeHead(500, "Internal Server Error", abheaders); + res.write( + "500 Internal Server Error

500 Internal Server Error

A server had unexpected exception. Below, the stack trace of the error is shown:

" + + ex.stack.replace(/\r\n/g, "
").replace(/\n/g, "
").replace(/\r/g, "
").replace(/ /g, " ") + + "

Please contact the developer/administrator of the website.

SVR.JS " + configJSON.version + " (" + os.platform()[0].toUpperCase() + @@ -439,16 +406,32 @@ Mod.prototype.callback = function (req, res, serverconsole, responseEnd, href, e "; Node.JS/" + process.version + ") RedBrick/" + - version, - bheaders + version + + " " + + (req.headers.host == undefined ? "" : " on " + req.headers.host) + + "

" ); - } catch (ex) { - if (!callServerError) { - res.writeHead(500, "Internal Server Error", abheaders); - res.write( - "500 Internal Server Error

500 Internal Server Error

A server had unexpected exception. Below, the stack trace of the error is shown:

" + - ex.stack.replace(/\r\n/g, "
").replace(/\n/g, "
").replace(/\r/g, "
").replace(/ /g, " ") + - "

Please contact the developer/administrator of the website.

SVR.JS " + + res.end(); + } else { + callServerError(500, "RedBrick/" + version, ex); + } + } + } else if (isCgiBin || scriptExts.indexOf(".cgi") != -1) { + fs.stat("." + href + "/index.cgi", function (e3, s3) { + if (!e3 && s3.isFile()) { + try { + executeCGIWithEnv( + (href + "/index.cgi").replace(/\/+/g, "/"), + "", + req, + res, + req.socket.localAddress, + req.socket.localPort, + getCustomHeaders ? + getCustomHeaders()["Server"] + + " RedBrick/" + + version : + "SVR.JS/" + configJSON.version + " (" + os.platform()[0].toUpperCase() + @@ -456,40 +439,74 @@ Mod.prototype.callback = function (req, res, serverconsole, responseEnd, href, e "; Node.JS/" + process.version + ") RedBrick/" + - version + - " " + - (req.headers.host == undefined ? "" : " on " + req.headers.host) + - "

" + version, + bheaders ); - res.end(); - } else { - callServerError(500, "RedBrick/" + version, ex); + } catch (ex) { + if (!callServerError) { + res.writeHead(500, "Internal Server Error", abheaders); + res.write( + "500 Internal Server Error

500 Internal Server Error

A server had unexpected exception. Below, the stack trace of the error is shown:

" + + ex.stack.replace(/\r\n/g, "
").replace(/\n/g, "
").replace(/\r/g, "
").replace(/ /g, " ") + + "

Please contact the developer/administrator of the website.

SVR.JS " + + configJSON.version + + " (" + + os.platform()[0].toUpperCase() + + os.platform().slice(1) + + "; Node.JS/" + + process.version + + ") RedBrick/" + + version + + " " + + (req.headers.host == undefined ? "" : " on " + req.headers.host) + + "

" + ); + res.end(); + } else { + callServerError(500, "RedBrick/" + version, ex); + } } + } else { + elseCallback(); } - } else { - elseCallback(); - } - }); - } else { + }); + } else { elseCallback(); - } - }); - } else if(scriptExts.indexOf(".cgi") != -1) { - fs.stat("." + href + "/index.cgi", function (e3, s3) { - if (!e3 && s3.isFile()) { - try { - executeCGIWithEnv( - (href + "/index.cgi").replace(/\/+/g, "/"), - "", - req, - res, - req.socket.localAddress, - req.socket.localPort, - getCustomHeaders ? - getCustomHeaders()["Server"] + - " RedBrick/" + - version : - "SVR.JS/" + + } + }); + } else if (scriptExts.indexOf(".cgi") != -1) { + fs.stat("." + href + "/index.cgi", function (e3, s3) { + if (!e3 && s3.isFile()) { + try { + executeCGIWithEnv( + (href + "/index.cgi").replace(/\/+/g, "/"), + "", + req, + res, + req.socket.localAddress, + req.socket.localPort, + getCustomHeaders ? + getCustomHeaders()["Server"] + + " RedBrick/" + + version : + "SVR.JS/" + + configJSON.version + + " (" + + os.platform()[0].toUpperCase() + + os.platform().slice(1) + + "; Node.JS/" + + process.version + + ") RedBrick/" + + version, + bheaders + ); + } catch (ex) { + if (!callServerError) { + res.writeHead(500, "Internal Server Error", abheaders); + res.write( + "500 Internal Server Error

500 Internal Server Error

A server had unexpected exception. Below, the stack trace of the error is shown:

" + + ex.stack.replace(/\r\n/g, "
").replace(/\n/g, "
").replace(/\r/g, "
").replace(/ /g, " ") + + "

Please contact the developer/administrator of the website.

SVR.JS " + configJSON.version + " (" + os.platform()[0].toUpperCase() + @@ -497,126 +514,29 @@ Mod.prototype.callback = function (req, res, serverconsole, responseEnd, href, e "; Node.JS/" + process.version + ") RedBrick/" + - version, - bheaders + version + + " " + + (req.headers.host == undefined ? "" : " on " + req.headers.host) + + "

" ); - } catch (ex) { - if (!callServerError) { - res.writeHead(500, "Internal Server Error", abheaders); - res.write( - "500 Internal Server Error

500 Internal Server Error

A server had unexpected exception. Below, the stack trace of the error is shown:

" + - ex.stack.replace(/\r\n/g, "
").replace(/\n/g, "
").replace(/\r/g, "
").replace(/ /g, " ") + - "

Please contact the developer/administrator of the website.

SVR.JS " + - configJSON.version + - " (" + - os.platform()[0].toUpperCase() + - os.platform().slice(1) + - "; Node.JS/" + - process.version + - ") RedBrick/" + - version + - " " + - (req.headers.host == undefined ? "" : " on " + req.headers.host) + - "

" - ); - res.end(); - } else { - callServerError(500, "RedBrick/" + version, ex); - } + res.end(); + } else { + callServerError(500, "RedBrick/" + version, ex); } - } else { - elseCallback(); } - }); + } else { + elseCallback(); + } + }); } else { - elseCallback(); + elseCallback(); } } else { - if(isCgiBin || isScriptExt) { - try { - executeCGIWithEnv( - href, - "", - req, - res, - req.socket.localAddress, - req.socket.localPort, - getCustomHeaders ? - getCustomHeaders()["Server"] + - " RedBrick/" + - version : - "SVR.JS/" + - configJSON.version + - " (" + - os.platform()[0].toUpperCase() + - os.platform().slice(1) + - "; Node.JS/" + - process.version + - ") RedBrick/" + - version, - bheaders - ); - } catch (ex) { - if (!callServerError) { - res.writeHead(500, "Internal Server Error", abheaders); - res.write( - "500 Internal Server Error

500 Internal Server Error

A server had unexpected exception. Below, the stack trace of the error is shown:

" + - ex.stack.replace(/\r\n/g, "
").replace(/\n/g, "
").replace(/\r/g, "
").replace(/ /g, " ") + - "

Please contact the developer/administrator of the website.

SVR.JS " + - configJSON.version + - " (" + - os.platform()[0].toUpperCase() + - os.platform().slice(1) + - "; Node.JS/" + - process.version + - ") RedBrick/" + - version + - " " + - (req.headers.host == undefined ? "" : " on " + req.headers.host) + - "

" - ); - res.end(); - } else { - callServerError(500, "RedBrick/" + version, ex); - } - } - } else { - elseCallback(); - } - } - } else if (err && err.code == "ENOTDIR") { - function checkPath(pth, cb, a) { - // Function to check the path of the file and execute CGI script - var cpth = pth.split("/"); - if (cpth.length < (isCgiBin ? 3 : 2)) { - cb(false); - return; - } - if (!a) b = []; - else var b = a.split("/"); - var isFile = false; - fs.stat(pth, function (err, stats) { - if (!err && stats.isFile()) { - cb({ - fpth: pth, - rpth: (a !== undefined ? "/" + a : "") - }) - } else { - b.unshift(cpth.pop()); - return checkPath(cpth.join("/"), cb, b.join("/")); - } - }); - } - checkPath("." + href, function (pathp) { - if (!pathp) { - elseCallback(); - } else { - var newext = path.extname(pathp.fpth); - if(isCgiBin || scriptExts.indexOf(newext) != -1) { + if (isCgiBin || isScriptExt) { try { executeCGIWithEnv( - pathp.fpth.substr(1), - pathp.rpth, + href, + "", req, res, req.socket.localAddress, @@ -660,9 +580,89 @@ Mod.prototype.callback = function (req, res, serverconsole, responseEnd, href, e callServerError(500, "RedBrick/" + version, ex); } } - } else { - elseCallback(); + } else { + elseCallback(); } + } + } else if (err && err.code == "ENOTDIR") { + function checkPath(pth, cb, a) { + // Function to check the path of the file and execute CGI script + var cpth = pth.split("/"); + if (cpth.length < (isCgiBin ? 3 : 2)) { + cb(false); + return; + } + if (!a) b = []; + else var b = a.split("/"); + var isFile = false; + fs.stat(pth, function (err, stats) { + if (!err && stats.isFile()) { + cb({ + fpth: pth, + rpth: (a !== undefined ? "/" + a : "") + }) + } else { + b.unshift(cpth.pop()); + return checkPath(cpth.join("/"), cb, b.join("/")); + } + }); + } + checkPath("." + href, function (pathp) { + if (!pathp) { + elseCallback(); + } else { + var newext = path.extname(pathp.fpth); + if (isCgiBin || scriptExts.indexOf(newext) != -1) { + try { + executeCGIWithEnv( + pathp.fpth.substr(1), + pathp.rpth, + req, + res, + req.socket.localAddress, + req.socket.localPort, + getCustomHeaders ? + getCustomHeaders()["Server"] + + " RedBrick/" + + version : + "SVR.JS/" + + configJSON.version + + " (" + + os.platform()[0].toUpperCase() + + os.platform().slice(1) + + "; Node.JS/" + + process.version + + ") RedBrick/" + + version, + bheaders + ); + } catch (ex) { + if (!callServerError) { + res.writeHead(500, "Internal Server Error", abheaders); + res.write( + "500 Internal Server Error

500 Internal Server Error

A server had unexpected exception. Below, the stack trace of the error is shown:

" + + ex.stack.replace(/\r\n/g, "
").replace(/\n/g, "
").replace(/\r/g, "
").replace(/ /g, " ") + + "

Please contact the developer/administrator of the website.

SVR.JS " + + configJSON.version + + " (" + + os.platform()[0].toUpperCase() + + os.platform().slice(1) + + "; Node.JS/" + + process.version + + ") RedBrick/" + + version + + " " + + (req.headers.host == undefined ? "" : " on " + req.headers.host) + + "

" + ); + res.end(); + } else { + callServerError(500, "RedBrick/" + version, ex); + } + } + } else { + elseCallback(); + } } }); } else if (err && err.code == "ENOENT") {