1 import 'express-validator'
2 import { has, values } from 'lodash'
6 REQUEST_ENDPOINT_ACTIONS,
7 REQUEST_VIDEO_EVENT_TYPES
8 } from '../../../initializers'
9 import { isArray, isDateValid, isUUIDValid } from '../misc'
11 isVideoThumbnailDataValid,
12 isVideoAbuseReasonValid,
13 isVideoAbuseReporterUsernameValid,
17 isVideoEventCountValid,
18 isRemoteVideoCategoryValid,
19 isRemoteVideoLicenceValid,
20 isRemoteVideoLanguageValid,
22 isVideoTruncatedDescriptionValid,
24 isVideoFileInfoHashValid,
27 isVideoFileExtnameValid,
28 isVideoFileResolutionValid
30 import { isVideoChannelDescriptionValid, isVideoChannelNameValid } from '../video-channels'
31 import { isVideoAuthorNameValid } from '../video-authors'
33 const ENDPOINT_ACTIONS = REQUEST_ENDPOINT_ACTIONS[REQUEST_ENDPOINTS.VIDEOS]
35 const checkers: { [ id: string ]: (obj: any) => boolean } = {}
36 checkers[ENDPOINT_ACTIONS.ADD_VIDEO] = checkAddVideo
37 checkers[ENDPOINT_ACTIONS.UPDATE_VIDEO] = checkUpdateVideo
38 checkers[ENDPOINT_ACTIONS.REMOVE_VIDEO] = checkRemoveVideo
39 checkers[ENDPOINT_ACTIONS.REPORT_ABUSE] = checkReportVideo
40 checkers[ENDPOINT_ACTIONS.ADD_CHANNEL] = checkAddVideoChannel
41 checkers[ENDPOINT_ACTIONS.UPDATE_CHANNEL] = checkUpdateVideoChannel
42 checkers[ENDPOINT_ACTIONS.REMOVE_CHANNEL] = checkRemoveVideoChannel
43 checkers[ENDPOINT_ACTIONS.ADD_AUTHOR] = checkAddAuthor
44 checkers[ENDPOINT_ACTIONS.REMOVE_AUTHOR] = checkRemoveAuthor
46 function removeBadRequestVideos (requests: any[]) {
47 for (let i = requests.length - 1; i >= 0 ; i--) {
48 const request = requests[i]
49 const video = request.data
53 checkers[request.type] === undefined ||
54 checkers[request.type](video) === false
61 function removeBadRequestVideosQadu (requests: any[]) {
62 for (let i = requests.length - 1; i >= 0 ; i--) {
63 const request = requests[i]
64 const video = request.data
69 isUUIDValid(video.uuid) &&
70 (has(video, 'views') === false || isVideoViewsValid(video.views)) &&
71 (has(video, 'likes') === false || isVideoLikesValid(video.likes)) &&
72 (has(video, 'dislikes') === false || isVideoDislikesValid(video.dislikes))
80 function removeBadRequestVideosEvents (requests: any[]) {
81 for (let i = requests.length - 1; i >= 0 ; i--) {
82 const request = requests[i]
83 const eventData = request.data
88 isUUIDValid(eventData.uuid) &&
89 values(REQUEST_VIDEO_EVENT_TYPES).indexOf(eventData.eventType) !== -1 &&
90 isVideoEventCountValid(eventData.count)
98 // ---------------------------------------------------------------------------
101 removeBadRequestVideos,
102 removeBadRequestVideosQadu,
103 removeBadRequestVideosEvents
106 // ---------------------------------------------------------------------------
108 function isCommonVideoAttributesValid (video: any) {
109 return isDateValid(video.createdAt) &&
110 isDateValid(video.updatedAt) &&
111 isRemoteVideoCategoryValid(video.category) &&
112 isRemoteVideoLicenceValid(video.licence) &&
113 isRemoteVideoLanguageValid(video.language) &&
114 isVideoNSFWValid(video.nsfw) &&
115 isVideoTruncatedDescriptionValid(video.truncatedDescription) &&
116 isVideoDurationValid(video.duration) &&
117 isVideoNameValid(video.name) &&
118 isVideoTagsValid(video.tags) &&
119 isUUIDValid(video.uuid) &&
120 isVideoViewsValid(video.views) &&
121 isVideoLikesValid(video.likes) &&
122 isVideoDislikesValid(video.dislikes) &&
123 isArray(video.files) &&
124 video.files.every(videoFile => {
125 if (!videoFile) return false
128 isVideoFileInfoHashValid(videoFile.infoHash) &&
129 isVideoFileExtnameValid(videoFile.extname) &&
130 isVideoFileResolutionValid(videoFile.resolution)
135 function checkAddVideo (video: any) {
136 return isCommonVideoAttributesValid(video) &&
137 isUUIDValid(video.channelUUID) &&
138 isVideoThumbnailDataValid(video.thumbnailData)
141 function checkUpdateVideo (video: any) {
142 return isCommonVideoAttributesValid(video)
145 function checkRemoveVideo (video: any) {
146 return isUUIDValid(video.uuid)
149 function checkReportVideo (abuse: any) {
150 return isUUIDValid(abuse.videoUUID) &&
151 isVideoAbuseReasonValid(abuse.reportReason) &&
152 isVideoAbuseReporterUsernameValid(abuse.reporterUsername)
155 function checkAddVideoChannel (videoChannel: any) {
156 return isUUIDValid(videoChannel.uuid) &&
157 isVideoChannelNameValid(videoChannel.name) &&
158 isVideoChannelDescriptionValid(videoChannel.description) &&
159 isDateValid(videoChannel.createdAt) &&
160 isDateValid(videoChannel.updatedAt) &&
161 isUUIDValid(videoChannel.ownerUUID)
164 function checkUpdateVideoChannel (videoChannel: any) {
165 return isUUIDValid(videoChannel.uuid) &&
166 isVideoChannelNameValid(videoChannel.name) &&
167 isVideoChannelDescriptionValid(videoChannel.description) &&
168 isDateValid(videoChannel.createdAt) &&
169 isDateValid(videoChannel.updatedAt) &&
170 isUUIDValid(videoChannel.ownerUUID)
173 function checkRemoveVideoChannel (videoChannel: any) {
174 return isUUIDValid(videoChannel.uuid)
177 function checkAddAuthor (author: any) {
178 return isUUIDValid(author.uuid) &&
179 isVideoAuthorNameValid(author.name)
182 function checkRemoveAuthor (author: any) {
183 return isUUIDValid(author.uuid)