]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame_incremental - 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
... / ...
CommitLineData
1import validator from 'validator'
2import { UserRole } from '../../../shared'
3import { CONSTRAINTS_FIELDS, NSFW_POLICY_TYPES } from '../../initializers/constants'
4import { exists, isArray, isBooleanValid, isFileValid } from './misc'
5import { values } from 'lodash'
6import { isEmailEnabled } from '../../initializers/config'
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 isNoInstanceConfigWarningModal (value: any) {
85 return isBooleanValid(value)
86}
87
88function isNoWelcomeModal (value: any) {
89 return isBooleanValid(value)
90}
91
92function isUserBlockedReasonValid (value: any) {
93 return value === null || (exists(value) && validator.isLength(value, CONSTRAINTS_FIELDS.USERS.BLOCKED_REASON))
94}
95
96function isUserRoleValid (value: any) {
97 return exists(value) && validator.isInt('' + value) && UserRole[value] !== undefined
98}
99
100const avatarMimeTypes = CONSTRAINTS_FIELDS.ACTORS.AVATAR.EXTNAME
101 .map(v => v.replace('.', ''))
102 .join('|')
103const avatarMimeTypesRegex = `image/(${avatarMimeTypes})`
104function 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
110export {
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}