]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - server/helpers/custom-validators/users.ts
autoplay next video support for playlists
[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 isUserAutoPlayNextVideoPlaylistValid (value: any) {
73 return isBooleanValid(value)
74 }
75
76 function isNoInstanceConfigWarningModal (value: any) {
77 return isBooleanValid(value)
78 }
79
80 function isNoWelcomeModal (value: any) {
81 return isBooleanValid(value)
82 }
83
84 function isUserBlockedReasonValid (value: any) {
85 return value === null || (exists(value) && validator.isLength(value, CONSTRAINTS_FIELDS.USERS.BLOCKED_REASON))
86 }
87
88 function isUserRoleValid (value: any) {
89 return exists(value) && validator.isInt('' + value) && UserRole[value] !== undefined
90 }
91
92 const avatarMimeTypes = CONSTRAINTS_FIELDS.ACTORS.AVATAR.EXTNAME
93 .map(v => v.replace('.', ''))
94 .join('|')
95 const avatarMimeTypesRegex = `image/(${avatarMimeTypes})`
96 function isAvatarFile (files: { [ fieldname: string ]: Express.Multer.File[] } | Express.Multer.File[]) {
97 return isFileValid(files, avatarMimeTypesRegex, 'avatarfile', CONSTRAINTS_FIELDS.ACTORS.AVATAR.FILE_SIZE.max)
98 }
99
100 // ---------------------------------------------------------------------------
101
102 export {
103 isUserVideosHistoryEnabledValid,
104 isUserBlockedValid,
105 isUserPasswordValid,
106 isUserVideoLanguages,
107 isUserBlockedReasonValid,
108 isUserRoleValid,
109 isUserVideoQuotaValid,
110 isUserVideoQuotaDailyValid,
111 isUserUsernameValid,
112 isUserAdminFlagsValid,
113 isUserEmailVerifiedValid,
114 isUserNSFWPolicyValid,
115 isUserWebTorrentEnabledValid,
116 isUserAutoPlayVideoValid,
117 isUserAutoPlayNextVideoValid,
118 isUserAutoPlayNextVideoPlaylistValid,
119 isUserDisplayNameValid,
120 isUserDescriptionValid,
121 isNoInstanceConfigWarningModal,
122 isNoWelcomeModal,
123 isAvatarFile
124 }