]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - server/helpers/custom-validators/users.ts
Merge branch 'release/v1.0.0' into develop
[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'
ed638e53 4import { CONSTRAINTS_FIELDS, NSFW_POLICY_TYPES } from '../../initializers'
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
7efe153b 49function isUserAutoPlayVideoValid (value: any) {
e6921918
C
50 return isBooleanValid(value)
51}
52
53function isUserBlockedValid (value: any) {
54 return isBooleanValid(value)
7efe153b
AL
55}
56
eacb25c4
C
57function isUserBlockedReasonValid (value: any) {
58 return value === null || (exists(value) && validator.isLength(value, CONSTRAINTS_FIELDS.USERS.BLOCKED_REASON))
59}
60
954605a8
C
61function isUserRoleValid (value: any) {
62 return exists(value) && validator.isInt('' + value) && UserRole[value] !== undefined
63}
64
ac81d1a0
C
65const avatarMimeTypes = CONSTRAINTS_FIELDS.ACTORS.AVATAR.EXTNAME
66 .map(v => v.replace('.', ''))
67 .join('|')
68const avatarMimeTypesRegex = `image/(${avatarMimeTypes})`
c5911fd3 69function isAvatarFile (files: { [ fieldname: string ]: Express.Multer.File[] } | Express.Multer.File[]) {
0c237b19 70 return isFileValid(files, avatarMimeTypesRegex, 'avatarfile', CONSTRAINTS_FIELDS.ACTORS.AVATAR.FILE_SIZE.max)
c5911fd3
C
71}
72
e4c55619
C
73// ---------------------------------------------------------------------------
74
65fcc311 75export {
e6921918 76 isUserBlockedValid,
65fcc311 77 isUserPasswordValid,
eacb25c4 78 isUserBlockedReasonValid,
65fcc311 79 isUserRoleValid,
b0f9f39e 80 isUserVideoQuotaValid,
bee0abff 81 isUserVideoQuotaDailyValid,
65fcc311 82 isUserUsernameValid,
d9eaee39 83 isUserEmailVerifiedValid,
0883b324 84 isUserNSFWPolicyValid,
ed638e53 85 isUserWebTorrentEnabledValid,
c5911fd3 86 isUserAutoPlayVideoValid,
ed56ad11 87 isUserDisplayNameValid,
2422c46b 88 isUserDescriptionValid,
c5911fd3 89 isAvatarFile
65fcc311 90}