Merge branch '15530-wb2-logincluster' refs #15530
[arvados-workbench2.git] / src / views / workbench / fed-login.tsx
index d09e68931796b905a47618a8716a977c1c0dc168..be543a64a5bee708cdecfd0bb65f4853008c848a 100644 (file)
@@ -5,7 +5,6 @@
 import * as React from 'react';
 import { connect } from 'react-redux';
 import { RootState } from '~/store/store';
-import { AuthState } from '~/store/auth/auth-reducer';
 import { User } from "~/models/user";
 import { getSaltedToken } from '~/store/auth/auth-action-session';
 import { Config } from '~/common/config';
@@ -34,13 +33,23 @@ export const FedLogin = connect(mapStateToProps)(
             const [, tokenUuid, token] = apiToken.split("/");
             return <div id={"fedtoken-iframe-div"}>
                 {Object.keys(remoteHostsConfig)
-                    .map((k) => k !== localCluster &&
-                        <iframe key={k} src={`${remoteHostsConfig[k].workbench2Url}/fedtoken?api_token=${getSaltedToken(k, tokenUuid, token)}`} style={{
+                    .map((k) => {
+                        if (k === localCluster) {
+                            return;
+                        }
+                        if (!remoteHostsConfig[k].workbench2Url) {
+                            console.log(`Cluster ${k} does not define workbench2Url.  Federated login / cross-site linking to ${k} is unavailable.  Tell the admin of ${k} to set Services->Workbench2->ExternalURL in config.yml.`);
+                            return;
+                        }
+                        const fedtoken = (remoteHostsConfig[k].loginCluster === localCluster)
+                            ? apiToken : getSaltedToken(k, tokenUuid, token);
+                        return <iframe key={k} src={`${remoteHostsConfig[k].workbench2Url}/fedtoken?api_token=${fedtoken}`} style={{
                             height: 0,
                             width: 0,
                             visibility: "hidden"
                         }}
-                        />)}
+                        />;
+                    })}
             </div>;
         }
     });