]>
Commit | Line | Data |
---|---|---|
65fcc311 C |
1 | import { has, values } from 'lodash' |
2 | ||
3 | import { | |
4 | REQUEST_ENDPOINTS, | |
5 | REQUEST_ENDPOINT_ACTIONS, | |
6 | REQUEST_VIDEO_EVENT_TYPES | |
7 | } from '../../../initializers' | |
8 | import { isArray } from '../misc' | |
9 | import { | |
10 | isVideoAuthorValid, | |
11 | isVideoThumbnailDataValid, | |
0a6658fd | 12 | isVideoUUIDValid, |
65fcc311 C |
13 | isVideoAbuseReasonValid, |
14 | isVideoAbuseReporterUsernameValid, | |
15 | isVideoViewsValid, | |
16 | isVideoLikesValid, | |
17 | isVideoDislikesValid, | |
18 | isVideoEventCountValid, | |
19 | isVideoDateValid, | |
20 | isVideoCategoryValid, | |
21 | isVideoLicenceValid, | |
22 | isVideoLanguageValid, | |
23 | isVideoNSFWValid, | |
24 | isVideoDescriptionValid, | |
25 | isVideoDurationValid, | |
26 | isVideoInfoHashValid, | |
27 | isVideoNameValid, | |
28 | isVideoTagsValid, | |
29 | isVideoExtnameValid | |
30 | } from '../videos' | |
31 | ||
32 | const ENDPOINT_ACTIONS = REQUEST_ENDPOINT_ACTIONS[REQUEST_ENDPOINTS.VIDEOS] | |
33 | ||
69818c93 | 34 | function isEachRemoteRequestVideosValid (requests: any[]) { |
65fcc311 C |
35 | return isArray(requests) && |
36 | requests.every(function (request) { | |
37 | const video = request.data | |
38 | ||
39 | if (!video) return false | |
40 | ||
41 | return ( | |
42 | isRequestTypeAddValid(request.type) && | |
43 | isCommonVideoAttributesValid(video) && | |
44 | isVideoAuthorValid(video.author) && | |
45 | isVideoThumbnailDataValid(video.thumbnailData) | |
46 | ) || | |
47 | ( | |
48 | isRequestTypeUpdateValid(request.type) && | |
49 | isCommonVideoAttributesValid(video) | |
50 | ) || | |
51 | ( | |
52 | isRequestTypeRemoveValid(request.type) && | |
0a6658fd | 53 | isVideoUUIDValid(video.uuid) |
65fcc311 C |
54 | ) || |
55 | ( | |
56 | isRequestTypeReportAbuseValid(request.type) && | |
0a6658fd | 57 | isVideoUUIDValid(request.data.videoUUID) && |
65fcc311 C |
58 | isVideoAbuseReasonValid(request.data.reportReason) && |
59 | isVideoAbuseReporterUsernameValid(request.data.reporterUsername) | |
60 | ) | |
61 | }) | |
62 | } | |
63 | ||
69818c93 | 64 | function isEachRemoteRequestVideosQaduValid (requests: any[]) { |
65fcc311 C |
65 | return isArray(requests) && |
66 | requests.every(function (request) { | |
67 | const video = request.data | |
68 | ||
69 | if (!video) return false | |
70 | ||
71 | return ( | |
0a6658fd | 72 | isVideoUUIDValid(video.uuid) && |
69818c93 C |
73 | (has(video, 'views') === false || isVideoViewsValid(video.views)) && |
74 | (has(video, 'likes') === false || isVideoLikesValid(video.likes)) && | |
75 | (has(video, 'dislikes') === false || isVideoDislikesValid(video.dislikes)) | |
65fcc311 C |
76 | ) |
77 | }) | |
78 | } | |
79 | ||
69818c93 | 80 | function isEachRemoteRequestVideosEventsValid (requests: any[]) { |
65fcc311 C |
81 | return isArray(requests) && |
82 | requests.every(function (request) { | |
83 | const eventData = request.data | |
84 | ||
85 | if (!eventData) return false | |
86 | ||
87 | return ( | |
0a6658fd | 88 | isVideoUUIDValid(eventData.uuid) && |
65fcc311 C |
89 | values(REQUEST_VIDEO_EVENT_TYPES).indexOf(eventData.eventType) !== -1 && |
90 | isVideoEventCountValid(eventData.count) | |
91 | ) | |
92 | }) | |
93 | } | |
94 | ||
95 | // --------------------------------------------------------------------------- | |
96 | ||
97 | export { | |
98 | isEachRemoteRequestVideosValid, | |
99 | isEachRemoteRequestVideosQaduValid, | |
100 | isEachRemoteRequestVideosEventsValid | |
101 | } | |
102 | ||
69818c93 C |
103 | declare global { |
104 | namespace ExpressValidator { | |
105 | export interface Validator { | |
106 | isEachRemoteRequestVideosValid, | |
107 | isEachRemoteRequestVideosQaduValid, | |
108 | isEachRemoteRequestVideosEventsValid | |
109 | } | |
110 | } | |
111 | } | |
112 | ||
65fcc311 C |
113 | // --------------------------------------------------------------------------- |
114 | ||
69818c93 | 115 | function isCommonVideoAttributesValid (video: any) { |
65fcc311 C |
116 | return isVideoDateValid(video.createdAt) && |
117 | isVideoDateValid(video.updatedAt) && | |
118 | isVideoCategoryValid(video.category) && | |
119 | isVideoLicenceValid(video.licence) && | |
120 | isVideoLanguageValid(video.language) && | |
121 | isVideoNSFWValid(video.nsfw) && | |
122 | isVideoDescriptionValid(video.description) && | |
123 | isVideoDurationValid(video.duration) && | |
124 | isVideoInfoHashValid(video.infoHash) && | |
125 | isVideoNameValid(video.name) && | |
126 | isVideoTagsValid(video.tags) && | |
0a6658fd | 127 | isVideoUUIDValid(video.uuid) && |
65fcc311 C |
128 | isVideoExtnameValid(video.extname) && |
129 | isVideoViewsValid(video.views) && | |
130 | isVideoLikesValid(video.likes) && | |
131 | isVideoDislikesValid(video.dislikes) | |
132 | } | |
133 | ||
69818c93 | 134 | function isRequestTypeAddValid (value: string) { |
65fcc311 C |
135 | return value === ENDPOINT_ACTIONS.ADD |
136 | } | |
137 | ||
69818c93 | 138 | function isRequestTypeUpdateValid (value: string) { |
65fcc311 C |
139 | return value === ENDPOINT_ACTIONS.UPDATE |
140 | } | |
141 | ||
69818c93 | 142 | function isRequestTypeRemoveValid (value: string) { |
65fcc311 C |
143 | return value === ENDPOINT_ACTIONS.REMOVE |
144 | } | |
145 | ||
69818c93 | 146 | function isRequestTypeReportAbuseValid (value: string) { |
65fcc311 C |
147 | return value === ENDPOINT_ACTIONS.REPORT_ABUSE |
148 | } |