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