]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - server/helpers/custom-validators/remote/videos.ts
Upgrade common server dependencies
[github/Chocobozzz/PeerTube.git] / server / helpers / custom-validators / remote / videos.ts
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 isVideoUUIDValid,
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 isVideoFileInfoHashValid,
27 isVideoNameValid,
28 isVideoTagsValid,
29 isVideoFileExtnameValid,
30 isVideoFileResolutionValid
31 } from '../videos'
32
33 const ENDPOINT_ACTIONS = REQUEST_ENDPOINT_ACTIONS[REQUEST_ENDPOINTS.VIDEOS]
34
35 function isEachRemoteRequestVideosValid (requests: any[]) {
36 return isArray(requests) &&
37 requests.every(request => {
38 const video = request.data
39
40 if (!video) return false
41
42 return (
43 isRequestTypeAddValid(request.type) &&
44 isCommonVideoAttributesValid(video) &&
45 isVideoAuthorValid(video.author) &&
46 isVideoThumbnailDataValid(video.thumbnailData)
47 ) ||
48 (
49 isRequestTypeUpdateValid(request.type) &&
50 isCommonVideoAttributesValid(video)
51 ) ||
52 (
53 isRequestTypeRemoveValid(request.type) &&
54 isVideoUUIDValid(video.uuid)
55 ) ||
56 (
57 isRequestTypeReportAbuseValid(request.type) &&
58 isVideoUUIDValid(request.data.videoUUID) &&
59 isVideoAbuseReasonValid(request.data.reportReason) &&
60 isVideoAbuseReporterUsernameValid(request.data.reporterUsername)
61 )
62 })
63 }
64
65 function isEachRemoteRequestVideosQaduValid (requests: any[]) {
66 return isArray(requests) &&
67 requests.every(request => {
68 const video = request.data
69
70 if (!video) return false
71
72 return (
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))
77 )
78 })
79 }
80
81 function isEachRemoteRequestVideosEventsValid (requests: any[]) {
82 return isArray(requests) &&
83 requests.every(request => {
84 const eventData = request.data
85
86 if (!eventData) return false
87
88 return (
89 isVideoUUIDValid(eventData.uuid) &&
90 values(REQUEST_VIDEO_EVENT_TYPES).indexOf(eventData.eventType) !== -1 &&
91 isVideoEventCountValid(eventData.count)
92 )
93 })
94 }
95
96 // ---------------------------------------------------------------------------
97
98 export {
99 isEachRemoteRequestVideosValid,
100 isEachRemoteRequestVideosQaduValid,
101 isEachRemoteRequestVideosEventsValid
102 }
103
104 declare module 'express-validator' {
105 export interface Validator {
106 isEachRemoteRequestVideosValid,
107 isEachRemoteRequestVideosQaduValid,
108 isEachRemoteRequestVideosEventsValid
109 }
110 }
111
112 // ---------------------------------------------------------------------------
113
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
132
133 return (
134 isVideoFileInfoHashValid(videoFile.infoHash) &&
135 isVideoFileExtnameValid(videoFile.extname) &&
136 isVideoFileResolutionValid(videoFile.resolution)
137 )
138 })
139 }
140
141 function isRequestTypeAddValid (value: string) {
142 return value === ENDPOINT_ACTIONS.ADD
143 }
144
145 function isRequestTypeUpdateValid (value: string) {
146 return value === ENDPOINT_ACTIONS.UPDATE
147 }
148
149 function isRequestTypeRemoveValid (value: string) {
150 return value === ENDPOINT_ACTIONS.REMOVE
151 }
152
153 function isRequestTypeReportAbuseValid (value: string) {
154 return value === ENDPOINT_ACTIONS.REPORT_ABUSE
155 }