diff options
author | Sam Wilkins <samwilkins333@gmail.com> | 2020-05-20 02:11:22 -0700 |
---|---|---|
committer | Sam Wilkins <samwilkins333@gmail.com> | 2020-05-20 02:11:22 -0700 |
commit | dd0c1f98d3f3056360ab7bacab6a5c98577ebafc (patch) | |
tree | d8948b08b1b4bcdf1ffa492452c71ecb1f9460e4 /src/server/server_Initialization.ts | |
parent | 0b1039b75af01836082f9bb4613e66c6218a6117 (diff) |
cors proxy error no longer crashes server
Diffstat (limited to 'src/server/server_Initialization.ts')
-rw-r--r-- | src/server/server_Initialization.ts | 39 |
1 files changed, 21 insertions, 18 deletions
diff --git a/src/server/server_Initialization.ts b/src/server/server_Initialization.ts index 68954fa44..d370385b2 100644 --- a/src/server/server_Initialization.ts +++ b/src/server/server_Initialization.ts @@ -135,7 +135,7 @@ function registerAuthenticationRoutes(server: express.Express) { function registerCorsProxy(server: express.Express) { const headerCharRegex = /[^\t\x20-\x7e\x80-\xff]/; - server.use("/corsProxy", (req, res) => { + server.use("/corsProxy", async (req, res) => { const requrl = decodeURIComponent(req.url.substring(1)); const referer = req.headers.referer ? decodeURIComponent(req.headers.referer) : ""; @@ -144,25 +144,28 @@ function registerCorsProxy(server: express.Express) { // then we redirect again to the cors referer and just add the relative path. if (!requrl.startsWith("http") && req.originalUrl.startsWith("/corsProxy") && referer?.includes("corsProxy")) { res.redirect(referer + (referer.endsWith("/") ? "" : "/") + requrl); - } - else { + } else { try { - req.pipe(request(requrl)).on("response", res => { - const headers = Object.keys(res.headers); - headers.forEach(headerName => { - const header = res.headers[headerName]; - if (Array.isArray(header)) { - res.headers[headerName] = header.filter(h => !headerCharRegex.test(h)); - } else if (header) { - if (headerCharRegex.test(header as any)) { - delete res.headers[headerName]; - } - } - }); - }).pipe(res); - } catch (e) { - console.log("problem with Cors URL: " + requrl); + await new Promise<void>((resolve, reject) => { + request(requrl).on("response", resolve).on("error", reject); + }); + } catch { + console.log(`Malformed CORS url: ${requrl}`); + return res.send(); } + req.pipe(request(requrl)).on("response", res => { + const headers = Object.keys(res.headers); + headers.forEach(headerName => { + const header = res.headers[headerName]; + if (Array.isArray(header)) { + res.headers[headerName] = header.filter(h => !headerCharRegex.test(h)); + } else if (header) { + if (headerCharRegex.test(header as any)) { + delete res.headers[headerName]; + } + } + }); + }).on("error", () => console.log(`Malformed CORS url: ${requrl}`)).pipe(res); } }); } |