]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - server/helpers/custom-validators/users.ts
63673bee217e2b07616a1824840cc31f6022b450
[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 { CONFIG } 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 === '') {
17 return !!CONFIG.SMTP.HOSTNAME && !!CONFIG.SMTP.PORT
18 }
19 return isUserPasswordValid(value)
20 }
21
22 function isUserVideoQuotaValid (value: string) {
23 return exists(value) && validator.isInt(value + '', USERS_CONSTRAINTS_FIELDS.VIDEO_QUOTA)
24 }
25
26 function isUserVideoQuotaDailyValid (value: string) {
27 return exists(value) && validator.isInt(value + '', USERS_CONSTRAINTS_FIELDS.VIDEO_QUOTA_DAILY)
28 }
29
30 function isUserUsernameValid (value: string) {
31 const max = USERS_CONSTRAINTS_FIELDS.USERNAME.max
32 const min = USERS_CONSTRAINTS_FIELDS.USERNAME.min
33 return exists(value) && validator.matches(value, new RegExp(`^[a-z0-9._]{${min},${max}}$`))
34 }
35
36 function isUserDisplayNameValid (value: string) {
37 return value === null || (exists(value) && validator.isLength(value, CONSTRAINTS_FIELDS.USERS.NAME))
38 }
39
40 function isUserDescriptionValid (value: string) {
41 return value === null || (exists(value) && validator.isLength(value, CONSTRAINTS_FIELDS.USERS.DESCRIPTION))
42 }
43
44 function isUserEmailVerifiedValid (value: any) {
45 return isBooleanValid(value)
46 }
47
48 const nsfwPolicies = values(NSFW_POLICY_TYPES)
49 function isUserNSFWPolicyValid (value: any) {
50 return exists(value) && nsfwPolicies.indexOf(value) !== -1
51 }
52
53 function isUserWebTorrentEnabledValid (value: any) {
54 return isBooleanValid(value)
55 }
56
57 function isUserVideosHistoryEnabledValid (value: any) {
58 return isBooleanValid(value)
59 }
60
61 function isUserAutoPlayVideoValid (value: any) {
62 return isBooleanValid(value)
63 }
64
65 function isUserVideoLanguages (value: any) {
66 return value === null || (isArray(value) && value.length < CONSTRAINTS_FIELDS.USERS.VIDEO_LANGUAGES.max)
67 }
68
69 function isUserAdminFlagsValid (value: any) {
70 return exists(value) && validator.isInt('' + value)
71 }
72
73 function isUserBlockedValid (value: any) {
74 return isBooleanValid(value)
75 }
76
77 function isUserAutoPlayNextVideoValid (value: any) {
78 return isBooleanValid(value)
79 }
80
81 function isUserAutoPlayNextVideoPlaylistValid (value: any) {
82 return isBooleanValid(value)
83 }
84
85 function isNoInstanceConfigWarningModal (value: any) {
86 return isBooleanValid(value)
87 }
88
89 function isNoWelcomeModal (value: any) {
90 return isBooleanValid(value)
91 }
92
93 function isUserBlockedReasonValid (value: any) {
94 return value === null || (exists(value) && validator.isLength(value, CONSTRAINTS_FIELDS.USERS.BLOCKED_REASON))
95 }
96
97 function isUserRoleValid (value: any) {
98 return exists(value) && validator.isInt('' + value) && UserRole[value] !== undefined
99 }
100
101 const avatarMimeTypes = CONSTRAINTS_FIELDS.ACTORS.AVATAR.EXTNAME
102 .map(v => v.replace('.', ''))
103 .join('|')
104 const avatarMimeTypesRegex = `image/(${avatarMimeTypes})`
105 function isAvatarFile (files: { [ fieldname: string ]: Express.Multer.File[] } | Express.Multer.File[]) {
106 return isFileValid(files, avatarMimeTypesRegex, 'avatarfile', CONSTRAINTS_FIELDS.ACTORS.AVATAR.FILE_SIZE.max)
107 }
108
109 // ---------------------------------------------------------------------------
110
111 export {
112 isUserVideosHistoryEnabledValid,
113 isUserBlockedValid,
114 isUserPasswordValid,
115 isUserPasswordValidOrEmpty,
116 isUserVideoLanguages,
117 isUserBlockedReasonValid,
118 isUserRoleValid,
119 isUserVideoQuotaValid,
120 isUserVideoQuotaDailyValid,
121 isUserUsernameValid,
122 isUserAdminFlagsValid,
123 isUserEmailVerifiedValid,
124 isUserNSFWPolicyValid,
125 isUserWebTorrentEnabledValid,
126 isUserAutoPlayVideoValid,
127 isUserAutoPlayNextVideoValid,
128 isUserAutoPlayNextVideoPlaylistValid,
129 isUserDisplayNameValid,
130 isUserDescriptionValid,
131 isNoInstanceConfigWarningModal,
132 isNoWelcomeModal,
133 isAvatarFile
134 }