From 3db3b67f5f1b1b023bf7e3678de7b1efdba441c5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 8 Jun 2021 04:08:47 +0000 Subject: [PATCH 1/2] chore(deps): bump http-proxy-middleware from 0.19.2 to 2.0.0 Bumps [http-proxy-middleware](https://github.com/chimurai/http-proxy-middleware) from 0.19.2 to 2.0.0. - [Release notes](https://github.com/chimurai/http-proxy-middleware/releases) - [Changelog](https://github.com/chimurai/http-proxy-middleware/blob/master/CHANGELOG.md) - [Commits](https://github.com/chimurai/http-proxy-middleware/compare/v0.19.2...v2.0.0) --- updated-dependencies: - dependency-name: http-proxy-middleware dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- plugins/proxy-backend/package.json | 2 +- yarn.lock | 28 +++++++++++++++++----------- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/plugins/proxy-backend/package.json b/plugins/proxy-backend/package.json index d2b0d64678..e83b0d9710 100644 --- a/plugins/proxy-backend/package.json +++ b/plugins/proxy-backend/package.json @@ -33,7 +33,7 @@ "@types/express": "^4.17.6", "express": "^4.17.1", "express-promise-router": "^4.1.0", - "http-proxy-middleware": "^0.19.1", + "http-proxy-middleware": "^2.0.0", "morgan": "^1.10.0", "uuid": "^8.0.0", "winston": "^3.2.1", diff --git a/yarn.lock b/yarn.lock index 683ec0f557..f8ec474142 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6191,10 +6191,10 @@ "@types/http-proxy" "*" "@types/node" "*" -"@types/http-proxy@*", "@types/http-proxy@^1.17.4": - version "1.17.5" - resolved "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.5.tgz#c203c5e6e9dc6820d27a40eb1e511c70a220423d" - integrity sha512-GNkDE7bTv6Sf8JbV2GksknKOsk7OznNYHSdrtvPJXO0qJ9odZig6IZKUi5RFGi6d1bf6dgIAe4uXi3DBc7069Q== +"@types/http-proxy@*", "@types/http-proxy@^1.17.4", "@types/http-proxy@^1.17.5": + version "1.17.6" + resolved "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.6.tgz#62dc3fade227d6ac2862c8f19ee0da9da9fd8616" + integrity sha512-+qsjqR75S/ib0ig0R9WN+CDoZeOBU6F2XLewgC4KVgdXiNHiKKHFEMRHOrs5PbYE97D5vataw5wPj4KLYfUkuQ== dependencies: "@types/node" "*" @@ -15181,15 +15181,16 @@ http-proxy-middleware@0.19.1: lodash "^4.17.11" micromatch "^3.1.10" -http-proxy-middleware@^0.19.1: - version "0.19.2" - resolved "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.2.tgz#ee73dcc8348165afefe8de2ff717751d181608ee" - integrity sha512-aYk1rTKqLTus23X3L96LGNCGNgWpG4cG0XoZIT1GUPhhulEHX/QalnO6Vbo+WmKWi4AL2IidjuC0wZtbpg0yhQ== +http-proxy-middleware@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.0.tgz#20d1ac3409199c83e5d0383ba6436b04e7acb9fe" + integrity sha512-S+RN5njuyvYV760aiVKnyuTXqUMcSIvYOsHA891DOVQyrdZOwaXtBHpt9FUVPEDAsOvsPArZp6VXQLs44yvkow== dependencies: + "@types/http-proxy" "^1.17.5" http-proxy "^1.18.1" - is-glob "^4.0.0" - lodash "^4.17.11" - micromatch "^3.1.10" + is-glob "^4.0.1" + is-plain-obj "^3.0.0" + micromatch "^4.0.2" http-proxy@^1.17.0, http-proxy@^1.18.1: version "1.18.1" @@ -16065,6 +16066,11 @@ is-plain-obj@^2.0.0: resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== +is-plain-obj@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" + integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== + is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" From 6ffcf9ed854b29fead9d8270eb3285ac3224821a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Tue, 8 Jun 2021 14:17:42 +0200 Subject: [PATCH 2/2] fixup MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- .changeset/violet-birds-lay.md | 5 +++ packages/cli/package.json | 2 +- .../proxy-backend/src/service/router.test.ts | 40 ++++++++----------- plugins/proxy-backend/src/service/router.ts | 18 +++++---- yarn.lock | 36 ++++++++--------- 5 files changed, 51 insertions(+), 50 deletions(-) create mode 100644 .changeset/violet-birds-lay.md diff --git a/.changeset/violet-birds-lay.md b/.changeset/violet-birds-lay.md new file mode 100644 index 0000000000..841603058f --- /dev/null +++ b/.changeset/violet-birds-lay.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-proxy-backend': patch +--- + +Bump http-proxy-middleware from 0.19.2 to 2.0.0 diff --git a/packages/cli/package.json b/packages/cli/package.json index 3f075824dc..450aa02ee4 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -139,7 +139,7 @@ "@types/rollup-plugin-postcss": "^2.0.0", "@types/tar": "^4.0.3", "@types/webpack": "^4.41.7", - "@types/webpack-dev-server": "3.11.0", + "@types/webpack-dev-server": "^3.11.0", "@types/yarnpkg__lockfile": "^1.1.4", "del": "^5.1.0", "mock-fs": "^4.13.0", diff --git a/plugins/proxy-backend/src/service/router.test.ts b/plugins/proxy-backend/src/service/router.test.ts index 57b87754e2..8b88e45cc5 100644 --- a/plugins/proxy-backend/src/service/router.test.ts +++ b/plugins/proxy-backend/src/service/router.test.ts @@ -14,25 +14,19 @@ * limitations under the License. */ -import { buildMiddleware, createRouter } from './router'; import { getVoidLogger, loadBackendConfig, SingleHostDiscovery, } from '@backstage/backend-common'; -import createProxyMiddleware, { - Config as ProxyMiddlewareConfig, - Proxy, -} from 'http-proxy-middleware'; +import { Request, Response } from 'express'; import * as http from 'http'; +import { createProxyMiddleware, Options } from 'http-proxy-middleware'; +import { buildMiddleware, createRouter } from './router'; -jest.mock('http-proxy-middleware', () => { - return jest.fn().mockImplementation( - (): Proxy => { - return () => undefined; - }, - ); -}); +jest.mock('http-proxy-middleware', () => ({ + createProxyMiddleware: jest.fn(() => () => undefined), +})); const mockCreateProxyMiddleware = createProxyMiddleware as jest.MockedFunction< typeof createProxyMiddleware @@ -66,7 +60,7 @@ describe('buildMiddleware', () => { const [filter, fullConfig] = mockCreateProxyMiddleware.mock.calls[0] as [ (pathname: string, req: Partial) => boolean, - ProxyMiddlewareConfig, + Options, ]; expect(filter('', { method: 'GET', headers: {} })).toBe(true); expect(filter('', { method: 'POST', headers: {} })).toBe(true); @@ -86,7 +80,7 @@ describe('buildMiddleware', () => { const [filter, fullConfig] = mockCreateProxyMiddleware.mock.calls[0] as [ (pathname: string, req: Partial) => boolean, - ProxyMiddlewareConfig, + Options, ]; expect(filter('', { method: 'GET', headers: {} })).toBe(true); expect(filter('', { method: 'POST', headers: {} })).toBe(true); @@ -106,7 +100,7 @@ describe('buildMiddleware', () => { const [filter, fullConfig] = mockCreateProxyMiddleware.mock.calls[0] as [ (pathname: string, req: Partial) => boolean, - ProxyMiddlewareConfig, + Options, ]; expect(filter('', { method: 'GET', headers: {} })).toBe(true); expect(filter('', { method: 'POST', headers: {} })).toBe(true); @@ -129,7 +123,7 @@ describe('buildMiddleware', () => { const [filter, fullConfig] = mockCreateProxyMiddleware.mock.calls[0] as [ (pathname: string, req: Partial) => boolean, - ProxyMiddlewareConfig, + Options, ]; expect(filter('', { method: 'GET', headers: {} })).toBe(true); expect(filter('', { method: 'POST', headers: {} })).toBe(false); @@ -254,8 +248,7 @@ describe('buildMiddleware', () => { expect(createProxyMiddleware).toHaveBeenCalledTimes(1); - const config = mockCreateProxyMiddleware.mock - .calls[0][1] as ProxyMiddlewareConfig; + const config = mockCreateProxyMiddleware.mock.calls[0][1] as Options; const testClientResponse = { headers: { @@ -275,8 +268,8 @@ describe('buildMiddleware', () => { config.onProxyRes!( testClientResponse as http.IncomingMessage, - {} as http.IncomingMessage, - {} as http.ServerResponse, + {} as Request, + {} as Response, ); expect(Object.keys(testClientResponse.headers!)).toEqual([ @@ -298,8 +291,7 @@ describe('buildMiddleware', () => { expect(createProxyMiddleware).toHaveBeenCalledTimes(1); - const config = mockCreateProxyMiddleware.mock - .calls[0][1] as ProxyMiddlewareConfig; + const config = mockCreateProxyMiddleware.mock.calls[0][1] as Options; const testClientResponse = { headers: { @@ -313,8 +305,8 @@ describe('buildMiddleware', () => { config.onProxyRes!( testClientResponse as http.IncomingMessage, - {} as http.IncomingMessage, - {} as http.ServerResponse, + {} as Request, + {} as Response, ); expect(Object.keys(testClientResponse.headers!)).toEqual(['set-cookie']); diff --git a/plugins/proxy-backend/src/service/router.ts b/plugins/proxy-backend/src/service/router.ts index c3b1d056db..8957d4e8ce 100644 --- a/plugins/proxy-backend/src/service/router.ts +++ b/plugins/proxy-backend/src/service/router.ts @@ -17,9 +17,10 @@ import { Config } from '@backstage/config'; import express from 'express'; import Router from 'express-promise-router'; -import createProxyMiddleware, { - Config as ProxyMiddlewareConfig, - Proxy, +import { + createProxyMiddleware, + Options, + RequestHandler, } from 'http-proxy-middleware'; import { Logger } from 'winston'; import http from 'http'; @@ -52,7 +53,7 @@ export interface RouterOptions { discovery: PluginEndpointDiscovery; } -export interface ProxyConfig extends ProxyMiddlewareConfig { +export interface ProxyConfig extends Options { allowedMethods?: string[]; allowedHeaders?: string[]; } @@ -64,14 +65,17 @@ export function buildMiddleware( logger: Logger, route: string, config: string | ProxyConfig, -): Proxy { +): RequestHandler { const fullConfig = typeof config === 'string' ? { target: config } : { ...config }; // Validate that target is a valid URL. + if (typeof fullConfig.target !== 'string') { + throw new Error(`Proxy target must be a string`); + } try { // eslint-disable-next-line no-new - new URL(fullConfig.target!); + new URL(fullConfig.target! as string); } catch { throw new Error( `Proxy target is not a valid URL: ${fullConfig.target ?? ''}`, @@ -131,7 +135,7 @@ export function buildMiddleware( // 2. Only permit the allowed HTTP methods if configured // // We are filtering the proxy request headers here rather than in - // `onProxyReq` becuase when global-agent is enabled then `onProxyReq` + // `onProxyReq` because when global-agent is enabled then `onProxyReq` // fires _after_ the agent has already sent the headers to the proxy // target, causing a ERR_HTTP_HEADERS_SENT crash const filter = (_pathname: string, req: http.IncomingMessage): boolean => { diff --git a/yarn.lock b/yarn.lock index f8ec474142..3437ae6a98 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6182,7 +6182,7 @@ dependencies: "@types/node" "*" -"@types/http-proxy-middleware@*", "@types/http-proxy-middleware@^0.19.3": +"@types/http-proxy-middleware@^0.19.3": version "0.19.3" resolved "https://registry.npmjs.org/@types/http-proxy-middleware/-/http-proxy-middleware-0.19.3.tgz#b2eb96fbc0f9ac7250b5d9c4c53aade049497d03" integrity sha512-lnBTx6HCOUeIJMLbI/LaL5EmdKLhczJY5oeXZpX/cXE4rRqb3RmV7VcMpiEfYkmTjipv3h7IAyIINe4plEv7cA== @@ -7025,27 +7025,16 @@ resolved "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.0.tgz#215c231dff736d5ba92410e6d602050cce7e273f" integrity sha512-eQ9qFW/fhfGJF8WKHGEHZEyVWfZxrT+6CLIJGBcZPfxUh/+BnEj+UCGYMlr9qZuX/2AltsvwrGqp0LhEW8D0zQ== -"@types/webpack-dev-server@*": - version "3.11.1" - resolved "https://registry.npmjs.org/@types/webpack-dev-server/-/webpack-dev-server-3.11.1.tgz#f8f4dac1da226d530bd15a1d5dc34b23ba766ccb" - integrity sha512-rIb+LtUkKnh7+oIJm3WiMJONd71Q0lZuqGLcSqhZ5qjN9gV/CNmZe7Bai+brnBPZ/KVYOsr+4bFLiNZwjBicLw== +"@types/webpack-dev-server@*", "@types/webpack-dev-server@^3.11.0": + version "3.11.4" + resolved "https://registry.npmjs.org/@types/webpack-dev-server/-/webpack-dev-server-3.11.4.tgz#90d47dd660b696d409431ab8c1e9fa3615103a07" + integrity sha512-DCKORHjqNNVuMIDWFrlljftvc9CL0+09p3l7lBpb8dRqgN5SmvkWCY4MPKxoI6wJgdRqohmoNbptkxqSKAzLRg== dependencies: "@types/connect-history-api-fallback" "*" "@types/express" "*" - "@types/http-proxy-middleware" "*" "@types/serve-static" "*" - "@types/webpack" "*" - -"@types/webpack-dev-server@3.11.0": - version "3.11.0" - resolved "https://registry.npmjs.org/@types/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz#bcc3b85e7dc6ac2db25330610513f2228c2fcfb2" - integrity sha512-3+86AgSzl18n5P1iUP9/lz3G3GMztCp+wxdDvVuNhx1sr1jE79GpYfKHL8k+Vht3N74K2n98CuAEw4YPJCYtDA== - dependencies: - "@types/connect-history-api-fallback" "*" - "@types/express" "*" - "@types/http-proxy-middleware" "*" - "@types/serve-static" "*" - "@types/webpack" "*" + "@types/webpack" "^4" + http-proxy-middleware "^1.0.0" "@types/webpack-env@^1.15.2", "@types/webpack-env@^1.15.3": version "1.16.0" @@ -15181,6 +15170,17 @@ http-proxy-middleware@0.19.1: lodash "^4.17.11" micromatch "^3.1.10" +http-proxy-middleware@^1.0.0: + version "1.3.1" + resolved "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-1.3.1.tgz#43700d6d9eecb7419bf086a128d0f7205d9eb665" + integrity sha512-13eVVDYS4z79w7f1+NPllJtOQFx/FdUW4btIvVRMaRlUY9VGstAbo5MOhLEuUgZFRHn3x50ufn25zkj/boZnEg== + dependencies: + "@types/http-proxy" "^1.17.5" + http-proxy "^1.18.1" + is-glob "^4.0.1" + is-plain-obj "^3.0.0" + micromatch "^4.0.2" + http-proxy-middleware@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.0.tgz#20d1ac3409199c83e5d0383ba6436b04e7acb9fe"