1 // Do not use the barrel (dependency loop)
2 import { UserRole } from '../../../../../shared/models/user.model'
3 import { User } from '../../shared/users/user.model'
5 export type TokenOptions = {
11 // Private class only used by User
13 private static KEYS = {
14 ACCESS_TOKEN: 'access_token',
15 REFRESH_TOKEN: 'refresh_token',
16 TOKEN_TYPE: 'token_type'
24 const accessTokenLocalStorage = localStorage.getItem(this.KEYS.ACCESS_TOKEN)
25 const refreshTokenLocalStorage = localStorage.getItem(this.KEYS.REFRESH_TOKEN)
26 const tokenTypeLocalStorage = localStorage.getItem(this.KEYS.TOKEN_TYPE)
28 if (accessTokenLocalStorage && refreshTokenLocalStorage && tokenTypeLocalStorage) {
30 accessToken: accessTokenLocalStorage,
31 refreshToken: refreshTokenLocalStorage,
32 tokenType: tokenTypeLocalStorage
40 localStorage.removeItem(this.KEYS.ACCESS_TOKEN)
41 localStorage.removeItem(this.KEYS.REFRESH_TOKEN)
42 localStorage.removeItem(this.KEYS.TOKEN_TYPE)
45 constructor (hash?: TokenOptions) {
47 this.accessToken = hash.accessToken
48 this.refreshToken = hash.refreshToken
50 if (hash.tokenType === 'bearer') {
51 this.tokenType = 'Bearer'
53 this.tokenType = hash.tokenType
59 localStorage.setItem(Tokens.KEYS.ACCESS_TOKEN, this.accessToken)
60 localStorage.setItem(Tokens.KEYS.REFRESH_TOKEN, this.refreshToken)
61 localStorage.setItem(Tokens.KEYS.TOKEN_TYPE, this.tokenType)
65 export class AuthUser extends User {
66 private static KEYS = {
71 DISPLAY_NSFW: 'display_nsfw'
77 const usernameLocalStorage = localStorage.getItem(this.KEYS.USERNAME)
78 if (usernameLocalStorage) {
81 id: parseInt(localStorage.getItem(this.KEYS.ID), 10),
82 username: localStorage.getItem(this.KEYS.USERNAME),
83 email: localStorage.getItem(this.KEYS.EMAIL),
84 role: localStorage.getItem(this.KEYS.ROLE) as UserRole,
85 displayNSFW: localStorage.getItem(this.KEYS.DISPLAY_NSFW) === 'true'
95 localStorage.removeItem(this.KEYS.USERNAME)
96 localStorage.removeItem(this.KEYS.ID)
97 localStorage.removeItem(this.KEYS.ROLE)
98 localStorage.removeItem(this.KEYS.DISPLAY_NSFW)
102 constructor (userHash: {
108 }, hashTokens: TokenOptions) {
110 this.tokens = new Tokens(hashTokens)
114 return this.tokens.accessToken
118 return this.tokens.refreshToken
122 return this.tokens.tokenType
125 refreshTokens (accessToken: string, refreshToken: string) {
126 this.tokens.accessToken = accessToken
127 this.tokens.refreshToken = refreshToken
131 localStorage.setItem(AuthUser.KEYS.ID, this.id.toString())
132 localStorage.setItem(AuthUser.KEYS.USERNAME, this.username)
133 localStorage.setItem(AuthUser.KEYS.ROLE, this.role)
134 localStorage.setItem(AuthUser.KEYS.DISPLAY_NSFW, JSON.stringify(this.displayNSFW))