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