]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame_incremental - server/helpers/custom-validators/users.ts
Allow accounts to skip account setup modal
[github/Chocobozzz/PeerTube.git] / server / helpers / custom-validators / users.ts
... / ...
CommitLineData
1import { values } from 'lodash'
2import validator from 'validator'
3import { UserRole } from '../../../shared'
4import { isEmailEnabled } from '../../initializers/config'
5import { CONSTRAINTS_FIELDS, NSFW_POLICY_TYPES } from '../../initializers/constants'
6import { exists, isArray, isBooleanValid } from './misc'
7
8const USERS_CONSTRAINTS_FIELDS = CONSTRAINTS_FIELDS.USERS
9
10function isUserPasswordValid (value: string) {
11 return validator.isLength(value, USERS_CONSTRAINTS_FIELDS.PASSWORD)
12}
13
14function isUserPasswordValidOrEmpty (value: string) {
15 // Empty password is only possible if emailing is enabled.
16 if (value === '') return isEmailEnabled()
17
18 return isUserPasswordValid(value)
19}
20
21function isUserVideoQuotaValid (value: string) {
22 return exists(value) && validator.isInt(value + '', USERS_CONSTRAINTS_FIELDS.VIDEO_QUOTA)
23}
24
25function isUserVideoQuotaDailyValid (value: string) {
26 return exists(value) && validator.isInt(value + '', USERS_CONSTRAINTS_FIELDS.VIDEO_QUOTA_DAILY)
27}
28
29function isUserUsernameValid (value: string) {
30 const max = USERS_CONSTRAINTS_FIELDS.USERNAME.max
31 const min = USERS_CONSTRAINTS_FIELDS.USERNAME.min
32 return exists(value) && validator.matches(value, new RegExp(`^[a-z0-9._]{${min},${max}}$`))
33}
34
35function isUserDisplayNameValid (value: string) {
36 return value === null || (exists(value) && validator.isLength(value, CONSTRAINTS_FIELDS.USERS.NAME))
37}
38
39function isUserDescriptionValid (value: string) {
40 return value === null || (exists(value) && validator.isLength(value, CONSTRAINTS_FIELDS.USERS.DESCRIPTION))
41}
42
43function isUserEmailVerifiedValid (value: any) {
44 return isBooleanValid(value)
45}
46
47const nsfwPolicies = values(NSFW_POLICY_TYPES)
48function isUserNSFWPolicyValid (value: any) {
49 return exists(value) && nsfwPolicies.includes(value)
50}
51
52function isUserWebTorrentEnabledValid (value: any) {
53 return isBooleanValid(value)
54}
55
56function isUserVideosHistoryEnabledValid (value: any) {
57 return isBooleanValid(value)
58}
59
60function isUserAutoPlayVideoValid (value: any) {
61 return isBooleanValid(value)
62}
63
64function isUserVideoLanguages (value: any) {
65 return value === null || (isArray(value) && value.length < CONSTRAINTS_FIELDS.USERS.VIDEO_LANGUAGES.max)
66}
67
68function isUserAdminFlagsValid (value: any) {
69 return exists(value) && validator.isInt('' + value)
70}
71
72function isUserBlockedValid (value: any) {
73 return isBooleanValid(value)
74}
75
76function isUserAutoPlayNextVideoValid (value: any) {
77 return isBooleanValid(value)
78}
79
80function isUserAutoPlayNextVideoPlaylistValid (value: any) {
81 return isBooleanValid(value)
82}
83
84function isUserNoModal (value: any) {
85 return isBooleanValid(value)
86}
87
88function isUserBlockedReasonValid (value: any) {
89 return value === null || (exists(value) && validator.isLength(value, CONSTRAINTS_FIELDS.USERS.BLOCKED_REASON))
90}
91
92function isUserRoleValid (value: any) {
93 return exists(value) && validator.isInt('' + value) && UserRole[value] !== undefined
94}
95
96// ---------------------------------------------------------------------------
97
98export {
99 isUserVideosHistoryEnabledValid,
100 isUserBlockedValid,
101 isUserPasswordValid,
102 isUserPasswordValidOrEmpty,
103 isUserVideoLanguages,
104 isUserBlockedReasonValid,
105 isUserRoleValid,
106 isUserVideoQuotaValid,
107 isUserVideoQuotaDailyValid,
108 isUserUsernameValid,
109 isUserAdminFlagsValid,
110 isUserEmailVerifiedValid,
111 isUserNSFWPolicyValid,
112 isUserWebTorrentEnabledValid,
113 isUserAutoPlayVideoValid,
114 isUserAutoPlayNextVideoValid,
115 isUserAutoPlayNextVideoPlaylistValid,
116 isUserDisplayNameValid,
117 isUserDescriptionValid,
118 isUserNoModal
119}