Fix session initialization
authorDaniel Kos <daniel.kos@contractors.roche.com>
Tue, 18 Dec 2018 10:05:52 +0000 (11:05 +0100)
committerDaniel Kos <daniel.kos@contractors.roche.com>
Tue, 18 Dec 2018 10:05:52 +0000 (11:05 +0100)
Feature #14478

Arvados-DCO-1.1-Signed-off-by: Daniel Kos <daniel.kos@contractors.roche.com>

src/index.tsx
src/store/auth/auth-action-session.ts
src/store/auth/auth-action.ts
src/views-components/api-token/api-token.tsx

index 1b7a281d6a81798f4f807ca37a643d332ea74ff0..1561c3ff1d4b6a1b2af0edc968df003def00c84d 100644 (file)
@@ -109,7 +109,7 @@ fetchConfig()
         store.dispatch(loadVocabulary);
         store.dispatch(loadFileViewersConfig);
 
-        const TokenComponent = (props: any) => <ApiToken authService={services.authService} {...props} />;
+        const TokenComponent = (props: any) => <ApiToken authService={services.authService} config={config} {...props} />;
         const MainPanelComponent = (props: any) => <MainPanel {...props} />;
 
         const App = () =>
index 83e98e968afbc0b47061a60313cf33b96a06da30..e5e2e575cc71f113fe696f9d6ea06eda0bf50d9e 100644 (file)
@@ -12,7 +12,7 @@ import { authActions } from "~/store/auth/auth-action";
 import { Config, DISCOVERY_URL } from "~/common/config";
 import { Session, SessionStatus } from "~/models/session";
 import { progressIndicatorActions } from "~/store/progress-indicator/progress-indicator-actions";
-import { UserDetailsResponse } from "~/services/auth-service/auth-service";
+import { AuthService, UserDetailsResponse } from "~/services/auth-service/auth-service";
 import * as jsSHA from "jssha";
 
 const getRemoteHostBaseUrl = async (remoteHost: string): Promise<string | null> => {
@@ -197,6 +197,13 @@ export const toggleSession = (session: Session) =>
         services.authService.saveSessions(getState().auth.sessions);
     };
 
+export const initSessions = (authService: AuthService, config: Config, user: User) =>
+    (dispatch: Dispatch<any>) => {
+        const sessions = authService.buildSessions(config, user);
+        authService.saveSessions(sessions);
+        dispatch(authActions.SET_SESSIONS(sessions));
+    };
+
 export const loadSiteManagerPanel = () =>
     async (dispatch: Dispatch<any>) => {
         try {
index ed998ab554fa66f2efe14849dae996bf0dc4ee11..6c54a5c9cf86ad0530188785546f19965b37b281 100644 (file)
@@ -11,6 +11,7 @@ import { SshKeyResource } from '~/models/ssh-key';
 import { User } from "~/models/user";
 import { Session } from "~/models/session";
 import { Config } from '~/common/config';
+import { initSessions } from "~/store/auth/auth-action-session";
 
 export const authActions = unionize({
     SAVE_API_TOKEN: ofType<string>(),
@@ -49,10 +50,8 @@ export const initAuth = (config: Config) => (dispatch: Dispatch, getState: () =>
     }
     if (token && user) {
         dispatch(authActions.INIT({ user, token }));
+        dispatch<any>(initSessions(services.authService, config, user));
     }
-    const sessions = services.authService.buildSessions(config, user);
-    services.authService.saveSessions(sessions);
-    dispatch(authActions.SET_SESSIONS(sessions));
 };
 
 export const saveApiToken = (token: string) => (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
index 718d35891e1cee22735c523821a8725313abb86c..43c55a92c9addbd8031fd537b5c59528b620e7ca 100644 (file)
@@ -5,13 +5,17 @@
 import { RouteProps } from "react-router";
 import * as React from "react";
 import { connect, DispatchProp } from "react-redux";
-import { getUserDetails, saveApiToken } from "~/store/auth/auth-action";
+import { authActions, getUserDetails, saveApiToken } from "~/store/auth/auth-action";
 import { getUrlParameter } from "~/common/url";
 import { AuthService } from "~/services/auth-service/auth-service";
 import { navigateToRootProject } from "~/store/navigation/navigation-action";
+import { User } from "~/models/user";
+import { Config } from "~/common/config";
+import { initSessions } from "~/store/auth/auth-action-session";
 
 interface ApiTokenProps {
     authService: AuthService;
+    config: Config;
 }
 
 export const ApiToken = connect()(
@@ -20,7 +24,9 @@ export const ApiToken = connect()(
             const search = this.props.location ? this.props.location.search : "";
             const apiToken = getUrlParameter(search, 'api_token');
             this.props.dispatch(saveApiToken(apiToken));
-            this.props.dispatch<any>(getUserDetails()).finally(() => {
+            this.props.dispatch<any>(getUserDetails()).then((user: User) => {
+                this.props.dispatch(initSessions(this.props.authService, this.props.config, user));
+            }).finally(() => {
                 this.props.dispatch(navigateToRootProject);
             });
         }