From 5eac24f1c4aca6227b9ead85a075315e98e4fc24 Mon Sep 17 00:00:00 2001 From: Lucas Di Pentima Date: Mon, 26 Apr 2021 16:47:55 -0300 Subject: [PATCH] 17568: Fixes the bug by requesting token's data to the issuer cluster. Arvados-DCO-1.1-Signed-off-by: Lucas Di Pentima --- src/store/auth/auth-action-session.ts | 2 +- src/store/auth/auth-action.ts | 21 ++++++++++++++------- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/store/auth/auth-action-session.ts b/src/store/auth/auth-action-session.ts index a02f922d..d588ce1f 100644 --- a/src/store/auth/auth-action-session.ts +++ b/src/store/auth/auth-action-session.ts @@ -56,7 +56,7 @@ const getClusterConfig = async (origin: string, apiClient: AxiosInstance): Promi return null; }; -const getRemoteHostConfig = async (remoteHost: string, useApiClient?: AxiosInstance): Promise => { +export const getRemoteHostConfig = async (remoteHost: string, useApiClient?: AxiosInstance): Promise => { const apiClient = useApiClient || Axios.create({ headers: {} }); let url = remoteHost; diff --git a/src/store/auth/auth-action.ts b/src/store/auth/auth-action.ts index 8c44aec4..cca39bb0 100644 --- a/src/store/auth/auth-action.ts +++ b/src/store/auth/auth-action.ts @@ -15,7 +15,7 @@ import { createServices, setAuthorizationHeader } from "~/services/services"; import { cancelLinking } from '~/store/link-account-panel/link-account-panel-actions'; import { progressIndicatorActions } from "~/store/progress-indicator/progress-indicator-actions"; import { WORKBENCH_LOADING_SCREEN } from '~/store/workbench/workbench-actions'; -import { addRemoteConfig } from './auth-action-session'; +import { addRemoteConfig, getRemoteHostConfig } from './auth-action-session'; import { getTokenV2 } from '~/models/api-client-authorization'; export const authActions = unionize({ @@ -68,11 +68,9 @@ const init = (config: Config) => async (dispatch: Dispatch, getState: () => Root if (token && token !== "undefined") { dispatch(progressIndicatorActions.START_WORKING(WORKBENCH_LOADING_SCREEN)); try { - await dispatch(saveApiToken(token)); // .then(() => { - await dispatch(progressIndicatorActions.STOP_WORKING(WORKBENCH_LOADING_SCREEN)); - } catch (e) { - dispatch(progressIndicatorActions.STOP_WORKING(WORKBENCH_LOADING_SCREEN)); - } + await dispatch(saveApiToken(token)); + } catch (e) {} + dispatch(progressIndicatorActions.STOP_WORKING(WORKBENCH_LOADING_SCREEN)); } }; @@ -82,7 +80,16 @@ export const getConfig = (dispatch: Dispatch, getState: () => RootState, service }; export const saveApiToken = (token: string) => async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository): Promise => { - const config = dispatch(getConfig); + let config: any; + const tokenParts = token.split('/'); + const auth = getState().auth; + config = dispatch(getConfig); + + // If federated token, get user & token data from the token issuing cluster + if (tokenParts.length === 3 && tokenParts[1].substring(0, 5) !== auth.localCluster) { + config = await getRemoteHostConfig(auth.remoteHosts[tokenParts[1].substring(0, 5)]); + } + const svc = createServices(config, { progressFn: () => { }, errorFn: () => { } }); setAuthorizationHeader(svc, token); try { -- 2.30.2