X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/0fab8a581c4a711408150ed64ce909d9afda7829..20846db140dbba8a688718716e1e0f99ccfb3b51:/apps/workbench/app/assets/javascripts/models/session_db.js diff --git a/apps/workbench/app/assets/javascripts/models/session_db.js b/apps/workbench/app/assets/javascripts/models/session_db.js index 99768db544..7d1b3b1592 100644 --- a/apps/workbench/app/assets/javascripts/models/session_db.js +++ b/apps/workbench/app/assets/javascripts/models/session_db.js @@ -68,7 +68,7 @@ window.SessionDB = function() { url = 'https://' + url; } url = new URL(url); - return m.request(url.origin + '/discovery/v1/apis/arvados/v1/rest').then(function() { + return db.discoveryDoc({baseURL: url.origin}).map(function() { return url.origin + '/'; }).catch(function(err) { // If url is a Workbench site (and isn't too old), @@ -93,12 +93,12 @@ window.SessionDB = function() { fallbackLogin = true; } var session = db.loadLocal(); - var uuidPrefix = session.user.owner_uuid.slice(0, 5); var apiHostname = new URL(session.baseURL).hostname; - m.request(session.baseURL+'discovery/v1/apis/arvados/v1/rest').then(function(localDD) { - m.request(baseURL+'discovery/v1/apis/arvados/v1/rest').then(function(dd) { + db.discoveryDoc(session).map(function(localDD) { + var uuidPrefix = localDD.uuidPrefix; + db.discoveryDoc({baseURL: baseURL}).map(function(dd) { if (uuidPrefix in dd.remoteHosts || - (dd.remoteHostsViaDNS && apiHostname.indexOf('arvadosapi.com') >= 0)) { + (dd.remoteHostsViaDNS && apiHostname.endsWith('.arvadosapi.com'))) { // Federated identity login via salted token db.saltedToken(dd.uuidPrefix).then(function(token) { m.request(baseURL+'arvados/v1/users/current', { @@ -233,7 +233,16 @@ window.SessionDB = function() { var cache = db.discoveryCache[session.baseURL]; if (!cache) { db.discoveryCache[session.baseURL] = cache = m.stream(); - m.request(session.baseURL+'discovery/v1/apis/arvados/v1/rest').then(cache); + m.request(session.baseURL+'discovery/v1/apis/arvados/v1/rest') + .then(function (dd) { + // Just in case we're talking with an old API server. + dd.remoteHosts = dd.remoteHosts || {}; + if (dd.remoteHostsViaDNS === undefined) { + dd.remoteHostsViaDNS = false; + } + return dd; + }) + .then(cache); } return cache; }, @@ -269,20 +278,24 @@ window.SessionDB = function() { var sessions = db.loadActive(); Object.keys(sessions).map(function(uuidPrefix) { session = sessions[uuidPrefix]; - if (!session.isFromRails && session.token && session.token.indexOf('v2/') < 0) { - // Only try the federated login - db.login(session.baseURL, false); + if (!session.isFromRails && session.token) { + db.saltedToken(uuidPrefix).then(function(saltedToken) { + if (session.token != saltedToken) { + // Only try the federated login + db.login(session.baseURL, false); + } + }); } }); }, - // If remoteHosts is listed on the local API discovery doc, try to add any - // listed remote without an active session. + // If remoteHosts is populated on the local API discovery doc, try to + // add any listed missing session. autoLoadRemoteHosts: function() { - var activeSessions = db.loadActive(); + var sessions = db.loadAll(); var doc = db.discoveryDoc(db.loadLocal()); doc.map(function(d) { Object.keys(d.remoteHosts).map(function(uuidPrefix) { - if (!(uuidPrefix in Object.keys(activeSessions))) { + if (!(sessions[uuidPrefix])) { db.findAPI(d.remoteHosts[uuidPrefix]).then(function(baseURL) { db.login(baseURL, false); }); @@ -304,8 +317,7 @@ window.SessionDB = function() { if (userUUIDPrefix === session.user.owner_uuid.slice(0, 5)) { return; } - var doc = db.discoveryDoc(session); - doc.map(function(d) { + db.discoveryDoc(session).map(function (d) { // Guess the remote host from the local discovery doc settings var rHost = null; if (d.remoteHosts[userUUIDPrefix]) { @@ -319,8 +331,7 @@ window.SessionDB = function() { } // Get the remote cluster workbench url & redirect there. db.findAPI(rHost).then(function (apiUrl) { - var doc = db.discoveryDoc({baseURL: apiUrl}); - doc.map(function (d) { + db.discoveryDoc({baseURL: apiUrl}).map(function (d) { document.location = d.workbenchUrl + path; }); });