X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/d6c7e8411ec818d537453c5564c7fa15834cb0be..1afdf6484780b11ec66e6048ded1789b92701a0e:/src/services/auth-service/auth-service.ts diff --git a/src/services/auth-service/auth-service.ts b/src/services/auth-service/auth-service.ts index 3fd67fc015..a80d89ba14 100644 --- a/src/services/auth-service/auth-service.ts +++ b/src/services/auth-service/auth-service.ts @@ -17,8 +17,10 @@ export const USER_LAST_NAME_KEY = 'userLastName'; export const USER_UUID_KEY = 'userUuid'; export const USER_OWNER_UUID_KEY = 'userOwnerUuid'; export const USER_IS_ADMIN = 'isAdmin'; +export const USER_IS_ACTIVE = 'isActive'; export const USER_USERNAME = 'username'; export const USER_PREFS = 'prefs'; +export const HOME_CLUSTER = 'homeCluster'; export interface UserDetailsResponse { email: string; @@ -27,6 +29,7 @@ export interface UserDetailsResponse { uuid: string; owner_uuid: string; is_admin: boolean; + is_active: boolean; username: string; prefs: UserPrefs; } @@ -40,6 +43,7 @@ export class AuthService { public saveApiToken(token: string) { localStorage.setItem(API_TOKEN_KEY, token); + localStorage.setItem(HOME_CLUSTER, token.split('/')[1].substr(0, 5)); } public removeApiToken() { @@ -50,6 +54,10 @@ export class AuthService { return localStorage.getItem(API_TOKEN_KEY) || undefined; } + public getHomeCluster() { + return localStorage.getItem(HOME_CLUSTER) || undefined; + } + public getUuid() { return localStorage.getItem(USER_UUID_KEY) || undefined; } @@ -62,6 +70,10 @@ export class AuthService { return localStorage.getItem(USER_IS_ADMIN) === 'true'; } + public getIsActive(): boolean { + return localStorage.getItem(USER_IS_ACTIVE) === 'true'; + } + public getUser(): User | undefined { const email = localStorage.getItem(USER_EMAIL_KEY); const firstName = localStorage.getItem(USER_FIRST_NAME_KEY); @@ -69,11 +81,12 @@ export class AuthService { const uuid = this.getUuid(); const ownerUuid = this.getOwnerUuid(); const isAdmin = this.getIsAdmin(); + const isActive = this.getIsActive(); const username = localStorage.getItem(USER_USERNAME); const prefs = JSON.parse(localStorage.getItem(USER_PREFS) || '{"profile": {}}'); return email && firstName && lastName && uuid && ownerUuid && username && prefs - ? { email, firstName, lastName, uuid, ownerUuid, isAdmin, username, prefs } + ? { email, firstName, lastName, uuid, ownerUuid, isAdmin, isActive, username, prefs } : undefined; } @@ -84,6 +97,7 @@ export class AuthService { localStorage.setItem(USER_UUID_KEY, user.uuid); localStorage.setItem(USER_OWNER_UUID_KEY, user.ownerUuid); localStorage.setItem(USER_IS_ADMIN, JSON.stringify(user.isAdmin)); + localStorage.setItem(USER_IS_ACTIVE, JSON.stringify(user.isActive)); localStorage.setItem(USER_USERNAME, user.username); localStorage.setItem(USER_PREFS, JSON.stringify(user.prefs)); } @@ -95,13 +109,15 @@ export class AuthService { localStorage.removeItem(USER_UUID_KEY); localStorage.removeItem(USER_OWNER_UUID_KEY); localStorage.removeItem(USER_IS_ADMIN); + localStorage.removeItem(USER_IS_ACTIVE); localStorage.removeItem(USER_USERNAME); localStorage.removeItem(USER_PREFS); } - public login(uuidPrefix: string, homeCluster: string) { + public login(uuidPrefix: string, homeCluster: string, remoteHosts: { [key: string]: string }) { const currentUrl = `${window.location.protocol}//${window.location.host}/token`; - window.location.assign(`https://${homeCluster}/login?remote=${uuidPrefix}&return_to=${currentUrl}`); + const homeClusterHost = remoteHosts[homeCluster]; + window.location.assign(`https://${homeClusterHost}/login?${uuidPrefix !== homeCluster ? "remote=" + uuidPrefix + "&" : ""}return_to=${currentUrl}`); } public logout() { @@ -124,6 +140,7 @@ export class AuthService { uuid: resp.data.uuid, ownerUuid: resp.data.owner_uuid, isAdmin: resp.data.is_admin, + isActive: resp.data.is_active, username: resp.data.username, prefs };