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