refs #13563 Merge branch '13563-login-service'
[arvados-workbench2.git] / src / services / auth-service / auth-service.ts
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 import { API_HOST } from "../../common/server-api";
6 import { User } from "../../models/user";
7
8 export const API_TOKEN_KEY = 'apiToken';
9 export const USER_EMAIL_KEY = 'userEmail';
10 export const USER_FIRST_NAME_KEY = 'userFirstName';
11 export const USER_LAST_NAME_KEY = 'userLastName';
12
13 export default class AuthService {
14
15     public saveApiToken(token: string) {
16         localStorage.setItem(API_TOKEN_KEY, token);
17     }
18
19     public removeApiToken() {
20         localStorage.removeItem(API_TOKEN_KEY);
21     }
22
23     public getApiToken() {
24         return localStorage.getItem(API_TOKEN_KEY) || undefined;
25     }
26
27     public getUser(): User | undefined {
28         const email = localStorage.getItem(USER_EMAIL_KEY);
29         const firstName = localStorage.getItem(USER_FIRST_NAME_KEY);
30         const lastName = localStorage.getItem(USER_LAST_NAME_KEY);
31         return email && firstName && lastName
32             ? { email, firstName, lastName }
33             : undefined;
34     }
35
36     public saveUser(user: User) {
37         localStorage.setItem(USER_EMAIL_KEY, user.email);
38         localStorage.setItem(USER_FIRST_NAME_KEY, user.firstName);
39         localStorage.setItem(USER_LAST_NAME_KEY, user.lastName);
40     }
41
42     public removeUser() {
43         localStorage.removeItem(USER_EMAIL_KEY);
44         localStorage.removeItem(USER_FIRST_NAME_KEY);
45         localStorage.removeItem(USER_LAST_NAME_KEY);
46     }
47
48     public login() {
49         const currentUrl = `${window.location.protocol}//${window.location.host}/token`;
50         window.location.assign(`${API_HOST}/login?return_to=${currentUrl}`);
51     }
52
53     public logout() {
54         const currentUrl = `${window.location.protocol}//${window.location.host}`;
55         window.location.assign(`${API_HOST}/logout?return_to=${currentUrl}`);
56     }
57 }