diff options
Diffstat (limited to 'server/helpers/custom-validators/remote/videos.ts')
-rw-r--r-- | server/helpers/custom-validators/remote/videos.ts | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/server/helpers/custom-validators/remote/videos.ts b/server/helpers/custom-validators/remote/videos.ts new file mode 100644 index 000000000..4b904d011 --- /dev/null +++ b/server/helpers/custom-validators/remote/videos.ts | |||
@@ -0,0 +1,138 @@ | |||
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, | ||
12 | isVideoRemoteIdValid, | ||
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 | |||
34 | function isEachRemoteRequestVideosValid (requests) { | ||
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) && | ||
53 | isVideoRemoteIdValid(video.remoteId) | ||
54 | ) || | ||
55 | ( | ||
56 | isRequestTypeReportAbuseValid(request.type) && | ||
57 | isVideoRemoteIdValid(request.data.videoRemoteId) && | ||
58 | isVideoAbuseReasonValid(request.data.reportReason) && | ||
59 | isVideoAbuseReporterUsernameValid(request.data.reporterUsername) | ||
60 | ) | ||
61 | }) | ||
62 | } | ||
63 | |||
64 | function isEachRemoteRequestVideosQaduValid (requests) { | ||
65 | return isArray(requests) && | ||
66 | requests.every(function (request) { | ||
67 | const video = request.data | ||
68 | |||
69 | if (!video) return false | ||
70 | |||
71 | return ( | ||
72 | isVideoRemoteIdValid(video.remoteId) && | ||
73 | (has(video, 'views') === false || isVideoViewsValid) && | ||
74 | (has(video, 'likes') === false || isVideoLikesValid) && | ||
75 | (has(video, 'dislikes') === false || isVideoDislikesValid) | ||
76 | ) | ||
77 | }) | ||
78 | } | ||
79 | |||
80 | function isEachRemoteRequestVideosEventsValid (requests) { | ||
81 | return isArray(requests) && | ||
82 | requests.every(function (request) { | ||
83 | const eventData = request.data | ||
84 | |||
85 | if (!eventData) return false | ||
86 | |||
87 | return ( | ||
88 | isVideoRemoteIdValid(eventData.remoteId) && | ||
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 | |||
103 | // --------------------------------------------------------------------------- | ||
104 | |||
105 | function isCommonVideoAttributesValid (video) { | ||
106 | return isVideoDateValid(video.createdAt) && | ||
107 | isVideoDateValid(video.updatedAt) && | ||
108 | isVideoCategoryValid(video.category) && | ||
109 | isVideoLicenceValid(video.licence) && | ||
110 | isVideoLanguageValid(video.language) && | ||
111 | isVideoNSFWValid(video.nsfw) && | ||
112 | isVideoDescriptionValid(video.description) && | ||
113 | isVideoDurationValid(video.duration) && | ||
114 | isVideoInfoHashValid(video.infoHash) && | ||
115 | isVideoNameValid(video.name) && | ||
116 | isVideoTagsValid(video.tags) && | ||
117 | isVideoRemoteIdValid(video.remoteId) && | ||
118 | isVideoExtnameValid(video.extname) && | ||
119 | isVideoViewsValid(video.views) && | ||
120 | isVideoLikesValid(video.likes) && | ||
121 | isVideoDislikesValid(video.dislikes) | ||
122 | } | ||
123 | |||
124 | function isRequestTypeAddValid (value) { | ||
125 | return value === ENDPOINT_ACTIONS.ADD | ||
126 | } | ||
127 | |||
128 | function isRequestTypeUpdateValid (value) { | ||
129 | return value === ENDPOINT_ACTIONS.UPDATE | ||
130 | } | ||
131 | |||
132 | function isRequestTypeRemoveValid (value) { | ||
133 | return value === ENDPOINT_ACTIONS.REMOVE | ||
134 | } | ||
135 | |||
136 | function isRequestTypeReportAbuseValid (value) { | ||
137 | return value === ENDPOINT_ACTIONS.REPORT_ABUSE | ||
138 | } | ||