1 import { has, values } from 'lodash'
5 REQUEST_ENDPOINT_ACTIONS,
6 REQUEST_VIDEO_EVENT_TYPES
7 } from '../../../initializers'
8 import { isArray } from '../misc'
11 isVideoThumbnailDataValid,
13 isVideoAbuseReasonValid,
14 isVideoAbuseReporterUsernameValid,
18 isVideoEventCountValid,
24 isVideoDescriptionValid,
26 isVideoFileInfoHashValid,
29 isVideoFileExtnameValid,
30 isVideoFileResolutionValid
33 const ENDPOINT_ACTIONS = REQUEST_ENDPOINT_ACTIONS[REQUEST_ENDPOINTS.VIDEOS]
35 function isEachRemoteRequestVideosValid (requests: any[]) {
36 return isArray(requests) &&
37 requests.every(request => {
38 const video = request.data
40 if (!video) return false
43 isRequestTypeAddValid(request.type) &&
44 isCommonVideoAttributesValid(video) &&
45 isVideoAuthorValid(video.author) &&
46 isVideoThumbnailDataValid(video.thumbnailData)
49 isRequestTypeUpdateValid(request.type) &&
50 isCommonVideoAttributesValid(video)
53 isRequestTypeRemoveValid(request.type) &&
54 isVideoUUIDValid(video.uuid)
57 isRequestTypeReportAbuseValid(request.type) &&
58 isVideoUUIDValid(request.data.videoUUID) &&
59 isVideoAbuseReasonValid(request.data.reportReason) &&
60 isVideoAbuseReporterUsernameValid(request.data.reporterUsername)
65 function isEachRemoteRequestVideosQaduValid (requests: any[]) {
66 return isArray(requests) &&
67 requests.every(request => {
68 const video = request.data
70 if (!video) return false
73 isVideoUUIDValid(video.uuid) &&
74 (has(video, 'views') === false || isVideoViewsValid(video.views)) &&
75 (has(video, 'likes') === false || isVideoLikesValid(video.likes)) &&
76 (has(video, 'dislikes') === false || isVideoDislikesValid(video.dislikes))
81 function isEachRemoteRequestVideosEventsValid (requests: any[]) {
82 return isArray(requests) &&
83 requests.every(request => {
84 const eventData = request.data
86 if (!eventData) return false
89 isVideoUUIDValid(eventData.uuid) &&
90 values(REQUEST_VIDEO_EVENT_TYPES).indexOf(eventData.eventType) !== -1 &&
91 isVideoEventCountValid(eventData.count)
96 // ---------------------------------------------------------------------------
99 isEachRemoteRequestVideosValid,
100 isEachRemoteRequestVideosQaduValid,
101 isEachRemoteRequestVideosEventsValid
104 declare module 'express-validator' {
105 export interface Validator {
106 isEachRemoteRequestVideosValid,
107 isEachRemoteRequestVideosQaduValid,
108 isEachRemoteRequestVideosEventsValid
112 // ---------------------------------------------------------------------------
114 function isCommonVideoAttributesValid (video: any) {
115 return isVideoDateValid(video.createdAt) &&
116 isVideoDateValid(video.updatedAt) &&
117 isVideoCategoryValid(video.category) &&
118 isVideoLicenceValid(video.licence) &&
119 isVideoLanguageValid(video.language) &&
120 isVideoNSFWValid(video.nsfw) &&
121 isVideoDescriptionValid(video.description) &&
122 isVideoDurationValid(video.duration) &&
123 isVideoNameValid(video.name) &&
124 isVideoTagsValid(video.tags) &&
125 isVideoUUIDValid(video.uuid) &&
126 isVideoViewsValid(video.views) &&
127 isVideoLikesValid(video.likes) &&
128 isVideoDislikesValid(video.dislikes) &&
129 isArray(video.files) &&
130 video.files.every(videoFile => {
131 if (!videoFile) return false
134 isVideoFileInfoHashValid(videoFile.infoHash) &&
135 isVideoFileExtnameValid(videoFile.extname) &&
136 isVideoFileResolutionValid(videoFile.resolution)
141 function isRequestTypeAddValid (value: string) {
142 return value === ENDPOINT_ACTIONS.ADD
145 function isRequestTypeUpdateValid (value: string) {
146 return value === ENDPOINT_ACTIONS.UPDATE
149 function isRequestTypeRemoveValid (value: string) {
150 return value === ENDPOINT_ACTIONS.REMOVE
153 function isRequestTypeReportAbuseValid (value: string) {
154 return value === ENDPOINT_ACTIONS.REPORT_ABUSE