From 9ce68b677b83336a439072680a57abbb9ad8d132 Mon Sep 17 00:00:00 2001 From: bobalong79 Date: Mon, 1 Mar 2021 11:30:44 +0000 Subject: [PATCH] Fix for proxy-backend plugin when global-agent is enabled --- .changeset/nervous-dogs-pull.md | 5 +++++ plugins/proxy-backend/src/service/router.ts | 18 ++++++++---------- 2 files changed, 13 insertions(+), 10 deletions(-) create mode 100644 .changeset/nervous-dogs-pull.md diff --git a/.changeset/nervous-dogs-pull.md b/.changeset/nervous-dogs-pull.md new file mode 100644 index 0000000000..bf8ac8c3ca --- /dev/null +++ b/.changeset/nervous-dogs-pull.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-proxy-backend': minor +--- + +Fix for proxy-backend plugin when global-agent is enabled diff --git a/plugins/proxy-backend/src/service/router.ts b/plugins/proxy-backend/src/service/router.ts index 036e3a8d1b..1798c56cc6 100644 --- a/plugins/proxy-backend/src/service/router.ts +++ b/plugins/proxy-backend/src/service/router.ts @@ -85,11 +85,6 @@ export function buildMiddleware( // Attach the logger to the proxy config fullConfig.logProvider = () => logger; - // Only permit the allowed HTTP methods if configured - const filter = (_pathname: string, req: http.IncomingMessage): boolean => { - return fullConfig?.allowedMethods?.includes(req.method!) ?? true; - }; - // Only return the allowed HTTP headers to not forward unwanted secret headers const requestHeaderAllowList = new Set( [ @@ -104,15 +99,18 @@ export function buildMiddleware( ].map(h => h.toLocaleLowerCase()), ); - // only forward the allowed headers in client->backend - fullConfig.onProxyReq = (proxyReq: http.ClientRequest) => { - const headerNames = proxyReq.getHeaderNames(); - + // Use the custom middleware filter to do two things: + // 1. Remove any headers not in the allow list to stop them being forwarded + // 2. Only permit the allowed HTTP methods if configured + const filter = (_pathname: string, req: http.IncomingMessage): boolean => { + const headerNames = Object.keys(req.headers); headerNames.forEach(h => { if (!requestHeaderAllowList.has(h.toLocaleLowerCase())) { - proxyReq.removeHeader(h); + delete req.headers[h]; } }); + + return fullConfig?.allowedMethods?.includes(req.method!) ?? true; }; // Only forward the allowed HTTP headers to not forward unwanted secret headers