]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - server/helpers/custom-validators/videos.ts
require -> import
[github/Chocobozzz/PeerTube.git] / server / helpers / custom-validators / videos.ts
CommitLineData
65fcc311 1import { values } from 'lodash'
4d4e5cd4 2import * as validator from 'validator'
65fcc311
C
3
4import {
5 CONSTRAINTS_FIELDS,
6 VIDEO_CATEGORIES,
7 VIDEO_LICENCES,
8 VIDEO_LANGUAGES,
9 VIDEO_RATE_TYPES
10} from '../../initializers'
11import { isUserUsernameValid } from './users'
12import { isArray } from './misc'
13
14const VIDEOS_CONSTRAINTS_FIELDS = CONSTRAINTS_FIELDS.VIDEOS
15const VIDEO_ABUSES_CONSTRAINTS_FIELDS = CONSTRAINTS_FIELDS.VIDEO_ABUSES
16const VIDEO_EVENTS_CONSTRAINTS_FIELDS = CONSTRAINTS_FIELDS.VIDEO_EVENTS
0b697522 17
be587647 18function isVideoAuthorValid (value) {
65fcc311 19 return isUserUsernameValid(value)
be587647
C
20}
21
22function isVideoDateValid (value) {
23 return validator.isDate(value)
24}
25
6e07c3de 26function isVideoCategoryValid (value) {
65fcc311 27 return VIDEO_CATEGORIES[value] !== undefined
6e07c3de
C
28}
29
6f0c39e2 30function isVideoLicenceValid (value) {
65fcc311 31 return VIDEO_LICENCES[value] !== undefined
6f0c39e2
C
32}
33
3092476e 34function isVideoLanguageValid (value) {
65fcc311 35 return value === null || VIDEO_LANGUAGES[value] !== undefined
3092476e
C
36}
37
31b59b47
C
38function isVideoNSFWValid (value) {
39 return validator.isBoolean(value)
40}
41
be587647
C
42function isVideoDescriptionValid (value) {
43 return validator.isLength(value, VIDEOS_CONSTRAINTS_FIELDS.DESCRIPTION)
44}
45
46function isVideoDurationValid (value) {
47 return validator.isInt(value + '', VIDEOS_CONSTRAINTS_FIELDS.DURATION)
48}
49
feb4bdfd
C
50function isVideoExtnameValid (value) {
51 return VIDEOS_CONSTRAINTS_FIELDS.EXTNAME.indexOf(value) !== -1
52}
53
54function isVideoInfoHashValid (value) {
55 return validator.isLength(value, VIDEOS_CONSTRAINTS_FIELDS.INFO_HASH)
be587647
C
56}
57
58function isVideoNameValid (value) {
59 return validator.isLength(value, VIDEOS_CONSTRAINTS_FIELDS.NAME)
be587647
C
60}
61
62function isVideoTagsValid (tags) {
65fcc311 63 return isArray(tags) &&
be587647
C
64 validator.isInt(tags.length, VIDEOS_CONSTRAINTS_FIELDS.TAGS) &&
65 tags.every(function (tag) {
e54163c2 66 return validator.isLength(tag, VIDEOS_CONSTRAINTS_FIELDS.TAG)
be587647
C
67 })
68}
69
70function isVideoThumbnailValid (value) {
aaf61f38
C
71 return validator.isLength(value, VIDEOS_CONSTRAINTS_FIELDS.THUMBNAIL)
72}
73
4d324488
C
74function isVideoThumbnailDataValid (value) {
75 return validator.isByteLength(value, VIDEOS_CONSTRAINTS_FIELDS.THUMBNAIL_DATA)
be587647
C
76}
77
558d7c23 78function isVideoRemoteIdValid (value) {
feb4bdfd 79 return validator.isUUID(value, 4)
558d7c23
C
80}
81
55fa55a9
C
82function isVideoAbuseReasonValid (value) {
83 return validator.isLength(value, VIDEO_ABUSES_CONSTRAINTS_FIELDS.REASON)
e4c55619
C
84}
85
55fa55a9 86function isVideoAbuseReporterUsernameValid (value) {
65fcc311 87 return isUserUsernameValid(value)
3d118fb5
C
88}
89
9e167724 90function isVideoViewsValid (value) {
e4c87ec2 91 return validator.isInt(value + '', VIDEOS_CONSTRAINTS_FIELDS.VIEWS)
9e167724
C
92}
93
94function isVideoLikesValid (value) {
e4c87ec2 95 return validator.isInt(value + '', VIDEOS_CONSTRAINTS_FIELDS.LIKES)
9e167724
C
96}
97
98function isVideoDislikesValid (value) {
e4c87ec2
C
99 return validator.isInt(value + '', VIDEOS_CONSTRAINTS_FIELDS.DISLIKES)
100}
101
102function isVideoEventCountValid (value) {
103 return validator.isInt(value + '', VIDEO_EVENTS_CONSTRAINTS_FIELDS.COUNT)
9e167724
C
104}
105
d38b8281 106function isVideoRatingTypeValid (value) {
65fcc311 107 return values(VIDEO_RATE_TYPES).indexOf(value) !== -1
d38b8281
C
108}
109
f6f7dfee
C
110function isVideoFile (value, files) {
111 // Should have files
112 if (!files) return false
113
114 // Should have videofile file
115 const videofile = files.videofile
116 if (!videofile || videofile.length === 0) return false
117
118 // The file should exist
119 const file = videofile[0]
120 if (!file || !file.originalname) return false
121
122 return new RegExp('^video/(webm|mp4|ogg)$', 'i').test(file.mimetype)
123}
124
55fa55a9
C
125// ---------------------------------------------------------------------------
126
65fcc311
C
127export {
128 isVideoAuthorValid,
129 isVideoDateValid,
130 isVideoCategoryValid,
131 isVideoLicenceValid,
132 isVideoLanguageValid,
133 isVideoNSFWValid,
134 isVideoDescriptionValid,
135 isVideoDurationValid,
136 isVideoInfoHashValid,
137 isVideoNameValid,
138 isVideoTagsValid,
139 isVideoThumbnailValid,
140 isVideoThumbnailDataValid,
141 isVideoExtnameValid,
142 isVideoRemoteIdValid,
143 isVideoAbuseReasonValid,
144 isVideoAbuseReporterUsernameValid,
145 isVideoFile,
146 isVideoViewsValid,
147 isVideoLikesValid,
148 isVideoRatingTypeValid,
149 isVideoDislikesValid,
150 isVideoEventCountValid
151}