Merge branch '18947-githttpd'
[arvados.git] / apps / workbench / app / assets / javascripts / models / session_db.js
index 7d1b3b15926816229acbc8d83b0ffa52443055b6..70bd0a4ba59e25f251e55ddd7e475f76fdcbdd19 100644 (file)
@@ -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);