]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - server/helpers/custom-validators/users.ts
Implement daily upload limit (#956)
[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'
0883b324 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
0883b324
C
36const nsfwPolicies = values(NSFW_POLICY_TYPES)
37function isUserNSFWPolicyValid (value: any) {
38 return exists(value) && nsfwPolicies.indexOf(value) !== -1
7efe153b
AL
39}
40
41function isUserAutoPlayVideoValid (value: any) {
e6921918
C
42 return isBooleanValid(value)
43}
44
45function isUserBlockedValid (value: any) {
46 return isBooleanValid(value)
7efe153b
AL
47}
48
eacb25c4
C
49function isUserBlockedReasonValid (value: any) {
50 return value === null || (exists(value) && validator.isLength(value, CONSTRAINTS_FIELDS.USERS.BLOCKED_REASON))
51}
52
954605a8
C
53function isUserRoleValid (value: any) {
54 return exists(value) && validator.isInt('' + value) && UserRole[value] !== undefined
55}
56
ac81d1a0
C
57const avatarMimeTypes = CONSTRAINTS_FIELDS.ACTORS.AVATAR.EXTNAME
58 .map(v => v.replace('.', ''))
59 .join('|')
60const avatarMimeTypesRegex = `image/(${avatarMimeTypes})`
c5911fd3 61function isAvatarFile (files: { [ fieldname: string ]: Express.Multer.File[] } | Express.Multer.File[]) {
0c237b19 62 return isFileValid(files, avatarMimeTypesRegex, 'avatarfile', CONSTRAINTS_FIELDS.ACTORS.AVATAR.FILE_SIZE.max)
c5911fd3
C
63}
64
e4c55619
C
65// ---------------------------------------------------------------------------
66
65fcc311 67export {
e6921918 68 isUserBlockedValid,
65fcc311 69 isUserPasswordValid,
eacb25c4 70 isUserBlockedReasonValid,
65fcc311 71 isUserRoleValid,
b0f9f39e 72 isUserVideoQuotaValid,
bee0abff 73 isUserVideoQuotaDailyValid,
65fcc311 74 isUserUsernameValid,
0883b324 75 isUserNSFWPolicyValid,
c5911fd3 76 isUserAutoPlayVideoValid,
ed56ad11 77 isUserDisplayNameValid,
2422c46b 78 isUserDescriptionValid,
c5911fd3 79 isAvatarFile
65fcc311 80}