]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - server/helpers/custom-validators/users.ts
emit more specific status codes on video upload (#3423)
[github/Chocobozzz/PeerTube.git] / server / helpers / custom-validators / users.ts
1 import validator from 'validator'
2 import { UserRole } from '../../../shared'
3 import { CONSTRAINTS_FIELDS, NSFW_POLICY_TYPES } from '../../initializers/constants'
4 import { exists, isArray, isBooleanValid, isFileValid } from './misc'
5 import { values } from 'lodash'
6 import { isEmailEnabled } from '../../initializers/config'
7
8 const USERS_CONSTRAINTS_FIELDS = CONSTRAINTS_FIELDS.USERS
9
10 function isUserPasswordValid (value: string) {
11 return validator.isLength(value, USERS_CONSTRAINTS_FIELDS.PASSWORD)
12 }
13
14 function 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
21 function isUserVideoQuotaValid (value: string) {
22 return exists(value) && validator.isInt(value + '', USERS_CONSTRAINTS_FIELDS.VIDEO_QUOTA)
23 }
24
25 function isUserVideoQuotaDailyValid (value: string) {
26 return exists(value) && validator.isInt(value + '', USERS_CONSTRAINTS_FIELDS.VIDEO_QUOTA_DAILY)
27 }
28
29 function 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
35 function isUserDisplayNameValid (value: string) {
36 return value === null || (exists(value) && validator.isLength(value, CONSTRAINTS_FIELDS.USERS.NAME))
37 }
38
39 function isUserDescriptionValid (value: string) {
40 return value === null || (exists(value) && validator.isLength(value, CONSTRAINTS_FIELDS.USERS.DESCRIPTION))
41 }
42
43 function isUserEmailVerifiedValid (value: any) {
44 return isBooleanValid(value)
45 }
46
47 const nsfwPolicies = values(NSFW_POLICY_TYPES)
48 function isUserNSFWPolicyValid (value: any) {
49 return exists(value) && nsfwPolicies.includes(value)
50 }
51
52 function isUserWebTorrentEnabledValid (value: any) {
53 return isBooleanValid(value)
54 }
55
56 function isUserVideosHistoryEnabledValid (value: any) {
57 return isBooleanValid(value)
58 }
59
60 function isUserAutoPlayVideoValid (value: any) {
61 return isBooleanValid(value)
62 }
63
64 function isUserVideoLanguages (value: any) {
65 return value === null || (isArray(value) && value.length < CONSTRAINTS_FIELDS.USERS.VIDEO_LANGUAGES.max)
66 }
67
68 function isUserAdminFlagsValid (value: any) {
69 return exists(value) && validator.isInt('' + value)
70 }
71
72 function isUserBlockedValid (value: any) {
73 return isBooleanValid(value)
74 }
75
76 function isUserAutoPlayNextVideoValid (value: any) {
77 return isBooleanValid(value)
78 }
79
80 function isUserAutoPlayNextVideoPlaylistValid (value: any) {
81 return isBooleanValid(value)
82 }
83
84 function isNoInstanceConfigWarningModal (value: any) {
85 return isBooleanValid(value)
86 }
87
88 function isNoWelcomeModal (value: any) {
89 return isBooleanValid(value)
90 }
91
92 function isUserBlockedReasonValid (value: any) {
93 return value === null || (exists(value) && validator.isLength(value, CONSTRAINTS_FIELDS.USERS.BLOCKED_REASON))
94 }
95
96 function isUserRoleValid (value: any) {
97 return exists(value) && validator.isInt('' + value) && UserRole[value] !== undefined
98 }
99
100 const avatarMimeTypes = CONSTRAINTS_FIELDS.ACTORS.AVATAR.EXTNAME
101 .map(v => v.replace('.', ''))
102 .join('|')
103 const avatarMimeTypesRegex = `image/(${avatarMimeTypes})`
104 function isAvatarFile (files: { [ fieldname: string ]: Express.Multer.File[] } | Express.Multer.File[]) {
105 return isFileValid(files, avatarMimeTypesRegex, 'avatarfile', CONSTRAINTS_FIELDS.ACTORS.AVATAR.FILE_SIZE.max)
106 }
107
108 // ---------------------------------------------------------------------------
109
110 export {
111 isUserVideosHistoryEnabledValid,
112 isUserBlockedValid,
113 isUserPasswordValid,
114 isUserPasswordValidOrEmpty,
115 isUserVideoLanguages,
116 isUserBlockedReasonValid,
117 isUserRoleValid,
118 isUserVideoQuotaValid,
119 isUserVideoQuotaDailyValid,
120 isUserUsernameValid,
121 isUserAdminFlagsValid,
122 isUserEmailVerifiedValid,
123 isUserNSFWPolicyValid,
124 isUserWebTorrentEnabledValid,
125 isUserAutoPlayVideoValid,
126 isUserAutoPlayNextVideoValid,
127 isUserAutoPlayNextVideoPlaylistValid,
128 isUserDisplayNameValid,
129 isUserDescriptionValid,
130 isNoInstanceConfigWarningModal,
131 isNoWelcomeModal,
132 isAvatarFile
133 }