]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - server/helpers/custom-validators/users.ts
Use same mastodon regex for usernames
[github/Chocobozzz/PeerTube.git] / server / helpers / custom-validators / users.ts
CommitLineData
2cb03dc1 1import { values } from 'lodash'
7cde3b9c 2import validator from 'validator'
d17c7b4e 3import { UserRole } from '@shared/models'
2cb03dc1 4import { isEmailEnabled } from '../../initializers/config'
74dc3bca 5import { CONSTRAINTS_FIELDS, NSFW_POLICY_TYPES } from '../../initializers/constants'
213e30ef 6import { exists, isArray, isBooleanValid } from './misc'
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
45f1bd72
JL
14function isUserPasswordValidOrEmpty (value: string) {
15 // Empty password is only possible if emailing is enabled.
4c1c1709
C
16 if (value === '') return isEmailEnabled()
17
45f1bd72
JL
18 return isUserPasswordValid(value)
19}
20
b0f9f39e
C
21function isUserVideoQuotaValid (value: string) {
22 return exists(value) && validator.isInt(value + '', USERS_CONSTRAINTS_FIELDS.VIDEO_QUOTA)
23}
24
bee0abff
FA
25function isUserVideoQuotaDailyValid (value: string) {
26 return exists(value) && validator.isInt(value + '', USERS_CONSTRAINTS_FIELDS.VIDEO_QUOTA_DAILY)
27}
28
69818c93 29function isUserUsernameValid (value: string) {
35a0a924
C
30 return exists(value) &&
31 validator.matches(value, new RegExp(`^[a-z0-9_]+([a-z0-9_.-]+[a-z0-9_]+)?$`)) &&
32 validator.isLength(value, USERS_CONSTRAINTS_FIELDS.USERNAME)
e4c55619
C
33}
34
ed56ad11
C
35function isUserDisplayNameValid (value: string) {
36 return value === null || (exists(value) && validator.isLength(value, CONSTRAINTS_FIELDS.USERS.NAME))
37}
38
2422c46b
C
39function isUserDescriptionValid (value: string) {
40 return value === null || (exists(value) && validator.isLength(value, CONSTRAINTS_FIELDS.USERS.DESCRIPTION))
41}
42
d9eaee39
JM
43function isUserEmailVerifiedValid (value: any) {
44 return isBooleanValid(value)
45}
46
0883b324
C
47const nsfwPolicies = values(NSFW_POLICY_TYPES)
48function isUserNSFWPolicyValid (value: any) {
bdd428a6 49 return exists(value) && nsfwPolicies.includes(value)
7efe153b
AL
50}
51
a9bfa85d 52function isUserP2PEnabledValid (value: any) {
ed638e53 53 return isBooleanValid(value)
64cc5e85
RK
54}
55
8b9a525a
C
56function isUserVideosHistoryEnabledValid (value: any) {
57 return isBooleanValid(value)
58}
59
7efe153b 60function isUserAutoPlayVideoValid (value: any) {
e6921918
C
61 return isBooleanValid(value)
62}
63
3caf77d3
C
64function isUserVideoLanguages (value: any) {
65 return value === null || (isArray(value) && value.length < CONSTRAINTS_FIELDS.USERS.VIDEO_LANGUAGES.max)
66}
67
1eddc9a7
C
68function isUserAdminFlagsValid (value: any) {
69 return exists(value) && validator.isInt('' + value)
70}
71
e6921918
C
72function isUserBlockedValid (value: any) {
73 return isBooleanValid(value)
7efe153b
AL
74}
75
6aa54148
L
76function isUserAutoPlayNextVideoValid (value: any) {
77 return isBooleanValid(value)
78}
79
bee29df8
RK
80function isUserAutoPlayNextVideoPlaylistValid (value: any) {
81 return isBooleanValid(value)
82}
83
8f581725 84function isUserNoModal (value: any) {
43d0ea7f
C
85 return isBooleanValid(value)
86}
87
eacb25c4
C
88function isUserBlockedReasonValid (value: any) {
89 return value === null || (exists(value) && validator.isLength(value, CONSTRAINTS_FIELDS.USERS.BLOCKED_REASON))
90}
91
954605a8 92function isUserRoleValid (value: any) {
fba87e27 93 return exists(value) && validator.isInt('' + value) && [ UserRole.ADMINISTRATOR, UserRole.MODERATOR, UserRole.USER ].includes(value)
954605a8
C
94}
95
e4c55619
C
96// ---------------------------------------------------------------------------
97
65fcc311 98export {
8b9a525a 99 isUserVideosHistoryEnabledValid,
e6921918 100 isUserBlockedValid,
65fcc311 101 isUserPasswordValid,
45f1bd72 102 isUserPasswordValidOrEmpty,
3caf77d3 103 isUserVideoLanguages,
eacb25c4 104 isUserBlockedReasonValid,
65fcc311 105 isUserRoleValid,
b0f9f39e 106 isUserVideoQuotaValid,
bee0abff 107 isUserVideoQuotaDailyValid,
65fcc311 108 isUserUsernameValid,
1eddc9a7 109 isUserAdminFlagsValid,
d9eaee39 110 isUserEmailVerifiedValid,
0883b324 111 isUserNSFWPolicyValid,
a9bfa85d 112 isUserP2PEnabledValid,
c5911fd3 113 isUserAutoPlayVideoValid,
6aa54148 114 isUserAutoPlayNextVideoValid,
bee29df8 115 isUserAutoPlayNextVideoPlaylistValid,
ed56ad11 116 isUserDisplayNameValid,
2422c46b 117 isUserDescriptionValid,
8f581725 118 isUserNoModal
65fcc311 119}