X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/6fdd4a4d609cf8fa459786f42eb337f8da6a5afa..42ec7892e74f6d9d19f2f0155830565f447a861f:/src/store/auth/auth-action.ts diff --git a/src/store/auth/auth-action.ts b/src/store/auth/auth-action.ts index 8fb5c5e9d2..15fe3d4d59 100644 --- a/src/store/auth/auth-action.ts +++ b/src/store/auth/auth-action.ts @@ -15,12 +15,13 @@ 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'; export const authActions = unionize({ LOGIN: {}, LOGOUT: ofType<{ deleteLinkData: boolean }>(), - CONFIG: ofType<{ config: Config }>(), - INIT: ofType<{ user: User, token: string }>(), + SET_CONFIG: ofType<{ config: Config }>(), + INIT_USER: ofType<{ user: User, token: string }>(), USER_DETAILS_REQUEST: {}, USER_DETAILS_SUCCESS: ofType(), SET_SSH_KEYS: ofType(), @@ -38,23 +39,30 @@ export const initAuth = (config: Config) => (dispatch: Dispatch, getState: () => // Cancel any link account ops in progress unless the user has // just logged in or there has been a successful link operation const data = services.linkAccountService.getLinkOpStatus(); - if (!matchTokenRoute(location.pathname) && (!matchFedTokenRoute(location.pathname)) && data === undefined) { + if (!matchTokenRoute(location.pathname) && + (!matchFedTokenRoute(location.pathname)) && data === undefined) { dispatch(cancelLinking()).then(() => { dispatch(init(config)); }); - } - else { + } else { dispatch(init(config)); } }; const init = (config: Config) => (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => { + const remoteHosts = () => getState().auth.remoteHosts; const token = services.authService.getApiToken(); let homeCluster = services.authService.getHomeCluster(); if (homeCluster && !config.remoteHosts[homeCluster]) { homeCluster = undefined; } - dispatch(authActions.CONFIG({ config })); + dispatch(authActions.SET_CONFIG({ config })); + Object.keys(remoteHosts()).forEach((remoteUuid: string) => { + const remoteHost = remoteHosts()[remoteUuid]; + if (remoteUuid !== config.uuidPrefix) { + dispatch(addRemoteConfig(remoteHost)); + } + }); dispatch(authActions.SET_HOME_CLUSTER(config.loginCluster || homeCluster || config.uuidPrefix)); if (token && token !== "undefined") { @@ -77,7 +85,9 @@ export const saveApiToken = (token: string) => (dispatch: Dispatch, getState: () const svc = createServices(config, { progressFn: () => { }, errorFn: () => { } }); setAuthorizationHeader(svc, token); return svc.authService.getUserDetails().then((user: User) => { - dispatch(authActions.INIT({ user, token })); + dispatch(authActions.INIT_USER({ user, token })); + }).catch(() => { + dispatch(authActions.LOGOUT({ deleteLinkData: false })); }); }; @@ -87,8 +97,8 @@ export const login = (uuidPrefix: string, homeCluster: string, loginCluster: str dispatch(authActions.LOGIN()); }; -export const logout = (deleteLinkData: boolean = false) => (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => { - dispatch(authActions.LOGOUT({ deleteLinkData })); -}; +export const logout = (deleteLinkData: boolean = false) => + (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => + dispatch(authActions.LOGOUT({ deleteLinkData })); export type AuthAction = UnionOf;