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