// Add the salted token to search result links from federated
// remote hosts.
if (!session.isFromRails && session.token.indexOf('v2/') == 0) {
- tokenParam = '?api_token='+session.token
+ tokenParam = session.token
}
return m('tr', [
- m('td', [
+ m('td', m('form', {
+ action: item.workbenchBaseURL() + '/' + item.objectType.wb_path + '/' + item.uuid,
+ method: 'GET'
+ }, [
+ tokenParam !== '' &&
+ m('input[type=hidden][name=api_token]', {value: tokenParam}),
item.workbenchBaseURL() &&
- m('a.btn.btn-xs.btn-default', {
+ m('button.btn.btn-xs.btn-default[type=submit]', {
'data-original-title': 'show '+item.objectType.description,
'data-placement': 'top',
'data-toggle': 'tooltip',
- href: item.workbenchBaseURL()+'/'+item.objectType.wb_path+'/'+item.uuid+tokenParam,
// Bootstrap's tooltip feature
oncreate: function(vnode) { $(vnode.dom).tooltip() },
}, iconsMap[item.objectType.wb_path]),
- ]),
+ ])),
m('td.arvados-uuid', item.uuid),
m('td', item.name || '(unnamed)'),
m('td', m(LocalizedDateTime, {parse: item.modified_at})),
window.Search = {
oninit: function(vnode) {
vnode.state.sessionDB = new SessionDB()
+ vnode.state.sessionDB.autoRedirectToHomeCluster('/search')
vnode.state.searchEntered = m.stream()
vnode.state.searchActive = m.stream()
// When searchActive changes (e.g., when restoring state
var db = new SessionDB();
db.checkForNewToken();
db.fillMissingUUIDs();
- db.migrateNonFederatedSessions();
db.autoLoadRemoteHosts();
});
window.SessionsTable = {
oninit: function(vnode) {
vnode.state.db = new SessionDB();
+ vnode.state.db.autoRedirectToHomeCluster('/sessions');
+ vnode.state.db.migrateNonFederatedSessions();
vnode.state.hostToAdd = m.stream('');
vnode.state.error = m.stream();
vnode.state.checking = m.stream();
])),
m('tbody', [
Object.keys(sessions).map(function(uuidPrefix) {
- var session = sessions[uuidPrefix]
+ var session = sessions[uuidPrefix];
return m('tr', [
session.token && session.user ? [
m('td', session.user.is_active ?
m('span.label.label-success', 'logged in') :
m('span.label.label-warning', 'inactive')),
- m('td', {title: session.baseURL}, [
- m('a', {
- href: db.workbenchBaseURL(session) + '?api_token=' + session.token
- }, uuidPrefix)
- ]),
+ m('td', {title: session.baseURL}, uuidPrefix),
m('td', session.user.username),
m('td', session.user.email),
m('td', session.isFromRails ? null : m('button.btn.btn-xs.btn-default', {
fallbackLogin = true;
}
var session = db.loadLocal();
- var uuidPrefix = session.user.owner_uuid.slice(0, 5);
var apiHostname = new URL(session.baseURL).hostname;
m.request(session.baseURL+'discovery/v1/apis/arvados/v1/rest').then(function(localDD) {
+ var uuidPrefix = localDD.uuidPrefix;
m.request(baseURL+'discovery/v1/apis/arvados/v1/rest').then(function(dd) {
if (uuidPrefix in dd.remoteHosts ||
- (dd.remoteHostsViaDNS && apiHostname.indexOf('arvadosapi.com') >= 0)) {
+ (dd.remoteHostsViaDNS && apiHostname.endsWith('.arvadosapi.com'))) {
// Federated identity login via salted token
db.saltedToken(dd.uuidPrefix).then(function(token) {
m.request(baseURL+'arvados/v1/users/current', {
var sessions = db.loadActive();
Object.keys(sessions).map(function(uuidPrefix) {
session = sessions[uuidPrefix];
- if (!session.isFromRails && session.token && session.token.indexOf('v2/') < 0) {
- // Only try the federated login
- db.login(session.baseURL, false);
+ if (!session.isFromRails && session.token) {
+ db.saltedToken(uuidPrefix).then(function(saltedToken) {
+ if (session.token != saltedToken) {
+ // Only try the federated login
+ db.login(session.baseURL, false);
+ }
+ });
}
});
},
- // If remoteHosts is listed on the local API discovery doc, try to add any
- // listed remote without an active session.
+ // If remoteHosts is populated on the local API discovery doc, try to
+ // add any listed missing session.
autoLoadRemoteHosts: function() {
- var activeSessions = db.loadActive();
+ var sessions = db.loadAll();
var doc = db.discoveryDoc(db.loadLocal());
doc.map(function(d) {
Object.keys(d.remoteHosts).map(function(uuidPrefix) {
- if (!(uuidPrefix in Object.keys(activeSessions))) {
+ if (!(sessions[uuidPrefix])) {
db.findAPI(d.remoteHosts[uuidPrefix]).then(function(baseURL) {
db.login(baseURL, false);
});
SPDX-License-Identifier: AGPL-3.0 -->
-<script type="text/javascript">
- $(document).on('ready', function() {
- var db = new SessionDB()
- db.autoRedirectToHomeCluster('/search')
- })
-</script>
-
<div data-mount-mithril="Search"></div>
SPDX-License-Identifier: AGPL-3.0 -->
-<script type="text/javascript">
- $(document).on('ready', function() {
- var db = new SessionDB()
- db.autoRedirectToHomeCluster('/sessions')
- })
-</script>
-
<div data-mount-mithril="SessionsTable"></div>