1 import { values } from 'lodash'
2 import expressValidator = require('express-validator')
3 // TODO: use .validator when express-validator typing will have validator field
4 const validator = expressValidator['validator']
12 } from '../../initializers'
13 import { isUserUsernameValid } from './users'
14 import { isArray } from './misc'
16 const VIDEOS_CONSTRAINTS_FIELDS = CONSTRAINTS_FIELDS.VIDEOS
17 const VIDEO_ABUSES_CONSTRAINTS_FIELDS = CONSTRAINTS_FIELDS.VIDEO_ABUSES
18 const VIDEO_EVENTS_CONSTRAINTS_FIELDS = CONSTRAINTS_FIELDS.VIDEO_EVENTS
20 function isVideoAuthorValid (value) {
21 return isUserUsernameValid(value)
24 function isVideoDateValid (value) {
25 return validator.isDate(value)
28 function isVideoCategoryValid (value) {
29 return VIDEO_CATEGORIES[value] !== undefined
32 function isVideoLicenceValid (value) {
33 return VIDEO_LICENCES[value] !== undefined
36 function isVideoLanguageValid (value) {
37 return value === null || VIDEO_LANGUAGES[value] !== undefined
40 function isVideoNSFWValid (value) {
41 return validator.isBoolean(value)
44 function isVideoDescriptionValid (value) {
45 return validator.isLength(value, VIDEOS_CONSTRAINTS_FIELDS.DESCRIPTION)
48 function isVideoDurationValid (value) {
49 return validator.isInt(value + '', VIDEOS_CONSTRAINTS_FIELDS.DURATION)
52 function isVideoExtnameValid (value) {
53 return VIDEOS_CONSTRAINTS_FIELDS.EXTNAME.indexOf(value) !== -1
56 function isVideoInfoHashValid (value) {
57 return validator.isLength(value, VIDEOS_CONSTRAINTS_FIELDS.INFO_HASH)
60 function isVideoNameValid (value) {
61 return validator.isLength(value, VIDEOS_CONSTRAINTS_FIELDS.NAME)
64 function isVideoTagsValid (tags) {
65 return isArray(tags) &&
66 validator.isInt(tags.length, VIDEOS_CONSTRAINTS_FIELDS.TAGS) &&
67 tags.every(function (tag) {
68 return validator.isLength(tag, VIDEOS_CONSTRAINTS_FIELDS.TAG)
72 function isVideoThumbnailValid (value) {
73 return validator.isLength(value, VIDEOS_CONSTRAINTS_FIELDS.THUMBNAIL)
76 function isVideoThumbnailDataValid (value) {
77 return validator.isByteLength(value, VIDEOS_CONSTRAINTS_FIELDS.THUMBNAIL_DATA)
80 function isVideoRemoteIdValid (value) {
81 return validator.isUUID(value, 4)
84 function isVideoAbuseReasonValid (value) {
85 return validator.isLength(value, VIDEO_ABUSES_CONSTRAINTS_FIELDS.REASON)
88 function isVideoAbuseReporterUsernameValid (value) {
89 return isUserUsernameValid(value)
92 function isVideoViewsValid (value) {
93 return validator.isInt(value + '', VIDEOS_CONSTRAINTS_FIELDS.VIEWS)
96 function isVideoLikesValid (value) {
97 return validator.isInt(value + '', VIDEOS_CONSTRAINTS_FIELDS.LIKES)
100 function isVideoDislikesValid (value) {
101 return validator.isInt(value + '', VIDEOS_CONSTRAINTS_FIELDS.DISLIKES)
104 function isVideoEventCountValid (value) {
105 return validator.isInt(value + '', VIDEO_EVENTS_CONSTRAINTS_FIELDS.COUNT)
108 function isVideoRatingTypeValid (value) {
109 return values(VIDEO_RATE_TYPES).indexOf(value) !== -1
112 function isVideoFile (value, files) {
114 if (!files) return false
116 // Should have videofile file
117 const videofile = files.videofile
118 if (!videofile || videofile.length === 0) return false
120 // The file should exist
121 const file = videofile[0]
122 if (!file || !file.originalname) return false
124 return new RegExp('^video/(webm|mp4|ogg)$', 'i').test(file.mimetype)
127 // ---------------------------------------------------------------------------
132 isVideoCategoryValid,
134 isVideoLanguageValid,
136 isVideoDescriptionValid,
137 isVideoDurationValid,
138 isVideoInfoHashValid,
141 isVideoThumbnailValid,
142 isVideoThumbnailDataValid,
144 isVideoRemoteIdValid,
145 isVideoAbuseReasonValid,
146 isVideoAbuseReporterUsernameValid,
150 isVideoRatingTypeValid,
151 isVideoDislikesValid,
152 isVideoEventCountValid