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())
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}`);
}
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 };
});
});
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';
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) }));
});
});
};
export interface SiteManagerPanelRootDataProps {
sessions: Session[];
remoteHostsConfig: { [key: string]: Config };
+ localClusterConfig: Config;
}
type SiteManagerPanelRootProps = SiteManagerPanelRootDataProps & SiteManagerPanelRootActionProps & WithStyles<CssRules> & InjectedFormProps;
}
}),
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">
{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>
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]
};
};