From 5121e32722ae94b2336f08940cee5ec281aeb6e0 Mon Sep 17 00:00:00 2001 From: owensmallwood Date: Thu, 15 Sep 2022 09:46:11 -0600 Subject: [PATCH] When generating the pubdash url, use the base url from the Grafana config. This allows the url generation to work in the case that Grafana is hosted on a subpath. (#55204) Support subpaths when generating public dashboard url --- .../ShareModal/SharePublicDashboardUtils.test.tsx | 12 +++++++++--- .../ShareModal/SharePublicDashboardUtils.ts | 11 ++++++++++- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/public/app/features/dashboard/components/ShareModal/SharePublicDashboardUtils.test.tsx b/public/app/features/dashboard/components/ShareModal/SharePublicDashboardUtils.test.tsx index 1eb789529ee..fcb0593ab8e 100644 --- a/public/app/features/dashboard/components/ShareModal/SharePublicDashboardUtils.test.tsx +++ b/public/app/features/dashboard/components/ShareModal/SharePublicDashboardUtils.test.tsx @@ -1,5 +1,7 @@ import { VariableModel } from 'app/features/variables/types'; +import { updateConfig } from '../../../../core/config'; + import { PublicDashboard, dashboardHasTemplateVariables, @@ -23,9 +25,13 @@ describe('dashboardHasTemplateVariables', () => { }); describe('generatePublicDashboardUrl', () => { - it('has the right uid', () => { - let pubdash = { accessToken: 'abcd1234' } as PublicDashboard; - expect(generatePublicDashboardUrl(pubdash)).toEqual(`${window.location.origin}/public-dashboards/abcd1234`); + it('uses the grafana config appUrl to generate the url', () => { + const appUrl = 'http://localhost/'; + const accessToken = 'abcd1234'; + updateConfig({ appUrl }); + let pubdash = { accessToken } as PublicDashboard; + + expect(generatePublicDashboardUrl(pubdash)).toEqual(`${appUrl}public-dashboards/${accessToken}`); }); }); diff --git a/public/app/features/dashboard/components/ShareModal/SharePublicDashboardUtils.ts b/public/app/features/dashboard/components/ShareModal/SharePublicDashboardUtils.ts index 91ea0b57ca9..b62baee71f2 100644 --- a/public/app/features/dashboard/components/ShareModal/SharePublicDashboardUtils.ts +++ b/public/app/features/dashboard/components/ShareModal/SharePublicDashboardUtils.ts @@ -1,5 +1,6 @@ import { getBackendSrv } from '@grafana/runtime'; import { notifyApp } from 'app/core/actions'; +import { getConfig } from 'app/core/config'; import { createSuccessNotification } from 'app/core/copy/appNotification'; import { VariableModel } from 'app/features/variables/types'; import { dispatch } from 'app/store/store'; @@ -61,6 +62,14 @@ export const publicDashboardPersisted = (publicDashboard: PublicDashboard): bool return publicDashboard.uid !== '' && publicDashboard.uid !== undefined; }; +/** + * Generate the public dashboard url. Uses the appUrl from the Grafana boot config, so urls will also be correct + * when Grafana is hosted on a subpath. + * + * All app urls from the Grafana boot config end with a slash. + * + * @param publicDashboard + */ export const generatePublicDashboardUrl = (publicDashboard: PublicDashboard): string => { - return `${window.location.origin}/public-dashboards/${publicDashboard.accessToken}`; + return `${getConfig().appUrl}public-dashboards/${publicDashboard.accessToken}`; };