]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - server/helpers/custom-validators/videos.ts
Change how we handle resolution
[github/Chocobozzz/PeerTube.git] / server / helpers / custom-validators / videos.ts
CommitLineData
65fcc311 1import { values } from 'lodash'
4d4e5cd4 2import * as validator from 'validator'
fdbda9e3 3import 'express-validator'
1840c2f7 4import 'multer'
65fcc311
C
5
6import {
7 CONSTRAINTS_FIELDS,
8 VIDEO_CATEGORIES,
9 VIDEO_LICENCES,
10 VIDEO_LANGUAGES,
14d3270f 11 VIDEO_RATE_TYPES
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
b60e5f38 109function isVideoFile (files: { [ fieldname: string ]: Express.Multer.File[] } | Express.Multer.File[]) {
f6f7dfee
C
110 // Should have files
111 if (!files) return false
b60e5f38 112 if (isArray(files)) return false
f6f7dfee
C
113
114 // Should have videofile file
b60e5f38 115 const videofile = files['videofile']
f6f7dfee
C
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
93e1258c
C
125function isVideoFileSizeValid (value: string) {
126 return exists(value) && validator.isInt(value + '', VIDEOS_CONSTRAINTS_FIELDS.FILE_SIZE)
127}
128
129function isVideoFileResolutionValid (value: string) {
14d3270f 130 return exists(value) && validator.isInt(value + '')
93e1258c
C
131}
132
133function isVideoFileExtnameValid (value: string) {
134 return VIDEOS_CONSTRAINTS_FIELDS.EXTNAME.indexOf(value) !== -1
135}
136
137function isVideoFileInfoHashValid (value: string) {
138 return exists(value) && validator.isLength(value, VIDEOS_CONSTRAINTS_FIELDS.INFO_HASH)
139}
140
55fa55a9
C
141// ---------------------------------------------------------------------------
142
65fcc311 143export {
0a6658fd 144 isVideoIdOrUUIDValid,
65fcc311
C
145 isVideoAuthorValid,
146 isVideoDateValid,
147 isVideoCategoryValid,
148 isVideoLicenceValid,
149 isVideoLanguageValid,
150 isVideoNSFWValid,
151 isVideoDescriptionValid,
152 isVideoDurationValid,
93e1258c 153 isVideoFileInfoHashValid,
65fcc311
C
154 isVideoNameValid,
155 isVideoTagsValid,
156 isVideoThumbnailValid,
157 isVideoThumbnailDataValid,
93e1258c 158 isVideoFileExtnameValid,
0a6658fd 159 isVideoUUIDValid,
65fcc311
C
160 isVideoAbuseReasonValid,
161 isVideoAbuseReporterUsernameValid,
162 isVideoFile,
163 isVideoViewsValid,
164 isVideoLikesValid,
165 isVideoRatingTypeValid,
166 isVideoDislikesValid,
93e1258c
C
167 isVideoEventCountValid,
168 isVideoFileSizeValid,
169 isVideoFileResolutionValid
65fcc311 170}