1 import { values } from 'lodash'
2 import validator from 'validator'
3 import { UserRole } from '../../../shared'
4 import { isEmailEnabled } from '../../initializers/config'
5 import { CONSTRAINTS_FIELDS, NSFW_POLICY_TYPES } from '../../initializers/constants'
6 import { exists, isArray, isBooleanValid } from './misc'
8 const USERS_CONSTRAINTS_FIELDS = CONSTRAINTS_FIELDS.USERS
10 function isUserPasswordValid (value: string) {
11 return validator.isLength(value, USERS_CONSTRAINTS_FIELDS.PASSWORD)
14 function isUserPasswordValidOrEmpty (value: string) {
15 // Empty password is only possible if emailing is enabled.
16 if (value === '') return isEmailEnabled()
18 return isUserPasswordValid(value)
21 function isUserVideoQuotaValid (value: string) {
22 return exists(value) && validator.isInt(value + '', USERS_CONSTRAINTS_FIELDS.VIDEO_QUOTA)
25 function isUserVideoQuotaDailyValid (value: string) {
26 return exists(value) && validator.isInt(value + '', USERS_CONSTRAINTS_FIELDS.VIDEO_QUOTA_DAILY)
29 function isUserUsernameValid (value: string) {
30 const max = USERS_CONSTRAINTS_FIELDS.USERNAME.max
31 const min = USERS_CONSTRAINTS_FIELDS.USERNAME.min
32 return exists(value) && validator.matches(value, new RegExp(`^[a-z0-9._]{${min},${max}}$`))
35 function isUserDisplayNameValid (value: string) {
36 return value === null || (exists(value) && validator.isLength(value, CONSTRAINTS_FIELDS.USERS.NAME))
39 function isUserDescriptionValid (value: string) {
40 return value === null || (exists(value) && validator.isLength(value, CONSTRAINTS_FIELDS.USERS.DESCRIPTION))
43 function isUserEmailVerifiedValid (value: any) {
44 return isBooleanValid(value)
47 const nsfwPolicies = values(NSFW_POLICY_TYPES)
48 function isUserNSFWPolicyValid (value: any) {
49 return exists(value) && nsfwPolicies.includes(value)
52 function isUserWebTorrentEnabledValid (value: any) {
53 return isBooleanValid(value)
56 function isUserVideosHistoryEnabledValid (value: any) {
57 return isBooleanValid(value)
60 function isUserAutoPlayVideoValid (value: any) {
61 return isBooleanValid(value)
64 function isUserVideoLanguages (value: any) {
65 return value === null || (isArray(value) && value.length < CONSTRAINTS_FIELDS.USERS.VIDEO_LANGUAGES.max)
68 function isUserAdminFlagsValid (value: any) {
69 return exists(value) && validator.isInt('' + value)
72 function isUserBlockedValid (value: any) {
73 return isBooleanValid(value)
76 function isUserAutoPlayNextVideoValid (value: any) {
77 return isBooleanValid(value)
80 function isUserAutoPlayNextVideoPlaylistValid (value: any) {
81 return isBooleanValid(value)
84 function isNoInstanceConfigWarningModal (value: any) {
85 return isBooleanValid(value)
88 function isNoWelcomeModal (value: any) {
89 return isBooleanValid(value)
92 function isUserBlockedReasonValid (value: any) {
93 return value === null || (exists(value) && validator.isLength(value, CONSTRAINTS_FIELDS.USERS.BLOCKED_REASON))
96 function isUserRoleValid (value: any) {
97 return exists(value) && validator.isInt('' + value) && UserRole[value] !== undefined
100 // ---------------------------------------------------------------------------
103 isUserVideosHistoryEnabledValid,
106 isUserPasswordValidOrEmpty,
107 isUserVideoLanguages,
108 isUserBlockedReasonValid,
110 isUserVideoQuotaValid,
111 isUserVideoQuotaDailyValid,
113 isUserAdminFlagsValid,
114 isUserEmailVerifiedValid,
115 isUserNSFWPolicyValid,
116 isUserWebTorrentEnabledValid,
117 isUserAutoPlayVideoValid,
118 isUserAutoPlayNextVideoValid,
119 isUserAutoPlayNextVideoPlaylistValid,
120 isUserDisplayNameValid,
121 isUserDescriptionValid,
122 isNoInstanceConfigWarningModal,