]>
Commit | Line | Data |
---|---|---|
0d0e8dd0 | 1 | import * as validator from 'validator' |
65fcc311 C |
2 | |
3 | import { | |
0d0e8dd0 | 4 | ACTIVITY_PUB |
65fcc311 | 5 | } from '../../../initializers' |
0d0e8dd0 | 6 | import { isDateValid, isUUIDValid } from '../misc' |
65fcc311 | 7 | import { |
65fcc311 | 8 | isVideoViewsValid, |
65fcc311 | 9 | isVideoNSFWValid, |
9567011b | 10 | isVideoTruncatedDescriptionValid, |
65fcc311 | 11 | isVideoDurationValid, |
65fcc311 | 12 | isVideoNameValid, |
e34c85e5 C |
13 | isVideoTagValid, |
14 | isVideoUrlValid | |
65fcc311 | 15 | } from '../videos' |
72c7248b | 16 | import { isVideoChannelDescriptionValid, isVideoChannelNameValid } from '../video-channels' |
350e31d6 | 17 | import { isActivityPubUrlValid, isBaseActivityValid } from './misc' |
0d0e8dd0 C |
18 | |
19 | function isVideoTorrentAddActivityValid (activity: any) { | |
20 | return isBaseActivityValid(activity, 'Add') && | |
21 | isVideoTorrentObjectValid(activity.object) | |
22 | } | |
23 | ||
24 | function isVideoTorrentUpdateActivityValid (activity: any) { | |
25 | return isBaseActivityValid(activity, 'Update') && | |
26 | isVideoTorrentObjectValid(activity.object) | |
65fcc311 C |
27 | } |
28 | ||
350e31d6 C |
29 | function isVideoTorrentDeleteActivityValid (activity: any) { |
30 | return isBaseActivityValid(activity, 'Delete') | |
31 | } | |
32 | ||
0d0e8dd0 C |
33 | function isVideoTorrentObjectValid (video: any) { |
34 | return video.type === 'Video' && | |
35 | isVideoNameValid(video.name) && | |
36 | isVideoDurationValid(video.duration) && | |
37 | isUUIDValid(video.uuid) && | |
38 | setValidRemoteTags(video) && | |
39 | isRemoteIdentifierValid(video.category) && | |
40 | isRemoteIdentifierValid(video.licence) && | |
41 | isRemoteIdentifierValid(video.language) && | |
42 | isVideoViewsValid(video.video) && | |
43 | isVideoNSFWValid(video.nsfw) && | |
44 | isDateValid(video.published) && | |
45 | isDateValid(video.updated) && | |
46 | isRemoteVideoContentValid(video.mediaType, video.content) && | |
47 | isRemoteVideoIconValid(video.icon) && | |
48 | setValidRemoteVideoUrls(video.url) | |
65fcc311 C |
49 | } |
50 | ||
0d0e8dd0 C |
51 | function isVideoChannelCreateActivityValid (activity: any) { |
52 | return isBaseActivityValid(activity, 'Create') && | |
53 | isVideoChannelObjectValid(activity.object) | |
54 | } | |
55 | ||
56 | function isVideoChannelUpdateActivityValid (activity: any) { | |
57 | return isBaseActivityValid(activity, 'Update') && | |
58 | isVideoChannelObjectValid(activity.object) | |
59 | } | |
60 | ||
350e31d6 C |
61 | function isVideoChannelDeleteActivityValid (activity: any) { |
62 | return isBaseActivityValid(activity, 'Delete') | |
63 | } | |
64 | ||
0d0e8dd0 C |
65 | function isVideoChannelObjectValid (videoChannel: any) { |
66 | return videoChannel.type === 'VideoChannel' && | |
67 | isVideoChannelNameValid(videoChannel.name) && | |
68 | isVideoChannelDescriptionValid(videoChannel.description) && | |
69 | isUUIDValid(videoChannel.uuid) | |
65fcc311 C |
70 | } |
71 | ||
72 | // --------------------------------------------------------------------------- | |
73 | ||
74 | export { | |
0d0e8dd0 C |
75 | isVideoTorrentAddActivityValid, |
76 | isVideoChannelCreateActivityValid, | |
77 | isVideoTorrentUpdateActivityValid, | |
350e31d6 C |
78 | isVideoChannelUpdateActivityValid, |
79 | isVideoChannelDeleteActivityValid, | |
80 | isVideoTorrentDeleteActivityValid | |
65fcc311 C |
81 | } |
82 | ||
83 | // --------------------------------------------------------------------------- | |
84 | ||
0d0e8dd0 C |
85 | function setValidRemoteTags (video: any) { |
86 | if (Array.isArray(video.tag) === false) return false | |
65fcc311 | 87 | |
0d0e8dd0 C |
88 | const newTag = video.tag.filter(t => { |
89 | return t.type === 'Hashtag' && | |
90 | isVideoTagValid(t.name) | |
91 | }) | |
72c7248b | 92 | |
0d0e8dd0 C |
93 | video.tag = newTag |
94 | return true | |
72c7248b C |
95 | } |
96 | ||
0d0e8dd0 C |
97 | function isRemoteIdentifierValid (data: any) { |
98 | return validator.isInt(data.identifier, { min: 0 }) | |
72c7248b C |
99 | } |
100 | ||
0d0e8dd0 C |
101 | function isRemoteVideoContentValid (mediaType: string, content: string) { |
102 | return mediaType === 'text/markdown' && isVideoTruncatedDescriptionValid(content) | |
72c7248b C |
103 | } |
104 | ||
0d0e8dd0 C |
105 | function isRemoteVideoIconValid (icon: any) { |
106 | return icon.type === 'Image' && | |
e34c85e5 | 107 | isVideoUrlValid(icon.url) && |
0d0e8dd0 C |
108 | icon.mediaType === 'image/jpeg' && |
109 | validator.isInt(icon.width, { min: 0 }) && | |
110 | validator.isInt(icon.height, { min: 0 }) | |
72c7248b C |
111 | } |
112 | ||
0d0e8dd0 C |
113 | function setValidRemoteVideoUrls (video: any) { |
114 | if (Array.isArray(video.url) === false) return false | |
65fcc311 | 115 | |
0d0e8dd0 C |
116 | const newUrl = video.url.filter(u => isRemoteVideoUrlValid(u)) |
117 | video.url = newUrl | |
65fcc311 | 118 | |
0d0e8dd0 | 119 | return true |
65fcc311 C |
120 | } |
121 | ||
0d0e8dd0 C |
122 | function isRemoteVideoUrlValid (url: any) { |
123 | return url.type === 'Link' && | |
124 | ACTIVITY_PUB.VIDEO_URL_MIME_TYPES.indexOf(url.mimeType) !== -1 && | |
e34c85e5 | 125 | isVideoUrlValid(url.url) && |
0d0e8dd0 C |
126 | validator.isInt(url.width, { min: 0 }) && |
127 | validator.isInt(url.size, { min: 0 }) | |
65fcc311 | 128 | } |