X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/f0a64666816383d2641d5fa7ea22019441ac4464..42ec7892e74f6d9d19f2f0155830565f447a861f:/src/store/auth/auth-action.ts diff --git a/src/store/auth/auth-action.ts b/src/store/auth/auth-action.ts index 1d8a01c6f6..15fe3d4d59 100644 --- a/src/store/auth/auth-action.ts +++ b/src/store/auth/auth-action.ts @@ -15,6 +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'; export const authActions = unionize({ LOGIN: {}, @@ -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.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") { @@ -78,6 +86,8 @@ export const saveApiToken = (token: string) => (dispatch: Dispatch, getState: () setAuthorizationHeader(svc, token); return svc.authService.getUserDetails().then((user: User) => { 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;