]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - client/src/app/shared/auth/auth-user.model.ts
Merge branch 'master' into webseed-merged
[github/Chocobozzz/PeerTube.git] / client / src / app / shared / auth / auth-user.model.ts
1 import { User } from '../users';
2
3 export class AuthUser extends User {
4 private static KEYS = {
5 ID: 'id',
6 ROLE: 'role',
7 USERNAME: 'username'
8 };
9
10 id: string;
11 role: string;
12 username: string;
13 tokens: Tokens;
14
15 static load() {
16 const usernameLocalStorage = localStorage.getItem(this.KEYS.USERNAME);
17 if (usernameLocalStorage) {
18 return new AuthUser(
19 {
20 id: localStorage.getItem(this.KEYS.ID),
21 username: localStorage.getItem(this.KEYS.USERNAME),
22 role: localStorage.getItem(this.KEYS.ROLE)
23 },
24 Tokens.load()
25 );
26 }
27
28 return null;
29 }
30
31 static flush() {
32 localStorage.removeItem(this.KEYS.USERNAME);
33 localStorage.removeItem(this.KEYS.ID);
34 localStorage.removeItem(this.KEYS.ROLE);
35 Tokens.flush();
36 }
37
38 constructor(userHash: { id: string, username: string, role: string }, hashTokens: any) {
39 super(userHash);
40 this.tokens = new Tokens(hashTokens);
41 }
42
43 getAccessToken() {
44 return this.tokens.access_token;
45 }
46
47 getRefreshToken() {
48 return this.tokens.refresh_token;
49 }
50
51 getTokenType() {
52 return this.tokens.token_type;
53 }
54
55 refreshTokens(access_token: string, refresh_token: string) {
56 this.tokens.access_token = access_token;
57 this.tokens.refresh_token = refresh_token;
58 }
59
60 save() {
61 localStorage.setItem(AuthUser.KEYS.ID, this.id);
62 localStorage.setItem(AuthUser.KEYS.USERNAME, this.username);
63 localStorage.setItem(AuthUser.KEYS.ROLE, this.role);
64 this.tokens.save();
65 }
66 }
67
68 // Private class only used by User
69 class Tokens {
70 private static KEYS = {
71 ACCESS_TOKEN: 'access_token',
72 REFRESH_TOKEN: 'refresh_token',
73 TOKEN_TYPE: 'token_type',
74 };
75
76 access_token: string;
77 refresh_token: string;
78 token_type: string;
79
80 static load() {
81 const accessTokenLocalStorage = localStorage.getItem(this.KEYS.ACCESS_TOKEN);
82 const refreshTokenLocalStorage = localStorage.getItem(this.KEYS.REFRESH_TOKEN);
83 const tokenTypeLocalStorage = localStorage.getItem(this.KEYS.TOKEN_TYPE);
84
85 if (accessTokenLocalStorage && refreshTokenLocalStorage && tokenTypeLocalStorage) {
86 return new Tokens({
87 access_token: accessTokenLocalStorage,
88 refresh_token: refreshTokenLocalStorage,
89 token_type: tokenTypeLocalStorage
90 });
91 }
92
93 return null;
94 }
95
96 static flush() {
97 localStorage.removeItem(this.KEYS.ACCESS_TOKEN);
98 localStorage.removeItem(this.KEYS.REFRESH_TOKEN);
99 localStorage.removeItem(this.KEYS.TOKEN_TYPE);
100 }
101
102 constructor(hash?: any) {
103 if (hash) {
104 this.access_token = hash.access_token;
105 this.refresh_token = hash.refresh_token;
106
107 if (hash.token_type === 'bearer') {
108 this.token_type = 'Bearer';
109 } else {
110 this.token_type = hash.token_type;
111 }
112 }
113 }
114
115 save() {
116 localStorage.setItem('access_token', this.access_token);
117 localStorage.setItem('refresh_token', this.refresh_token);
118 localStorage.setItem('token_type', this.token_type);
119 }
120 }