14990: added 404 page with wildcard route
[arvados.git] / src / common / config.ts
index 5c63fd699e5091c43fa042441a728ed2ffe5d085..cf539f3dd51856783b56dd6a90192c1dd69fe319 100644 (file)
@@ -23,6 +23,9 @@ export interface ClusterConfigJSON {
             Scheme: string
         }
     };
+    Mail?: {
+        SupportEmailAddress: string;
+    };
     Services: {
         Controller: {
             ExternalURL: string
@@ -64,6 +67,9 @@ export interface ClusterConfigJSON {
         LDAP: {
             Enable: boolean;
         }
+        OpenIDConnect: {
+            Enable: boolean;
+        }
         PAM: {
             Enable: boolean;
         }
@@ -120,6 +126,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())
@@ -133,7 +150,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(
@@ -205,6 +222,9 @@ export const mockClusterConfigJSON = (config: Partial<ClusterConfigJSON>): Clust
         LDAP: {
             Enable: false,
         },
+        OpenIDConnect: {
+            Enable: false,
+        },
         PAM: {
             Enable: false,
         },