From b8c76828d01c7da068ebbbf6b5b8c8b64499ea15 Mon Sep 17 00:00:00 2001 From: FragsterAt Date: Fri, 4 Mar 2022 22:12:16 +0300 Subject: [PATCH 1/3] fetch_regex in error, fixes #16 --- server.js | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/server.js b/server.js index bf148e3..70d9cab 100644 --- a/server.js +++ b/server.js @@ -4,7 +4,7 @@ var config = require("./config"); var url = require("url"); var request = require("request"); var cluster = require('cluster'); -var throttle = require("tokenthrottle")({rate: config.max_requests_per_second}); +var throttle = require("tokenthrottle")({ rate: config.max_requests_per_second }); http.globalAgent.maxSockets = Infinity; https.globalAgent.maxSockets = Infinity; @@ -19,7 +19,7 @@ publicAddressFinder(function (err, data) { } }); -function addCORSHeaders(req, res) { +function addCORSHeaders (req, res) { if (req.method.toUpperCase() === "OPTIONS") { if (req.headers["access-control-request-headers"]) { res.setHeader("Access-Control-Allow-Headers", req.headers["access-control-request-headers"]); @@ -38,25 +38,25 @@ function addCORSHeaders(req, res) { } } -function writeResponse(res, httpCode, body) { +function writeResponse (res, httpCode, body) { res.statusCode = httpCode; res.end(body); } -function sendInvalidURLResponse(res) { - return writeResponse(res, 404, "url must be in the form of /fetch/{some_url_here}"); +function sendInvalidURLResponse (res, fetch_regex) { + return writeResponse(res, 404, "url must be in the form of " + fetch_regex + "{some_url_here}"); } -function sendTooBigResponse(res) { +function sendTooBigResponse (res) { return writeResponse(res, 413, "the content in the request or response cannot exceed " + config.max_request_length + " characters."); } -function getClientAddress(req) { +function getClientAddress (req) { return (req.headers['x-forwarded-for'] || '').split(',')[0] || req.connection.remoteAddress; } -function processRequest(req, res) { +function processRequest (req, res) { addCORSHeaders(req, res); // Return options pre-flight requests right away @@ -73,7 +73,7 @@ function processRequest(req, res) { remoteURL = url.parse(decodeURI(result[1])); } catch (e) { - return sendInvalidURLResponse(res); + return sendInvalidURLResponse(res, config.fetch_regex); } // We don't support relative links @@ -105,7 +105,7 @@ function processRequest(req, res) { if (req.headers["host"]) { req.headers["host"] = remoteURL.host; } - + // Remove origin and referer headers. TODO: This is a bit naughty, we should remove at some point. delete req.headers["origin"]; delete req.headers["referer"]; @@ -141,7 +141,7 @@ function processRequest(req, res) { proxyRequest.end(); return sendTooBigResponse(res); } - }).on('error', function(err){ + }).on('error', function (err) { writeResponse(res, 500, "Stream Error"); }); @@ -153,12 +153,12 @@ function processRequest(req, res) { proxyRequest.end(); return sendTooBigResponse(res); } - }).on('error', function(err){ + }).on('error', function (err) { writeResponse(res, 500, "Stream Error"); }); } else { - return sendInvalidURLResponse(res); + return sendInvalidURLResponse(res, config.fetch_regex); } } @@ -167,8 +167,7 @@ if (cluster.isMaster) { cluster.fork(); } } -else -{ +else { http.createServer(function (req, res) { // Process AWS health checks From 68f5c62c6a4dcddc906c3d1c650d4f8a7e52bd54 Mon Sep 17 00:00:00 2001 From: FragsterAt Date: Fri, 4 Mar 2022 22:15:17 +0300 Subject: [PATCH 2/3] fix url, if it miss second slash after protocol, fixes #15 --- server.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/server.js b/server.js index 70d9cab..a23b25c 100644 --- a/server.js +++ b/server.js @@ -70,7 +70,8 @@ function processRequest (req, res) { var remoteURL; try { - remoteURL = url.parse(decodeURI(result[1])); + var unnormalizedUrl = result[1].replace(/^(http(s?):\/)(?!\/)/, '$1/') + remoteURL = url.parse(decodeURI(unnormalizedUrl)); } catch (e) { return sendInvalidURLResponse(res, config.fetch_regex); From 8255ba629d76fb6efd3a7cb1391762257bed391c Mon Sep 17 00:00:00 2001 From: FragsterAt Date: Fri, 4 Mar 2022 22:19:58 +0300 Subject: [PATCH 3/3] echo request url in wrong url eror message #16 --- server.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/server.js b/server.js index a23b25c..6625035 100644 --- a/server.js +++ b/server.js @@ -43,8 +43,8 @@ function writeResponse (res, httpCode, body) { res.end(body); } -function sendInvalidURLResponse (res, fetch_regex) { - return writeResponse(res, 404, "url must be in the form of " + fetch_regex + "{some_url_here}"); +function sendInvalidURLResponse (res, fetch_regex, url) { + return writeResponse(res, 404, "url must be in the form of " + fetch_regex + "{some_url_here}, has " + url); } function sendTooBigResponse (res) { @@ -74,7 +74,7 @@ function processRequest (req, res) { remoteURL = url.parse(decodeURI(unnormalizedUrl)); } catch (e) { - return sendInvalidURLResponse(res, config.fetch_regex); + return sendInvalidURLResponse(res, config.fetch_regex, req.url); } // We don't support relative links @@ -159,7 +159,7 @@ function processRequest (req, res) { }); } else { - return sendInvalidURLResponse(res, config.fetch_regex); + return sendInvalidURLResponse(res, config.fetch_regex, req.url); } }