X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/c0a5fa033d0a9bfbeab001f287969756e9e1d16d..163c8f8750193b791eb62f5a8d73dc44a006b69e:/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 fab8fe3925..fd1cdfe149 100644 --- a/apps/workbench/app/assets/javascripts/models/session_db.js +++ b/apps/workbench/app/assets/javascripts/models/session_db.js @@ -94,9 +94,9 @@ window.SessionDB = function() { } var session = db.loadLocal(); var apiHostname = new URL(session.baseURL).hostname; - m.request(session.baseURL+'discovery/v1/apis/arvados/v1/rest').then(function(localDD) { + db.discoveryDoc(session).map(function(localDD) { var uuidPrefix = localDD.uuidPrefix; - m.request(baseURL+'discovery/v1/apis/arvados/v1/rest').then(function(dd) { + db.discoveryDoc({baseURL: baseURL}).map(function(dd) { if (uuidPrefix in dd.remoteHosts || (dd.remoteHostsViaDNS && apiHostname.endsWith('.arvadosapi.com'))) { // Federated identity login via salted token @@ -157,7 +157,11 @@ window.SessionDB = function() { var session = db.loadLocal(); return db.tokenUUID().then(function(token_uuid) { var shaObj = new jsSHA("SHA-1", "TEXT"); - shaObj.setHMACKey(session.token, "TEXT"); + var secret = session.token; + if (session.token.startsWith("v2/")) { + secret = session.token.split("/")[2]; + } + shaObj.setHMACKey(secret, "TEXT"); shaObj.update(uuid_prefix); var hmac = shaObj.getHMAC("HEX"); return 'v2/' + token_uuid + '/' + hmac; @@ -231,9 +235,22 @@ window.SessionDB = function() { // discovery doc from a session's API server. discoveryDoc: function(session) { var cache = db.discoveryCache[session.baseURL]; - if (!cache) { + if (!cache && session) { db.discoveryCache[session.baseURL] = cache = m.stream(); - m.request(session.baseURL+'discovery/v1/apis/arvados/v1/rest').then(cache); + var baseURL = session.baseURL; + if (baseURL[baseURL.length - 1] !== '/') { + baseURL += '/'; + } + m.request(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; }, @@ -242,7 +259,14 @@ window.SessionDB = function() { var cache = db.tokenUUIDCache; if (!cache) { var session = db.loadLocal(); - return db.request(session, '/arvados/v1/api_client_authorizations', { + if (session.token.startsWith("v2/")) { + var uuid = session.token.split("/")[1] + db.tokenUUIDCache = uuid; + return new Promise(function(resolve, reject) { + resolve(uuid); + }); + } + return db.request(session, 'arvados/v1/api_client_authorizations', { data: { filters: JSON.stringify([['api_token', '=', session.token]]) } @@ -284,6 +308,7 @@ window.SessionDB = function() { autoLoadRemoteHosts: function() { var sessions = db.loadAll(); var doc = db.discoveryDoc(db.loadLocal()); + if (doc === undefined) { return; } doc.map(function(d) { Object.keys(d.remoteHosts).map(function(uuidPrefix) { if (!(sessions[uuidPrefix])) { @@ -308,8 +333,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]) { @@ -323,8 +347,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; }); });