From f0a975fc090b4d0ab8cfaeb652b58bc4b9450c30 Mon Sep 17 00:00:00 2001 From: "Grot (@grafanabot)" <43478413+grafanabot@users.noreply.github.com> Date: Thu, 10 Jun 2021 05:33:42 -0400 Subject: [PATCH] Routing: Remove subPath only at start of href (#35416) (#35485) * fix(routing): remove baseUrl only if at start of url * test(routing): add subdirectory suburl tests for stripBaseFromUrl * test(routing): add absolute url check to fix tests, add extra tests (cherry picked from commit 8b2ee06f3cd7fce5979729668411fc58d606bf85) Co-authored-by: Jack Westbrook --- .../grafana-data/src/utils/location.test.ts | 28 +++++++++++++++---- packages/grafana-data/src/utils/location.ts | 12 +++++--- 2 files changed, 31 insertions(+), 9 deletions(-) diff --git a/packages/grafana-data/src/utils/location.test.ts b/packages/grafana-data/src/utils/location.test.ts index c06dc8588f1..a496cb4a6f1 100644 --- a/packages/grafana-data/src/utils/location.test.ts +++ b/packages/grafana-data/src/utils/location.test.ts @@ -34,12 +34,30 @@ describe('locationUtil', () => { }); }); test('relative url', () => { - const urlWithoutMaster = locationUtil.stripBaseFromUrl('/subUrl/grafana/'); - expect(urlWithoutMaster).toBe('/grafana/'); + const urlWithoutMaster = locationUtil.stripBaseFromUrl('/subUrl/thisShouldRemain/'); + expect(urlWithoutMaster).toBe('/thisShouldRemain/'); }); - test('absolute url url', () => { - const urlWithoutMaster = locationUtil.stripBaseFromUrl('http://www.domain.com:9877/subUrl/grafana/'); - expect(urlWithoutMaster).toBe('/grafana/'); + test('relative url with multiple subUrl in path', () => { + const urlWithoutMaster = locationUtil.stripBaseFromUrl('/subUrl/thisShouldRemain/subUrl/'); + expect(urlWithoutMaster).toBe('/thisShouldRemain/subUrl/'); + }); + test('relative url with subdirectory subUrl', () => { + const urlWithoutMaster = locationUtil.stripBaseFromUrl('/thisShouldRemain/subUrl/'); + expect(urlWithoutMaster).toBe('/thisShouldRemain/subUrl/'); + }); + test('absolute url', () => { + const urlWithoutMaster = locationUtil.stripBaseFromUrl('http://www.domain.com:9877/subUrl/thisShouldRemain/'); + expect(urlWithoutMaster).toBe('/thisShouldRemain/'); + }); + test('absolute url with multiple subUrl in path', () => { + const urlWithoutMaster = locationUtil.stripBaseFromUrl( + 'http://www.domain.com:9877/subUrl/thisShouldRemain/subUrl/' + ); + expect(urlWithoutMaster).toBe('/thisShouldRemain/subUrl/'); + }); + test('absolute url with subdirectory subUrl', () => { + const urlWithoutMaster = locationUtil.stripBaseFromUrl('http://www.domain.com:9877/thisShouldRemain/subUrl/'); + expect(urlWithoutMaster).toBe('/thisShouldRemain/subUrl/'); }); }); diff --git a/packages/grafana-data/src/utils/location.ts b/packages/grafana-data/src/utils/location.ts index 9d3d61048d0..f252ac9e660 100644 --- a/packages/grafana-data/src/utils/location.ts +++ b/packages/grafana-data/src/utils/location.ts @@ -17,13 +17,17 @@ const stripBaseFromUrl = (url: string): string => { const isAbsoluteUrl = url.startsWith('http'); let segmentToStrip = appSubUrl; - if (isAbsoluteUrl || !url.startsWith('/')) { + if (!url.startsWith('/')) { segmentToStrip = `${window.location.origin}${appSubUrl}`; } - return url.length > 0 && url.indexOf(segmentToStrip) !== -1 - ? url.slice(segmentToStrip.length - stripExtraChars) - : url; + if (isAbsoluteUrl) { + segmentToStrip = url.startsWith(`${window.location.origin}${appSubUrl}`) + ? `${window.location.origin}${appSubUrl}` + : `${window.location.origin}`; + } + + return url.length > 0 && url.indexOf(segmentToStrip) === 0 ? url.slice(segmentToStrip.length - stripExtraChars) : url; }; /**