From eeb3f801fddf70b213ffa01f4ecd11c51f4ad182 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Thu, 15 Jun 2023 13:49:35 +0200 Subject: [PATCH] backend-common: make HostDiscovery strip trailing slashes in backend.baseUrl Signed-off-by: Patrik Oldsberg --- .changeset/itchy-glasses-smoke.md | 5 +++++ .../src/discovery/HostDiscovery.test.ts | 18 ++++++++++++++++++ .../src/discovery/HostDiscovery.ts | 4 +++- 3 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 .changeset/itchy-glasses-smoke.md diff --git a/.changeset/itchy-glasses-smoke.md b/.changeset/itchy-glasses-smoke.md new file mode 100644 index 0000000000..042909df37 --- /dev/null +++ b/.changeset/itchy-glasses-smoke.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-common': patch +--- + +`HostDiscovery` now strips trailing slashes in the `backend.baseUrl` config. diff --git a/packages/backend-common/src/discovery/HostDiscovery.test.ts b/packages/backend-common/src/discovery/HostDiscovery.test.ts index 577da3a679..4e6aff5853 100644 --- a/packages/backend-common/src/discovery/HostDiscovery.test.ts +++ b/packages/backend-common/src/discovery/HostDiscovery.test.ts @@ -36,6 +36,24 @@ describe('HostDiscovery', () => { ); }); + it('strips trailing slashes in config', async () => { + const discovery = HostDiscovery.fromConfig( + new ConfigReader({ + backend: { + baseUrl: 'http://localhost:40//', + listen: { port: 80, host: 'localhost' }, + }, + }), + ); + + await expect(discovery.getBaseUrl('catalog')).resolves.toBe( + 'http://localhost:80/api/catalog', + ); + await expect(discovery.getExternalBaseUrl('catalog')).resolves.toBe( + 'http://localhost:40/api/catalog', + ); + }); + it('can configure the base path', async () => { const discovery = HostDiscovery.fromConfig( new ConfigReader({ diff --git a/packages/backend-common/src/discovery/HostDiscovery.ts b/packages/backend-common/src/discovery/HostDiscovery.ts index 1c72445443..89b6404143 100644 --- a/packages/backend-common/src/discovery/HostDiscovery.ts +++ b/packages/backend-common/src/discovery/HostDiscovery.ts @@ -57,7 +57,9 @@ export class HostDiscovery implements PluginEndpointDiscovery { */ static fromConfig(config: Config, options?: { basePath?: string }) { const basePath = options?.basePath ?? '/api'; - const externalBaseUrl = config.getString('backend.baseUrl'); + const externalBaseUrl = config + .getString('backend.baseUrl') + .replace(/\/+$/, ''); const { listen: { host: listenHost = '::', port: listenPort },