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),
}
var session = db.loadLocal();
var apiHostname = new URL(session.baseURL).hostname;
- db.discoveryDoc({baseURL: session.baseURL}).map(function(localDD) {
+ db.discoveryDoc(session).map(function(localDD) {
var uuidPrefix = localDD.uuidPrefix;
db.discoveryDoc({baseURL: baseURL}).map(function(dd) {
if (uuidPrefix in dd.remoteHosts ||
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;
// 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;
},
fillMissingUUIDs: function() {
var sessions = db.loadAll();
- Object.keys(sessions).map(function(key) {
+ Object.keys(sessions).forEach(function(key) {
if (key.indexOf('://') < 0) {
return;
}
// 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 || {};
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]])
}
// 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) {
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);