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
105 namespace ExpressValidator {
106 export interface Validator {
107 isEachRemoteRequestVideosValid,
108 isEachRemoteRequestVideosQaduValid,
109 isEachRemoteRequestVideosEventsValid
114 // ---------------------------------------------------------------------------
116 function isCommonVideoAttributesValid (video: any) {
117 return isVideoDateValid(video.createdAt) &&
118 isVideoDateValid(video.updatedAt) &&
119 isVideoCategoryValid(video.category) &&
120 isVideoLicenceValid(video.licence) &&
121 isVideoLanguageValid(video.language) &&
122 isVideoNSFWValid(video.nsfw) &&
123 isVideoDescriptionValid(video.description) &&
124 isVideoDurationValid(video.duration) &&
125 isVideoNameValid(video.name) &&
126 isVideoTagsValid(video.tags) &&
127 isVideoUUIDValid(video.uuid) &&
128 isVideoViewsValid(video.views) &&
129 isVideoLikesValid(video.likes) &&
130 isVideoDislikesValid(video.dislikes) &&
131 isArray(video.files) &&
132 video.files.every(videoFile => {
133 if (!videoFile) return false
136 isVideoFileInfoHashValid(videoFile.infoHash) &&
137 isVideoFileExtnameValid(videoFile.extname) &&
138 isVideoFileResolutionValid(videoFile.resolution)
143 function isRequestTypeAddValid (value: string) {
144 return value === ENDPOINT_ACTIONS.ADD
147 function isRequestTypeUpdateValid (value: string) {
148 return value === ENDPOINT_ACTIONS.UPDATE
151 function isRequestTypeRemoveValid (value: string) {
152 return value === ENDPOINT_ACTIONS.REMOVE
155 function isRequestTypeReportAbuseValid (value: string) {
156 return value === ENDPOINT_ACTIONS.REPORT_ABUSE