16314: Invoke user/pass prompt for Test authentication method.
[arvados-workbench2.git] / src / common / config.ts
index 0a13f4e11664b7fe9fc945ac30e236682eb43572..4e32395b0dae69c7404c5fa317c860055e6d9f1d 100644 (file)
@@ -23,6 +23,9 @@ export interface ClusterConfigJSON {
             Scheme: string
         }
     };
+    Mail?: {
+        SupportEmailAddress: string;
+    };
     Services: {
         Controller: {
             ExternalURL: string
@@ -58,6 +61,24 @@ export interface ClusterConfigJSON {
     };
     Login: {
         LoginCluster: string;
+        Google: {
+            Enable: boolean;
+        }
+        LDAP: {
+            Enable: boolean;
+        }
+        OpenIDConnect: {
+            Enable: boolean;
+        }
+        PAM: {
+            Enable: boolean;
+        }
+        SSO: {
+            Enable: boolean;
+        }
+        Test: {
+            Enable: boolean;
+        }
     };
     Collections: {
         ForwardSlashNameSubstitution: string;
@@ -108,6 +129,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())
@@ -121,7 +153,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(
@@ -187,6 +219,24 @@ export const mockClusterConfigJSON = (config: Partial<ClusterConfigJSON>): Clust
     },
     Login: {
         LoginCluster: "",
+        Google: {
+            Enable: false,
+        },
+        LDAP: {
+            Enable: false,
+        },
+        OpenIDConnect: {
+            Enable: false,
+        },
+        PAM: {
+            Enable: false,
+        },
+        SSO: {
+            Enable: false,
+        },
+        Test: {
+            Enable: false;
+        }
     },
     Collections: {
         ForwardSlashNameSubstitution: "",