]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - server/helpers/custom-validators/videos.ts
Update webpack config
[github/Chocobozzz/PeerTube.git] / server / helpers / custom-validators / videos.ts
CommitLineData
65fcc311 1import { values } from 'lodash'
4d4e5cd4 2import * as validator from 'validator'
1840c2f7 3import 'multer'
65fcc311
C
4
5import {
6 CONSTRAINTS_FIELDS,
7 VIDEO_CATEGORIES,
8 VIDEO_LICENCES,
9 VIDEO_LANGUAGES,
93e1258c
C
10 VIDEO_RATE_TYPES,
11 VIDEO_FILE_RESOLUTIONS
65fcc311
C
12} from '../../initializers'
13import { isUserUsernameValid } from './users'
69818c93 14import { isArray, exists } from './misc'
ee9e7b61 15import { VideoRateType } from '../../../shared'
65fcc311
C
16
17const VIDEOS_CONSTRAINTS_FIELDS = CONSTRAINTS_FIELDS.VIDEOS
18const VIDEO_ABUSES_CONSTRAINTS_FIELDS = CONSTRAINTS_FIELDS.VIDEO_ABUSES
19const VIDEO_EVENTS_CONSTRAINTS_FIELDS = CONSTRAINTS_FIELDS.VIDEO_EVENTS
0b697522 20
0a6658fd
C
21function isVideoIdOrUUIDValid (value: string) {
22 return validator.isInt(value) || isVideoUUIDValid(value)
23}
24
69818c93 25function isVideoAuthorValid (value: string) {
65fcc311 26 return isUserUsernameValid(value)
be587647
C
27}
28
69818c93
C
29function isVideoDateValid (value: string) {
30 return exists(value) && validator.isISO8601(value)
be587647
C
31}
32
69818c93 33function isVideoCategoryValid (value: number) {
65fcc311 34 return VIDEO_CATEGORIES[value] !== undefined
6e07c3de
C
35}
36
69818c93 37function isVideoLicenceValid (value: number) {
65fcc311 38 return VIDEO_LICENCES[value] !== undefined
6f0c39e2
C
39}
40
69818c93 41function isVideoLanguageValid (value: number) {
65fcc311 42 return value === null || VIDEO_LANGUAGES[value] !== undefined
3092476e
C
43}
44
69818c93
C
45function isVideoNSFWValid (value: any) {
46 return typeof value === 'boolean' || (typeof value === 'string' && validator.isBoolean(value))
31b59b47
C
47}
48
69818c93
C
49function isVideoDescriptionValid (value: string) {
50 return exists(value) && validator.isLength(value, VIDEOS_CONSTRAINTS_FIELDS.DESCRIPTION)
be587647
C
51}
52
69818c93
C
53function isVideoDurationValid (value: string) {
54 return exists(value) && validator.isInt(value + '', VIDEOS_CONSTRAINTS_FIELDS.DURATION)
be587647
C
55}
56
69818c93
C
57function isVideoNameValid (value: string) {
58 return exists(value) && validator.isLength(value, VIDEOS_CONSTRAINTS_FIELDS.NAME)
be587647
C
59}
60
69818c93 61function isVideoTagsValid (tags: string[]) {
65fcc311 62 return isArray(tags) &&
69818c93 63 validator.isInt(tags.length.toString(), VIDEOS_CONSTRAINTS_FIELDS.TAGS) &&
075f16ca 64 tags.every(tag => {
69818c93 65 return exists(tag) && validator.isLength(tag, VIDEOS_CONSTRAINTS_FIELDS.TAG)
be587647
C
66 })
67}
68
69818c93
C
69function isVideoThumbnailValid (value: string) {
70 return exists(value) && validator.isLength(value, VIDEOS_CONSTRAINTS_FIELDS.THUMBNAIL)
aaf61f38
C
71}
72
69818c93
C
73function isVideoThumbnailDataValid (value: string) {
74 return exists(value) && validator.isByteLength(value, VIDEOS_CONSTRAINTS_FIELDS.THUMBNAIL_DATA)
be587647
C
75}
76
0a6658fd
C
77function isVideoUUIDValid (value: string) {
78 return exists(value) && validator.isUUID('' + value, 4)
558d7c23
C
79}
80
69818c93
C
81function isVideoAbuseReasonValid (value: string) {
82 return exists(value) && validator.isLength(value, VIDEO_ABUSES_CONSTRAINTS_FIELDS.REASON)
e4c55619
C
83}
84
69818c93 85function isVideoAbuseReporterUsernameValid (value: string) {
65fcc311 86 return isUserUsernameValid(value)
3d118fb5
C
87}
88
69818c93
C
89function isVideoViewsValid (value: string) {
90 return exists(value) && validator.isInt(value + '', VIDEOS_CONSTRAINTS_FIELDS.VIEWS)
9e167724
C
91}
92
69818c93
C
93function isVideoLikesValid (value: string) {
94 return exists(value) && validator.isInt(value + '', VIDEOS_CONSTRAINTS_FIELDS.LIKES)
9e167724
C
95}
96
69818c93
C
97function isVideoDislikesValid (value: string) {
98 return exists(value) && validator.isInt(value + '', VIDEOS_CONSTRAINTS_FIELDS.DISLIKES)
e4c87ec2
C
99}
100
69818c93
C
101function isVideoEventCountValid (value: string) {
102 return exists(value) && validator.isInt(value + '', VIDEO_EVENTS_CONSTRAINTS_FIELDS.COUNT)
9e167724
C
103}
104
69818c93 105function isVideoRatingTypeValid (value: string) {
ee9e7b61 106 return values(VIDEO_RATE_TYPES).indexOf(value as VideoRateType) !== -1
d38b8281
C
107}
108
69818c93 109function isVideoFile (value: string, files: { [ fieldname: string ]: Express.Multer.File[] }) {
f6f7dfee
C
110 // Should have files
111 if (!files) return false
112
113 // Should have videofile file
114 const videofile = files.videofile
115 if (!videofile || videofile.length === 0) return false
116
117 // The file should exist
118 const file = videofile[0]
119 if (!file || !file.originalname) return false
120
121 return new RegExp('^video/(webm|mp4|ogg)$', 'i').test(file.mimetype)
122}
123
93e1258c
C
124function isVideoFileSizeValid (value: string) {
125 return exists(value) && validator.isInt(value + '', VIDEOS_CONSTRAINTS_FIELDS.FILE_SIZE)
126}
127
128function isVideoFileResolutionValid (value: string) {
129 return VIDEO_FILE_RESOLUTIONS[value] !== undefined
130}
131
132function isVideoFileExtnameValid (value: string) {
133 return VIDEOS_CONSTRAINTS_FIELDS.EXTNAME.indexOf(value) !== -1
134}
135
136function isVideoFileInfoHashValid (value: string) {
137 return exists(value) && validator.isLength(value, VIDEOS_CONSTRAINTS_FIELDS.INFO_HASH)
138}
139
55fa55a9
C
140// ---------------------------------------------------------------------------
141
65fcc311 142export {
0a6658fd 143 isVideoIdOrUUIDValid,
65fcc311
C
144 isVideoAuthorValid,
145 isVideoDateValid,
146 isVideoCategoryValid,
147 isVideoLicenceValid,
148 isVideoLanguageValid,
149 isVideoNSFWValid,
150 isVideoDescriptionValid,
151 isVideoDurationValid,
93e1258c 152 isVideoFileInfoHashValid,
65fcc311
C
153 isVideoNameValid,
154 isVideoTagsValid,
155 isVideoThumbnailValid,
156 isVideoThumbnailDataValid,
93e1258c 157 isVideoFileExtnameValid,
0a6658fd 158 isVideoUUIDValid,
65fcc311
C
159 isVideoAbuseReasonValid,
160 isVideoAbuseReporterUsernameValid,
161 isVideoFile,
162 isVideoViewsValid,
163 isVideoLikesValid,
164 isVideoRatingTypeValid,
165 isVideoDislikesValid,
93e1258c
C
166 isVideoEventCountValid,
167 isVideoFileSizeValid,
168 isVideoFileResolutionValid
65fcc311 169}
69818c93 170
556ddc31
C
171declare module 'express-validator' {
172 export interface Validator {
173 isVideoIdOrUUIDValid,
174 isVideoAuthorValid,
175 isVideoDateValid,
176 isVideoCategoryValid,
177 isVideoLicenceValid,
178 isVideoLanguageValid,
179 isVideoNSFWValid,
180 isVideoDescriptionValid,
181 isVideoDurationValid,
182 isVideoInfoHashValid,
183 isVideoNameValid,
184 isVideoTagsValid,
185 isVideoThumbnailValid,
186 isVideoThumbnailDataValid,
187 isVideoExtnameValid,
188 isVideoUUIDValid,
189 isVideoAbuseReasonValid,
190 isVideoAbuseReporterUsernameValid,
191 isVideoFile,
192 isVideoViewsValid,
193 isVideoLikesValid,
194 isVideoRatingTypeValid,
195 isVideoDislikesValid,
196 isVideoEventCountValid,
197 isVideoFileSizeValid,
198 isVideoFileResolutionValid
69818c93
C
199 }
200}