16592: Restores 'Rename' action. Adds support for baseURL w/o trailing slash.
[arvados.git] / src / common / config.ts
index f9fb9f6a0727d708a4cbd641d40d05563630dd97..0f935602917e0829b8416aa8794aa2d8453b0277 100644 (file)
@@ -23,6 +23,9 @@ export interface ClusterConfigJSON {
             Scheme: string
         }
     };
+    Mail?: {
+        SupportEmailAddress: string;
+    };
     Services: {
         Controller: {
             ExternalURL: string
@@ -55,10 +58,28 @@ export interface ClusterConfigJSON {
         SSHHelpPageHTML: string;
         SSHHelpHostSuffix: string;
         SiteName: string;
+        IdleTimeout: string;
     };
     Login: {
         LoginCluster: string;
-        PAM: boolean;
+        Google: {
+            Enable: boolean;
+        }
+        LDAP: {
+            Enable: boolean;
+        }
+        OpenIDConnect: {
+            Enable: boolean;
+        }
+        PAM: {
+            Enable: boolean;
+        }
+        SSO: {
+            Enable: boolean;
+        }
+        Test: {
+            Enable: boolean;
+        }
     };
     Collections: {
         ForwardSlashNameSubstitution: string;
@@ -109,6 +130,17 @@ const getApiRevision = async (apiUrl: string) => {
     }
 };
 
+const removeTrailingSlashes = (config: ClusterConfigJSON): ClusterConfigJSON => {
+    const svcs: any = {};
+    Object.keys(config.Services).map((s) => {
+        svcs[s] = config.Services[s];
+        if (svcs[s].hasOwnProperty('ExternalURL')) {
+            svcs[s].ExternalURL = svcs[s].ExternalURL.replace(/\/+$/, '');
+        }
+    });
+    return {...config, Services: svcs};
+};
+
 export const fetchConfig = () => {
     return Axios
         .get<WorkbenchConfig>(WORKBENCH_CONFIG_URL + "?nocache=" + (new Date()).getTime())
@@ -122,7 +154,7 @@ 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(async response => {
-                const clusterConfigJSON = response.data;
+                const clusterConfigJSON = removeTrailingSlashes(response.data);
                 const apiRevision = await getApiRevision(clusterConfigJSON.Services.Controller.ExternalURL);
                 const config = { ...buildConfig(clusterConfigJSON), apiRevision };
                 const warnLocalConfig = (varName: string) => console.warn(
@@ -185,10 +217,28 @@ export const mockClusterConfigJSON = (config: Partial<ClusterConfigJSON>): Clust
         SSHHelpPageHTML: "",
         SSHHelpHostSuffix: "",
         SiteName: "",
+        IdleTimeout: "0s",
     },
     Login: {
         LoginCluster: "",
-        PAM: false,
+        Google: {
+            Enable: false,
+        },
+        LDAP: {
+            Enable: false,
+        },
+        OpenIDConnect: {
+            Enable: false,
+        },
+        PAM: {
+            Enable: false,
+        },
+        SSO: {
+            Enable: false,
+        },
+        Test: {
+            Enable: false,
+        },
     },
     Collections: {
         ForwardSlashNameSubstitution: "",