aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/handlers/compile.ts27
-rw-r--r--package-lock.json8
-rw-r--r--package.json2
3 files changed, 24 insertions, 13 deletions
diff --git a/lib/handlers/compile.ts b/lib/handlers/compile.ts
index 35b7ad317..e9c20f2ca 100644
--- a/lib/handlers/compile.ts
+++ b/lib/handlers/compile.ts
@@ -132,7 +132,7 @@ export class CompileHandler {
// https://github.com/nodejitsu/node-http-proxy/blob/master/examples/middleware/bodyDecoder-middleware.js
// We just keep the body as-is though: no encoding using queryString.stringify(), as we don't use a form
// decoding middleware.
- this.proxy.on('proxyReq', function (proxyReq, req) {
+ this.proxy.on('proxyReq', (proxyReq, req) => {
// TODO ideally I'd work out if this is "ok" - IncomingMessage doesn't have a body, but pragmatically the
// object we get here does.
const body = (req as any).body;
@@ -144,15 +144,28 @@ export class CompileHandler {
if (contentType === 'application/json') {
bodyData = JSON.stringify(body);
- }
-
- if (contentType === 'application/x-www-form-urlencoded') {
+ } else if (contentType === 'application/x-www-form-urlencoded') {
bodyData = body;
+ } else {
+ Sentry.captureException(
+ new Error(`Unexpected Content-Type received by /compiler/:compiler/compile: ${contentType}`),
+ );
+ proxyReq.write('Unexpected Content-Type');
}
- if (bodyData) {
- proxyReq.setHeader('Content-Length', Buffer.byteLength(bodyData));
- proxyReq.write(bodyData);
+ try {
+ if (bodyData) {
+ proxyReq.setHeader('Content-Length', Buffer.byteLength(bodyData));
+ proxyReq.write(bodyData);
+ }
+ } catch (e: any) {
+ Sentry.captureException(e);
+ let json = '<json stringify error>';
+ try {
+ json = JSON.stringify(bodyData);
+ } catch (e) {}
+ Sentry.captureMessage(`Unknown proxy bodyData: ${bodyData}, JSON.stringify: ${json}`);
+ proxyReq.write('Proxy error');
}
});
}
diff --git a/package-lock.json b/package-lock.json
index 80e1ca1c9..e5290ac4b 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -13,7 +13,9 @@
"@fortawesome/fontawesome-free": "^6.2.1",
"@sentry/browser": "^7.28.1",
"@sentry/node": "^7.28.1",
+ "@types/body-parser": "^1.19.2",
"@types/file-saver": "^2.0.5",
+ "@types/http-proxy": "^1.17.9",
"@types/request": "^2.48.8",
"aws-sdk": "^2.1048.0",
"big-integer": "^1.6.51",
@@ -1699,7 +1701,6 @@
"version": "1.19.2",
"resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz",
"integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==",
- "dev": true,
"dependencies": {
"@types/connect": "*",
"@types/node": "*"
@@ -1738,7 +1739,6 @@
"version": "3.4.35",
"resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz",
"integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==",
- "dev": true,
"dependencies": {
"@types/node": "*"
}
@@ -1823,7 +1823,6 @@
"version": "1.17.9",
"resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz",
"integrity": "sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==",
- "dev": true,
"dependencies": {
"@types/node": "*"
}
@@ -16703,7 +16702,6 @@
"version": "1.19.2",
"resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz",
"integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==",
- "dev": true,
"requires": {
"@types/connect": "*",
"@types/node": "*"
@@ -16742,7 +16740,6 @@
"version": "3.4.35",
"resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz",
"integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==",
- "dev": true,
"requires": {
"@types/node": "*"
}
@@ -16827,7 +16824,6 @@
"version": "1.17.9",
"resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz",
"integrity": "sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==",
- "dev": true,
"requires": {
"@types/node": "*"
}
diff --git a/package.json b/package.json
index 57cf7c212..7b5383e03 100644
--- a/package.json
+++ b/package.json
@@ -24,7 +24,9 @@
"@fortawesome/fontawesome-free": "^6.2.1",
"@sentry/browser": "^7.28.1",
"@sentry/node": "^7.28.1",
+ "@types/body-parser": "^1.19.2",
"@types/file-saver": "^2.0.5",
+ "@types/http-proxy": "^1.17.9",
"@types/request": "^2.48.8",
"aws-sdk": "^2.1048.0",
"big-integer": "^1.6.51",