1 import { values } from 'lodash'
2 import * as validator from 'validator'
10 } from '../../initializers'
11 import { isUserUsernameValid } from './users'
12 import { isArray } from './misc'
14 const VIDEOS_CONSTRAINTS_FIELDS = CONSTRAINTS_FIELDS.VIDEOS
15 const VIDEO_ABUSES_CONSTRAINTS_FIELDS = CONSTRAINTS_FIELDS.VIDEO_ABUSES
16 const VIDEO_EVENTS_CONSTRAINTS_FIELDS = CONSTRAINTS_FIELDS.VIDEO_EVENTS
18 function isVideoAuthorValid (value) {
19 return isUserUsernameValid(value)
22 function isVideoDateValid (value) {
23 return validator.isDate(value)
26 function isVideoCategoryValid (value) {
27 return VIDEO_CATEGORIES[value] !== undefined
30 function isVideoLicenceValid (value) {
31 return VIDEO_LICENCES[value] !== undefined
34 function isVideoLanguageValid (value) {
35 return value === null || VIDEO_LANGUAGES[value] !== undefined
38 function isVideoNSFWValid (value) {
39 return validator.isBoolean(value)
42 function isVideoDescriptionValid (value) {
43 return validator.isLength(value, VIDEOS_CONSTRAINTS_FIELDS.DESCRIPTION)
46 function isVideoDurationValid (value) {
47 return validator.isInt(value + '', VIDEOS_CONSTRAINTS_FIELDS.DURATION)
50 function isVideoExtnameValid (value) {
51 return VIDEOS_CONSTRAINTS_FIELDS.EXTNAME.indexOf(value) !== -1
54 function isVideoInfoHashValid (value) {
55 return validator.isLength(value, VIDEOS_CONSTRAINTS_FIELDS.INFO_HASH)
58 function isVideoNameValid (value) {
59 return validator.isLength(value, VIDEOS_CONSTRAINTS_FIELDS.NAME)
62 function 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)
70 function isVideoThumbnailValid (value) {
71 return validator.isLength(value, VIDEOS_CONSTRAINTS_FIELDS.THUMBNAIL)
74 function isVideoThumbnailDataValid (value) {
75 return validator.isByteLength(value, VIDEOS_CONSTRAINTS_FIELDS.THUMBNAIL_DATA)
78 function isVideoRemoteIdValid (value) {
79 return validator.isUUID(value, 4)
82 function isVideoAbuseReasonValid (value) {
83 return validator.isLength(value, VIDEO_ABUSES_CONSTRAINTS_FIELDS.REASON)
86 function isVideoAbuseReporterUsernameValid (value) {
87 return isUserUsernameValid(value)
90 function isVideoViewsValid (value) {
91 return validator.isInt(value + '', VIDEOS_CONSTRAINTS_FIELDS.VIEWS)
94 function isVideoLikesValid (value) {
95 return validator.isInt(value + '', VIDEOS_CONSTRAINTS_FIELDS.LIKES)
98 function isVideoDislikesValid (value) {
99 return validator.isInt(value + '', VIDEOS_CONSTRAINTS_FIELDS.DISLIKES)
102 function isVideoEventCountValid (value) {
103 return validator.isInt(value + '', VIDEO_EVENTS_CONSTRAINTS_FIELDS.COUNT)
106 function isVideoRatingTypeValid (value) {
107 return values(VIDEO_RATE_TYPES).indexOf(value) !== -1
110 function isVideoFile (value, files) {
112 if (!files) return false
114 // Should have videofile file
115 const videofile = files.videofile
116 if (!videofile || videofile.length === 0) return false
118 // The file should exist
119 const file = videofile[0]
120 if (!file || !file.originalname) return false
122 return new RegExp('^video/(webm|mp4|ogg)$', 'i').test(file.mimetype)
125 // ---------------------------------------------------------------------------
130 isVideoCategoryValid,
132 isVideoLanguageValid,
134 isVideoDescriptionValid,
135 isVideoDurationValid,
136 isVideoInfoHashValid,
139 isVideoThumbnailValid,
140 isVideoThumbnailDataValid,
142 isVideoRemoteIdValid,
143 isVideoAbuseReasonValid,
144 isVideoAbuseReporterUsernameValid,
148 isVideoRatingTypeValid,
149 isVideoDislikesValid,
150 isVideoEventCountValid