]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - client/src/app/core/auth/auth-user.model.ts
Fix tokens loading
[github/Chocobozzz/PeerTube.git] / client / src / app / core / auth / auth-user.model.ts
CommitLineData
dfe3f7b7
K
1import { Observable, of } from 'rxjs'
2import { map } from 'rxjs/operators'
67ed6552 3import { User } from '@app/core/users/user.model'
a4ff3100
C
4import {
5 flushUserInfoFromLocalStorage,
6 getUserInfoFromLocalStorage,
7 saveUserInfoIntoLocalStorage,
8 TokenOptions,
9 Tokens
10} from '@root-helpers/users'
bd45d503 11import { hasUserRight } from '@shared/core-utils/users'
67ed6552 12import {
67ed6552
C
13 MyUser as ServerMyUserModel,
14 MyUserSpecialPlaylist,
67ed6552
C
15 User as ServerUserModel,
16 UserRight,
dfe3f7b7
K
17 UserRole,
18 UserVideoQuota
67ed6552 19} from '@shared/models'
7da18e44 20
b7819090 21export class AuthUser extends User implements ServerMyUserModel {
df98563e 22 tokens: Tokens
b7819090 23 specialPlaylists: MyUserSpecialPlaylist[]
bd5c83a8 24
dfe3f7b7
K
25 canSeeVideosLink = true
26
df98563e 27 static load () {
79f392a6
C
28 const tokens = Tokens.load()
29 if (!tokens) return null
a4ff3100 30
79f392a6 31 const userInfo = getUserInfoFromLocalStorage()
a4ff3100 32 if (!userInfo) return null
bd5c83a8 33
79f392a6 34 return new AuthUser(userInfo, tokens)
bd5c83a8
C
35 }
36
df98563e 37 static flush () {
a4ff3100
C
38 flushUserInfoFromLocalStorage()
39
df98563e 40 Tokens.flush()
bd5c83a8
C
41 }
42
b7819090 43 constructor (userHash: Partial<ServerMyUserModel>, hashTokens: TokenOptions) {
df98563e 44 super(userHash)
b7819090 45
df98563e 46 this.tokens = new Tokens(hashTokens)
b7819090 47 this.specialPlaylists = userHash.specialPlaylists
bd5c83a8
C
48 }
49
df98563e
C
50 getAccessToken () {
51 return this.tokens.accessToken
bd5c83a8 52 }
bd5c83a8 53
df98563e
C
54 getRefreshToken () {
55 return this.tokens.refreshToken
bd5c83a8
C
56 }
57
df98563e
C
58 getTokenType () {
59 return this.tokens.tokenType
bd5c83a8
C
60 }
61
df98563e
C
62 refreshTokens (accessToken: string, refreshToken: string) {
63 this.tokens.accessToken = accessToken
64 this.tokens.refreshToken = refreshToken
bd5c83a8
C
65 }
66
757f0da3 67 hasRight (right: UserRight) {
954605a8
C
68 return hasUserRight(this.role, right)
69 }
70
a6051ba7 71 canManage (user: ServerUserModel) {
a95a4cc8
C
72 const myRole = this.role
73
74 if (myRole === UserRole.ADMINISTRATOR) return true
75
76 // I'm a moderator: I can only manage users
77 return user.role === UserRole.USER
78 }
79
df98563e 80 save () {
a4ff3100
C
81 saveUserInfoIntoLocalStorage({
82 id: this.id,
83 username: this.username,
84 email: this.email,
85 role: this.role,
86 nsfwPolicy: this.nsfwPolicy,
87 webTorrentEnabled: this.webTorrentEnabled,
88 autoPlayVideo: this.autoPlayVideo
89 })
90
df98563e 91 this.tokens.save()
bd5c83a8 92 }
dfe3f7b7
K
93
94 computeCanSeeVideosLink (quotaObservable: Observable<UserVideoQuota>): Observable<boolean> {
95 if (!this.isUploadDisabled()) {
96 this.canSeeVideosLink = true
97 return of(this.canSeeVideosLink)
98 }
99
100 // Check if the user has videos
101 return quotaObservable.pipe(
102 map(({ videoQuotaUsed }) => {
103 if (videoQuotaUsed !== 0) {
104 // User already uploaded videos, so it can see the link
105 this.canSeeVideosLink = true
106 } else {
107 // No videos, no upload so the user don't need to see the videos link
108 this.canSeeVideosLink = false
109 }
110
111 return this.canSeeVideosLink
112 })
113 )
114 }
bd5c83a8 115}