]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - client/src/app/core/auth/auth-user.model.ts
Add ability to set custom field to video form
[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 () {
a4ff3100
C
28 const userInfo = getUserInfoFromLocalStorage()
29
30 if (!userInfo) return null
bd5c83a8 31
a4ff3100 32 return new AuthUser(userInfo, Tokens.load())
bd5c83a8
C
33 }
34
df98563e 35 static flush () {
a4ff3100
C
36 flushUserInfoFromLocalStorage()
37
df98563e 38 Tokens.flush()
bd5c83a8
C
39 }
40
b7819090 41 constructor (userHash: Partial<ServerMyUserModel>, hashTokens: TokenOptions) {
df98563e 42 super(userHash)
b7819090 43
df98563e 44 this.tokens = new Tokens(hashTokens)
b7819090 45 this.specialPlaylists = userHash.specialPlaylists
bd5c83a8
C
46 }
47
df98563e
C
48 getAccessToken () {
49 return this.tokens.accessToken
bd5c83a8 50 }
bd5c83a8 51
df98563e
C
52 getRefreshToken () {
53 return this.tokens.refreshToken
bd5c83a8
C
54 }
55
df98563e
C
56 getTokenType () {
57 return this.tokens.tokenType
bd5c83a8
C
58 }
59
df98563e
C
60 refreshTokens (accessToken: string, refreshToken: string) {
61 this.tokens.accessToken = accessToken
62 this.tokens.refreshToken = refreshToken
bd5c83a8
C
63 }
64
757f0da3 65 hasRight (right: UserRight) {
954605a8
C
66 return hasUserRight(this.role, right)
67 }
68
a6051ba7 69 canManage (user: ServerUserModel) {
a95a4cc8
C
70 const myRole = this.role
71
72 if (myRole === UserRole.ADMINISTRATOR) return true
73
74 // I'm a moderator: I can only manage users
75 return user.role === UserRole.USER
76 }
77
df98563e 78 save () {
a4ff3100
C
79 saveUserInfoIntoLocalStorage({
80 id: this.id,
81 username: this.username,
82 email: this.email,
83 role: this.role,
84 nsfwPolicy: this.nsfwPolicy,
85 webTorrentEnabled: this.webTorrentEnabled,
86 autoPlayVideo: this.autoPlayVideo
87 })
88
df98563e 89 this.tokens.save()
bd5c83a8 90 }
dfe3f7b7
K
91
92 computeCanSeeVideosLink (quotaObservable: Observable<UserVideoQuota>): Observable<boolean> {
93 if (!this.isUploadDisabled()) {
94 this.canSeeVideosLink = true
95 return of(this.canSeeVideosLink)
96 }
97
98 // Check if the user has videos
99 return quotaObservable.pipe(
100 map(({ videoQuotaUsed }) => {
101 if (videoQuotaUsed !== 0) {
102 // User already uploaded videos, so it can see the link
103 this.canSeeVideosLink = true
104 } else {
105 // No videos, no upload so the user don't need to see the videos link
106 this.canSeeVideosLink = false
107 }
108
109 return this.canSeeVideosLink
110 })
111 )
112 }
bd5c83a8 113}