]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame_incremental - server/helpers/custom-validators/videos.ts
require -> import
[github/Chocobozzz/PeerTube.git] / server / helpers / custom-validators / videos.ts
... / ...
CommitLineData
1import { values } from 'lodash'
2import * as validator from 'validator'
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
17
18function isVideoAuthorValid (value) {
19 return isUserUsernameValid(value)
20}
21
22function isVideoDateValid (value) {
23 return validator.isDate(value)
24}
25
26function isVideoCategoryValid (value) {
27 return VIDEO_CATEGORIES[value] !== undefined
28}
29
30function isVideoLicenceValid (value) {
31 return VIDEO_LICENCES[value] !== undefined
32}
33
34function isVideoLanguageValid (value) {
35 return value === null || VIDEO_LANGUAGES[value] !== undefined
36}
37
38function isVideoNSFWValid (value) {
39 return validator.isBoolean(value)
40}
41
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
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)
56}
57
58function isVideoNameValid (value) {
59 return validator.isLength(value, VIDEOS_CONSTRAINTS_FIELDS.NAME)
60}
61
62function isVideoTagsValid (tags) {
63 return isArray(tags) &&
64 validator.isInt(tags.length, VIDEOS_CONSTRAINTS_FIELDS.TAGS) &&
65 tags.every(function (tag) {
66 return validator.isLength(tag, VIDEOS_CONSTRAINTS_FIELDS.TAG)
67 })
68}
69
70function isVideoThumbnailValid (value) {
71 return validator.isLength(value, VIDEOS_CONSTRAINTS_FIELDS.THUMBNAIL)
72}
73
74function isVideoThumbnailDataValid (value) {
75 return validator.isByteLength(value, VIDEOS_CONSTRAINTS_FIELDS.THUMBNAIL_DATA)
76}
77
78function isVideoRemoteIdValid (value) {
79 return validator.isUUID(value, 4)
80}
81
82function isVideoAbuseReasonValid (value) {
83 return validator.isLength(value, VIDEO_ABUSES_CONSTRAINTS_FIELDS.REASON)
84}
85
86function isVideoAbuseReporterUsernameValid (value) {
87 return isUserUsernameValid(value)
88}
89
90function isVideoViewsValid (value) {
91 return validator.isInt(value + '', VIDEOS_CONSTRAINTS_FIELDS.VIEWS)
92}
93
94function isVideoLikesValid (value) {
95 return validator.isInt(value + '', VIDEOS_CONSTRAINTS_FIELDS.LIKES)
96}
97
98function isVideoDislikesValid (value) {
99 return validator.isInt(value + '', VIDEOS_CONSTRAINTS_FIELDS.DISLIKES)
100}
101
102function isVideoEventCountValid (value) {
103 return validator.isInt(value + '', VIDEO_EVENTS_CONSTRAINTS_FIELDS.COUNT)
104}
105
106function isVideoRatingTypeValid (value) {
107 return values(VIDEO_RATE_TYPES).indexOf(value) !== -1
108}
109
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
125// ---------------------------------------------------------------------------
126
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}