From 1efb1298d58148c4060f00b3713812f4d6f5b90c Mon Sep 17 00:00:00 2001 From: Peter Amstutz Date: Thu, 1 Oct 2020 16:16:01 -0400 Subject: [PATCH 1/1] 16927: Consistently strip trailing slashes from config URLs This happened for the local cluster config, but not for federated clusters. As a result, federated search was completely broken. This fixes it. Arvados-DCO-1.1-Signed-off-by: Peter Amstutz --- src/common/config.ts | 11 ++++++----- src/store/auth/auth-action-session.ts | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/common/config.ts b/src/common/config.ts index 0f935602..1504cdcc 100644 --- a/src/common/config.ts +++ b/src/common/config.ts @@ -104,7 +104,8 @@ export class Config { apiRevision: number; } -export const buildConfig = (clusterConfigJSON: ClusterConfigJSON): Config => { +export const buildConfig = (clusterConfig: ClusterConfigJSON): Config => { + const clusterConfigJSON = removeTrailingSlashes(clusterConfig); const config = new Config(); config.rootUrl = clusterConfigJSON.Services.Controller.ExternalURL; config.baseUrl = `${config.rootUrl}/${ARVADOS_API_PATH}`; @@ -138,7 +139,7 @@ const removeTrailingSlashes = (config: ClusterConfigJSON): ClusterConfigJSON => svcs[s].ExternalURL = svcs[s].ExternalURL.replace(/\/+$/, ''); } }); - return {...config, Services: svcs}; + return { ...config, Services: svcs }; }; export const fetchConfig = () => { @@ -154,9 +155,9 @@ export const fetchConfig = () => { throw new Error(`Unable to start Workbench. API_HOST is undefined in ${WORKBENCH_CONFIG_URL} or the environment.`); } return Axios.get(getClusterConfigURL(workbenchConfig.API_HOST)).then(async response => { - const clusterConfigJSON = removeTrailingSlashes(response.data); - const apiRevision = await getApiRevision(clusterConfigJSON.Services.Controller.ExternalURL); - const config = { ...buildConfig(clusterConfigJSON), apiRevision }; + const apiRevision = await getApiRevision(response.data.Services.Controller.ExternalURL.replace(/\/+$/, '')); + const config = { ...buildConfig(response.data), apiRevision }; + const clusterConfigJSON = config.clusterConfig; const warnLocalConfig = (varName: string) => console.warn( `A value for ${varName} was found in ${WORKBENCH_CONFIG_URL}. To use the Arvados centralized configuration instead, \ remove the entire ${varName} entry from ${WORKBENCH_CONFIG_URL}`); diff --git a/src/store/auth/auth-action-session.ts b/src/store/auth/auth-action-session.ts index fc35ff88..4568d77e 100644 --- a/src/store/auth/auth-action-session.ts +++ b/src/store/auth/auth-action-session.ts @@ -44,7 +44,7 @@ const getClusterConfig = async (origin: string): Promise => { // Try the new public config endpoint try { const config = (await Axios.get(`${origin}/${CLUSTER_CONFIG_PATH}`)).data; - return {...buildConfig(config), apiRevision: configFromDD ? configFromDD.apiRevision : 0}; + return { ...buildConfig(config), apiRevision: configFromDD ? configFromDD.apiRevision : 0 }; } catch { } // Fall back to discovery document -- 2.30.2