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