]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - server/helpers/custom-validators/users.ts
Add ability to limit videos history size
[github/Chocobozzz/PeerTube.git] / server / helpers / custom-validators / users.ts
CommitLineData
fdbda9e3 1import 'express-validator'
ac81d1a0 2import * as validator from 'validator'
ee9e7b61 3import { UserRole } from '../../../shared'
74dc3bca 4import { CONSTRAINTS_FIELDS, NSFW_POLICY_TYPES } from '../../initializers/constants'
e6921918 5import { exists, isFileValid, isBooleanValid } from './misc'
0883b324 6import { values } from 'lodash'
ee9e7b61 7
65fcc311 8const USERS_CONSTRAINTS_FIELDS = CONSTRAINTS_FIELDS.USERS
e4c55619 9
69818c93 10function isUserPasswordValid (value: string) {
9bd26629
C
11 return validator.isLength(value, USERS_CONSTRAINTS_FIELDS.PASSWORD)
12}
13
b0f9f39e
C
14function isUserVideoQuotaValid (value: string) {
15 return exists(value) && validator.isInt(value + '', USERS_CONSTRAINTS_FIELDS.VIDEO_QUOTA)
16}
17
bee0abff
FA
18function isUserVideoQuotaDailyValid (value: string) {
19 return exists(value) && validator.isInt(value + '', USERS_CONSTRAINTS_FIELDS.VIDEO_QUOTA_DAILY)
20}
21
69818c93 22function isUserUsernameValid (value: string) {
9bd26629
C
23 const max = USERS_CONSTRAINTS_FIELDS.USERNAME.max
24 const min = USERS_CONSTRAINTS_FIELDS.USERNAME.min
563d032e 25 return exists(value) && validator.matches(value, new RegExp(`^[a-z0-9._]{${min},${max}}$`))
e4c55619
C
26}
27
ed56ad11
C
28function isUserDisplayNameValid (value: string) {
29 return value === null || (exists(value) && validator.isLength(value, CONSTRAINTS_FIELDS.USERS.NAME))
30}
31
2422c46b
C
32function isUserDescriptionValid (value: string) {
33 return value === null || (exists(value) && validator.isLength(value, CONSTRAINTS_FIELDS.USERS.DESCRIPTION))
34}
35
d9eaee39
JM
36function isUserEmailVerifiedValid (value: any) {
37 return isBooleanValid(value)
38}
39
0883b324
C
40const nsfwPolicies = values(NSFW_POLICY_TYPES)
41function isUserNSFWPolicyValid (value: any) {
42 return exists(value) && nsfwPolicies.indexOf(value) !== -1
7efe153b
AL
43}
44
ed638e53
RK
45function isUserWebTorrentEnabledValid (value: any) {
46 return isBooleanValid(value)
64cc5e85
RK
47}
48
8b9a525a
C
49function isUserVideosHistoryEnabledValid (value: any) {
50 return isBooleanValid(value)
51}
52
7efe153b 53function isUserAutoPlayVideoValid (value: any) {
e6921918
C
54 return isBooleanValid(value)
55}
56
57function isUserBlockedValid (value: any) {
58 return isBooleanValid(value)
7efe153b
AL
59}
60
eacb25c4
C
61function isUserBlockedReasonValid (value: any) {
62 return value === null || (exists(value) && validator.isLength(value, CONSTRAINTS_FIELDS.USERS.BLOCKED_REASON))
63}
64
954605a8
C
65function isUserRoleValid (value: any) {
66 return exists(value) && validator.isInt('' + value) && UserRole[value] !== undefined
67}
68
ac81d1a0
C
69const avatarMimeTypes = CONSTRAINTS_FIELDS.ACTORS.AVATAR.EXTNAME
70 .map(v => v.replace('.', ''))
71 .join('|')
72const avatarMimeTypesRegex = `image/(${avatarMimeTypes})`
c5911fd3 73function isAvatarFile (files: { [ fieldname: string ]: Express.Multer.File[] } | Express.Multer.File[]) {
0c237b19 74 return isFileValid(files, avatarMimeTypesRegex, 'avatarfile', CONSTRAINTS_FIELDS.ACTORS.AVATAR.FILE_SIZE.max)
c5911fd3
C
75}
76
e4c55619
C
77// ---------------------------------------------------------------------------
78
65fcc311 79export {
8b9a525a 80 isUserVideosHistoryEnabledValid,
e6921918 81 isUserBlockedValid,
65fcc311 82 isUserPasswordValid,
eacb25c4 83 isUserBlockedReasonValid,
65fcc311 84 isUserRoleValid,
b0f9f39e 85 isUserVideoQuotaValid,
bee0abff 86 isUserVideoQuotaDailyValid,
65fcc311 87 isUserUsernameValid,
d9eaee39 88 isUserEmailVerifiedValid,
0883b324 89 isUserNSFWPolicyValid,
ed638e53 90 isUserWebTorrentEnabledValid,
c5911fd3 91 isUserAutoPlayVideoValid,
ed56ad11 92 isUserDisplayNameValid,
2422c46b 93 isUserDescriptionValid,
c5911fd3 94 isAvatarFile
65fcc311 95}