diff --git a/CHANGELOG.md b/CHANGELOG.md index 3b2abfe2c19..facd1228a11 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -80,6 +80,7 @@ Inspired from [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) - [BUG][MD]Expose picker using function in data source management plugin setup([#6030](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/6030)) - [BUG][Multiple Datasource] Fix data source filter bug and add tests ([#6152](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/6152)) - [BUG][Multiple Datasource] Fix obsolete snapshots for test within data source management plugin ([#6185](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/6185)) +- [Workspace] Add base path when parse url in http service ([#6233](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/6233)) ### 🚞 Infrastructure diff --git a/src/core/public/http/http_service.test.ts b/src/core/public/http/http_service.test.ts index 5671064e4c5..73010e1c5a9 100644 --- a/src/core/public/http/http_service.test.ts +++ b/src/core/public/http/http_service.test.ts @@ -83,21 +83,22 @@ describe('#setup()', () => { expect(setupResult.basePath.get()).toEqual(''); }); - it('setup basePath with workspaceId provided in window.location.href', () => { + it('setup basePath with workspaceId provided in window.location.href and basePath present in injectedMetadata', () => { const windowSpy = jest.spyOn(window, 'window', 'get'); windowSpy.mockImplementation( () => ({ location: { - href: 'http://localhost/w/workspaceId/app', + href: 'http://localhost/base_path/w/workspaceId/app', }, } as any) ); const injectedMetadata = injectedMetadataServiceMock.createSetupContract(); + injectedMetadata.getBasePath.mockReturnValue('/base_path'); const fatalErrors = fatalErrorsServiceMock.createSetupContract(); const httpService = new HttpService(); const setupResult = httpService.setup({ fatalErrors, injectedMetadata }); - expect(setupResult.basePath.get()).toEqual('/w/workspaceId'); + expect(setupResult.basePath.get()).toEqual('/base_path/w/workspaceId'); windowSpy.mockRestore(); }); }); diff --git a/src/core/public/http/http_service.ts b/src/core/public/http/http_service.ts index 6832703c792..c1a538dfca1 100644 --- a/src/core/public/http/http_service.ts +++ b/src/core/public/http/http_service.ts @@ -53,7 +53,7 @@ export class HttpService implements CoreService { public setup({ injectedMetadata, fatalErrors }: HttpDeps): HttpSetup { const opensearchDashboardsVersion = injectedMetadata.getOpenSearchDashboardsVersion(); let clientBasePath = ''; - const workspaceId = getWorkspaceIdFromUrl(window.location.href); + const workspaceId = getWorkspaceIdFromUrl(window.location.href, injectedMetadata.getBasePath()); if (workspaceId) { clientBasePath = `${WORKSPACE_PATH_PREFIX}/${workspaceId}`; } diff --git a/src/core/utils/workspace.test.ts b/src/core/utils/workspace.test.ts index a852ddcc519..722bbca566e 100644 --- a/src/core/utils/workspace.test.ts +++ b/src/core/utils/workspace.test.ts @@ -8,11 +8,11 @@ import { httpServiceMock } from '../public/mocks'; describe('#getWorkspaceIdFromUrl', () => { it('return workspace when there is a match', () => { - expect(getWorkspaceIdFromUrl('http://localhost/w/foo')).toEqual('foo'); + expect(getWorkspaceIdFromUrl('http://localhost/w/foo', '')).toEqual('foo'); }); it('return empty when there is not a match', () => { - expect(getWorkspaceIdFromUrl('http://localhost/w2/foo')).toEqual(''); + expect(getWorkspaceIdFromUrl('http://localhost/w2/foo', '')).toEqual(''); }); it('return workspace when there is a match with basePath provided', () => { diff --git a/src/core/utils/workspace.ts b/src/core/utils/workspace.ts index c383967483a..f16b28423b6 100644 --- a/src/core/utils/workspace.ts +++ b/src/core/utils/workspace.ts @@ -6,7 +6,7 @@ import { WORKSPACE_PATH_PREFIX } from './constants'; import { IBasePath } from '../public'; -export const getWorkspaceIdFromUrl = (url: string, basePath?: string): string => { +export const getWorkspaceIdFromUrl = (url: string, basePath: string): string => { const regexp = new RegExp(`^${basePath || ''}\/w\/([^\/]*)`); const urlObject = new URL(url); const matchedResult = urlObject.pathname.match(regexp); diff --git a/src/plugins/workspace/public/plugin.ts b/src/plugins/workspace/public/plugin.ts index 8a5bf9b125f..f0c82bda90b 100644 --- a/src/plugins/workspace/public/plugin.ts +++ b/src/plugins/workspace/public/plugin.ts @@ -33,10 +33,6 @@ export class WorkspacePlugin implements Plugin<{}, {}, {}> { } } - private getWorkspaceIdFromURL(basePath?: string): string | null { - return getWorkspaceIdFromUrl(window.location.href, basePath); - } - public async setup(core: CoreSetup) { const workspaceClient = new WorkspaceClient(core.http, core.workspaces); await workspaceClient.init(); @@ -44,7 +40,10 @@ export class WorkspacePlugin implements Plugin<{}, {}, {}> { /** * Retrieve workspace id from url */ - const workspaceId = this.getWorkspaceIdFromURL(core.http.basePath.getBasePath()); + const workspaceId = getWorkspaceIdFromUrl( + window.location.href, + core.http.basePath.getBasePath() + ); if (workspaceId) { const result = await workspaceClient.enterWorkspace(workspaceId); diff --git a/src/plugins/workspace/server/plugin.ts b/src/plugins/workspace/server/plugin.ts index f5b7da6430e..e846470210c 100644 --- a/src/plugins/workspace/server/plugin.ts +++ b/src/plugins/workspace/server/plugin.ts @@ -27,7 +27,10 @@ export class WorkspacePlugin implements Plugin { - const workspaceId = getWorkspaceIdFromUrl(request.url.toString()); + const workspaceId = getWorkspaceIdFromUrl( + request.url.toString(), + '' // No need to pass basePath here because the request.url will be rewrite by registerOnPreRouting method in `src/core/server/http/http_server.ts` + ); if (workspaceId) { const requestUrl = new URL(request.url.toString());