X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/20846db140dbba8a688718716e1e0f99ccfb3b51..0ff82bc2ba91e0efb6813d74348267c2320f0ada:/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 7d1b3b1592..70bd0a4ba5 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 db.discoveryDoc({baseURL: url.origin}).map(function() { + return m.request(url.origin + '/discovery/v1/apis/arvados/v1/rest').then(function() { return url.origin + '/'; }).catch(function(err) { // If url is a Workbench site (and isn't too old), @@ -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; @@ -169,7 +173,7 @@ window.SessionDB = function() { // scrub the location bar. if (document.location.search[0] != '?') { return; } var params = {}; - document.location.search.slice(1).split('&').map(function(kv) { + document.location.search.slice(1).split('&').forEach(function(kv) { var e = kv.indexOf('='); if (e < 0) { return; @@ -187,7 +191,7 @@ window.SessionDB = function() { }, fillMissingUUIDs: function() { var sessions = db.loadAll(); - Object.keys(sessions).map(function(key) { + Object.keys(sessions).forEach(function(key) { if (key.indexOf('://') < 0) { return; } @@ -231,9 +235,13 @@ 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') + 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 || {}; @@ -251,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]]) } @@ -276,7 +291,7 @@ window.SessionDB = function() { // a salted token. migrateNonFederatedSessions: function() { var sessions = db.loadActive(); - Object.keys(sessions).map(function(uuidPrefix) { + Object.keys(sessions).forEach(function(uuidPrefix) { session = sessions[uuidPrefix]; if (!session.isFromRails && session.token) { db.saltedToken(uuidPrefix).then(function(saltedToken) { @@ -293,8 +308,9 @@ 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) { + Object.keys(d.remoteHosts).forEach(function(uuidPrefix) { if (!(sessions[uuidPrefix])) { db.findAPI(d.remoteHosts[uuidPrefix]).then(function(baseURL) { db.login(baseURL, false);