[ARVADOS-WORKBENCH2] updated: 1.4.1-88-g63bcd476

Git user git at public.curoverse.com
Tue Nov 5 15:18:15 UTC 2019


Summary of changes:
 src/common/config.ts                               | 28 ++++++++++++----------
 src/store/auth/auth-action.ts                      |  9 ++-----
 .../site-manager-panel/site-manager-panel-root.tsx | 13 ++++++----
 .../site-manager-panel/site-manager-panel.tsx      |  3 ++-
 4 files changed, 29 insertions(+), 24 deletions(-)

       via  63bcd4762a60500b6a445b16b33ea31533fdf25d (commit)
      from  ceb4f50aeca2bb6b0354a7bd96a599b4a14147fe (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.


commit 63bcd4762a60500b6a445b16b33ea31533fdf25d
Author: Peter Amstutz <pamstutz at veritasgenetics.com>
Date:   Tue Nov 5 10:11:48 2019 -0500

    15736: Don't allow user to delete local/federation sessions
    
    Also fix config loading bug where the local config was being
    overwritten by remote cluster config loading which didn't fill in most
    of the fields, now fills in all the fields for remote clusters (but
    also doesn't reload local cluster config redundantly).

diff --git a/src/common/config.ts b/src/common/config.ts
index 47723ae8..7d974342 100644
--- a/src/common/config.ts
+++ b/src/common/config.ts
@@ -70,6 +70,21 @@ export class Config {
     clusterConfig: ClusterConfigJSON;
 }
 
+export const buildConfig = (clusterConfigJSON: ClusterConfigJSON): Config => {
+    const config = new Config();
+    config.rootUrl = clusterConfigJSON.Services.Controller.ExternalURL;
+    config.baseUrl = `${config.rootUrl}/${ARVADOS_API_PATH}`;
+    config.uuidPrefix = clusterConfigJSON.ClusterID;
+    config.websocketUrl = clusterConfigJSON.Services.Websocket.ExternalURL;
+    config.workbench2Url = clusterConfigJSON.Services.Workbench2.ExternalURL;
+    config.workbenchUrl = clusterConfigJSON.Services.Workbench1.ExternalURL;
+    config.keepWebServiceUrl = clusterConfigJSON.Services.WebDAV.ExternalURL;
+    config.loginCluster = clusterConfigJSON.Login.LoginCluster;
+    config.clusterConfig = clusterConfigJSON;
+    mapRemoteHosts(clusterConfigJSON, config);
+    return config;
+};
+
 export const fetchConfig = () => {
     return Axios
         .get<WorkbenchConfig>(WORKBENCH_CONFIG_URL + "?nocache=" + (new Date()).getTime())
@@ -83,8 +98,8 @@ export const fetchConfig = () => {
                 throw new Error(`Unable to start Workbench. API_HOST is undefined in ${WORKBENCH_CONFIG_URL} or the environment.`);
             }
             return Axios.get<ClusterConfigJSON>(getClusterConfigURL(workbenchConfig.API_HOST)).then(response => {
-                const config = new Config();
                 const clusterConfigJSON = response.data;
+                const config = buildConfig(clusterConfigJSON);
                 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}`);
@@ -112,17 +127,6 @@ remove the entire ${varName} entry from ${WORKBENCH_CONFIG_URL}`);
                 }
                 config.vocabularyUrl = vocabularyUrl;
 
-                config.rootUrl = clusterConfigJSON.Services.Controller.ExternalURL;
-                config.baseUrl = `${config.rootUrl}/${ARVADOS_API_PATH}`;
-                config.uuidPrefix = clusterConfigJSON.ClusterID;
-                config.websocketUrl = clusterConfigJSON.Services.Websocket.ExternalURL;
-                config.workbench2Url = clusterConfigJSON.Services.Workbench2.ExternalURL;
-                config.workbenchUrl = clusterConfigJSON.Services.Workbench1.ExternalURL;
-                config.keepWebServiceUrl = clusterConfigJSON.Services.WebDAV.ExternalURL;
-                config.loginCluster = clusterConfigJSON.Login.LoginCluster;
-                config.clusterConfig = clusterConfigJSON;
-                mapRemoteHosts(clusterConfigJSON, config);
-
                 return { config, apiHost: workbenchConfig.API_HOST };
             });
         });
diff --git a/src/store/auth/auth-action.ts b/src/store/auth/auth-action.ts
index 5bac6b19..bfec39be 100644
--- a/src/store/auth/auth-action.ts
+++ b/src/store/auth/auth-action.ts
@@ -10,7 +10,7 @@ import { ServiceRepository } from "~/services/services";
 import { SshKeyResource } from '~/models/ssh-key';
 import { User, UserResource } from "~/models/user";
 import { Session } from "~/models/session";
-import { getClusterConfigURL, Config, ClusterConfigJSON, mapRemoteHosts } from '~/common/config';
+import { getClusterConfigURL, Config, ClusterConfigJSON, buildConfig } from '~/common/config';
 import { initSessions } from "~/store/auth/auth-action-session";
 import { cancelLinking } from '~/store/link-account-panel/link-account-panel-actions';
 import { matchTokenRoute, matchFedTokenRoute } from '~/routes/routes';
@@ -93,12 +93,7 @@ const init = (config: Config) => (dispatch: Dispatch, getState: () => RootState,
     Object.keys(config.remoteHosts).map((k) => {
         Axios.get<ClusterConfigJSON>(getClusterConfigURL(config.remoteHosts[k]))
             .then(response => {
-                const remoteConfig = new Config();
-                remoteConfig.uuidPrefix = response.data.ClusterID;
-                remoteConfig.workbench2Url = response.data.Services.Workbench2.ExternalURL;
-                remoteConfig.loginCluster = response.data.Login.LoginCluster;
-                mapRemoteHosts(response.data, remoteConfig);
-                dispatch(authActions.REMOTE_CLUSTER_CONFIG({ config: remoteConfig }));
+                dispatch(authActions.REMOTE_CLUSTER_CONFIG({ config: buildConfig(response.data) }));
             });
     });
 };
diff --git a/src/views/site-manager-panel/site-manager-panel-root.tsx b/src/views/site-manager-panel/site-manager-panel-root.tsx
index bc2303da..223e373c 100644
--- a/src/views/site-manager-panel/site-manager-panel-root.tsx
+++ b/src/views/site-manager-panel/site-manager-panel-root.tsx
@@ -94,6 +94,7 @@ export interface SiteManagerPanelRootActionProps {
 export interface SiteManagerPanelRootDataProps {
     sessions: Session[];
     remoteHostsConfig: { [key: string]: Config };
+    localClusterConfig: Config;
 }
 
 type SiteManagerPanelRootProps = SiteManagerPanelRootDataProps & SiteManagerPanelRootActionProps & WithStyles<CssRules> & InjectedFormProps;
@@ -120,7 +121,7 @@ export const SiteManagerPanelRoot = compose(
         }
     }),
     withStyles(styles))
-    (({ classes, sessions, handleSubmit, toggleSession, removeSession, remoteHostsConfig }: SiteManagerPanelRootProps) =>
+    (({ classes, sessions, handleSubmit, toggleSession, removeSession, localClusterConfig, remoteHostsConfig }: SiteManagerPanelRootProps) =>
         <Card className={classes.root}>
             <CardContent>
                 <Grid container direction="row">
@@ -160,9 +161,13 @@ export const SiteManagerPanelRoot = compose(
                                             {validating ? "Validating" : (session.loggedIn ? "Logged in" : "Logged out")}
                                         </Button>
                                     </TableCell>
-                                    <IconButton onClick={() => removeSession(session)}>
-                                        <TrashIcon />
-                                    </IconButton>
+                                    <TableCell>
+                                        {session.clusterId !== localClusterConfig.uuidPrefix &&
+                                            !localClusterConfig.clusterConfig.RemoteClusters[session.clusterId] &&
+                                            <IconButton onClick={() => removeSession(session)}>
+                                                <TrashIcon />
+                                            </IconButton>}
+                                    </TableCell>
                                 </TableRow>;
                             })}
                         </TableBody>
diff --git a/src/views/site-manager-panel/site-manager-panel.tsx b/src/views/site-manager-panel/site-manager-panel.tsx
index 59897f2c..da7ae428 100644
--- a/src/views/site-manager-panel/site-manager-panel.tsx
+++ b/src/views/site-manager-panel/site-manager-panel.tsx
@@ -15,7 +15,8 @@ import { toggleSession, removeSession } from "~/store/auth/auth-action-session";
 const mapStateToProps = (state: RootState): SiteManagerPanelRootDataProps => {
     return {
         sessions: state.auth.sessions,
-        remoteHostsConfig: state.auth.remoteHostsConfig
+        remoteHostsConfig: state.auth.remoteHostsConfig,
+        localClusterConfig: state.auth.remoteHostsConfig[state.auth.localCluster]
     };
 };
 

-----------------------------------------------------------------------


hooks/post-receive
-- 




More information about the arvados-commits mailing list