X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/526f3e54133c863b78314924a485d327eb9ba392..58be2f1c488248d11dfb2ad730b6a8d56e557e63:/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 8330a68d18..01b0d72728 100644 --- a/apps/workbench/app/assets/javascripts/models/session_db.js +++ b/apps/workbench/app/assets/javascripts/models/session_db.js @@ -5,6 +5,7 @@ window.SessionDB = function() { var db = this Object.assign(db, { + discoveryCache: {}, loadFromLocalStorage: function() { try { return JSON.parse(window.localStorage.getItem('sessions')) || {} @@ -120,6 +121,33 @@ window.SessionDB = function() { }) }) }, + // Return the Workbench base URL advertised by the session's + // API server, or a reasonable guess, or (if neither strategy + // works out) null. + workbenchBaseURL: function(session) { + var dd = db.discoveryDoc(session)() + if (!dd) + // Don't fall back to guessing until we receive the discovery doc + return null + if (dd.workbenchUrl) + return dd.workbenchUrl + // Guess workbench.{apihostport} is a Workbench... unless + // the host part of apihostport is an IPv4 or [IPv6] + // address. + if (!session.baseURL.match('://(\\[|\\d+\\.\\d+\\.\\d+\\.\\d+[:/])')) + return session.baseURL.replace('://', '://workbench.') + return null + }, + // Return a m.stream that will get fulfilled with the + // discovery doc from a session's API server. + discoveryDoc: function(session) { + 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) + } + return cache + }, request: function(session, path, opts) { opts = opts || {} opts.headers = opts.headers || {}