1 import validator from 'validator'
2 import { UserRole } from '@shared/models'
3 import { isEmailEnabled } from '../../initializers/config'
4 import { CONSTRAINTS_FIELDS, NSFW_POLICY_TYPES } from '../../initializers/constants'
5 import { exists, isArray, isBooleanValid } from './misc'
7 const USERS_CONSTRAINTS_FIELDS = CONSTRAINTS_FIELDS.USERS
9 function isUserPasswordValid (value: string) {
10 return validator.isLength(value, USERS_CONSTRAINTS_FIELDS.PASSWORD)
13 function isUserPasswordValidOrEmpty (value: string) {
14 // Empty password is only possible if emailing is enabled.
15 if (value === '') return isEmailEnabled()
17 return isUserPasswordValid(value)
20 function isUserVideoQuotaValid (value: string) {
21 return exists(value) && validator.isInt(value + '', USERS_CONSTRAINTS_FIELDS.VIDEO_QUOTA)
24 function isUserVideoQuotaDailyValid (value: string) {
25 return exists(value) && validator.isInt(value + '', USERS_CONSTRAINTS_FIELDS.VIDEO_QUOTA_DAILY)
28 function isUserUsernameValid (value: string) {
29 return exists(value) &&
30 validator.matches(value, new RegExp(`^[a-z0-9_]+([a-z0-9_.-]+[a-z0-9_]+)?$`)) &&
31 validator.isLength(value, USERS_CONSTRAINTS_FIELDS.USERNAME)
34 function isUserDisplayNameValid (value: string) {
35 return value === null || (exists(value) && validator.isLength(value, CONSTRAINTS_FIELDS.USERS.NAME))
38 function isUserDescriptionValid (value: string) {
39 return value === null || (exists(value) && validator.isLength(value, CONSTRAINTS_FIELDS.USERS.DESCRIPTION))
42 function isUserEmailVerifiedValid (value: any) {
43 return isBooleanValid(value)
46 const nsfwPolicies = new Set(Object.values(NSFW_POLICY_TYPES))
47 function isUserNSFWPolicyValid (value: any) {
48 return exists(value) && nsfwPolicies.has(value)
51 function isUserP2PEnabledValid (value: any) {
52 return isBooleanValid(value)
55 function isUserVideosHistoryEnabledValid (value: any) {
56 return isBooleanValid(value)
59 function isUserAutoPlayVideoValid (value: any) {
60 return isBooleanValid(value)
63 function isUserVideoLanguages (value: any) {
64 return value === null || (isArray(value) && value.length < CONSTRAINTS_FIELDS.USERS.VIDEO_LANGUAGES.max)
67 function isUserAdminFlagsValid (value: any) {
68 return exists(value) && validator.isInt('' + value)
71 function isUserBlockedValid (value: any) {
72 return isBooleanValid(value)
75 function isUserAutoPlayNextVideoValid (value: any) {
76 return isBooleanValid(value)
79 function isUserAutoPlayNextVideoPlaylistValid (value: any) {
80 return isBooleanValid(value)
83 function isUserNoModal (value: any) {
84 return isBooleanValid(value)
87 function isUserBlockedReasonValid (value: any) {
88 return value === null || (exists(value) && validator.isLength(value, CONSTRAINTS_FIELDS.USERS.BLOCKED_REASON))
91 function isUserRoleValid (value: any) {
92 return exists(value) && validator.isInt('' + value) && [ UserRole.ADMINISTRATOR, UserRole.MODERATOR, UserRole.USER ].includes(value)
95 // ---------------------------------------------------------------------------
98 isUserVideosHistoryEnabledValid,
101 isUserPasswordValidOrEmpty,
102 isUserVideoLanguages,
103 isUserBlockedReasonValid,
105 isUserVideoQuotaValid,
106 isUserVideoQuotaDailyValid,
108 isUserAdminFlagsValid,
109 isUserEmailVerifiedValid,
110 isUserNSFWPolicyValid,
111 isUserP2PEnabledValid,
112 isUserAutoPlayVideoValid,
113 isUserAutoPlayNextVideoValid,
114 isUserAutoPlayNextVideoPlaylistValid,
115 isUserDisplayNameValid,
116 isUserDescriptionValid,