1 import * as validator from 'validator'
5 } from '../../../initializers'
6 import { isDateValid, isUUIDValid } from '../misc'
10 isVideoTruncatedDescriptionValid,
16 import { isVideoChannelDescriptionValid, isVideoChannelNameValid } from '../video-channels'
17 import { isActivityPubUrlValid, isBaseActivityValid } from './misc'
19 function isVideoTorrentAddActivityValid (activity: any) {
20 return isBaseActivityValid(activity, 'Add') &&
21 isVideoTorrentObjectValid(activity.object)
24 function isVideoTorrentUpdateActivityValid (activity: any) {
25 return isBaseActivityValid(activity, 'Update') &&
26 isVideoTorrentObjectValid(activity.object)
29 function isVideoTorrentDeleteActivityValid (activity: any) {
30 return isBaseActivityValid(activity, 'Delete')
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)
51 function isVideoChannelCreateActivityValid (activity: any) {
52 return isBaseActivityValid(activity, 'Create') &&
53 isVideoChannelObjectValid(activity.object)
56 function isVideoChannelUpdateActivityValid (activity: any) {
57 return isBaseActivityValid(activity, 'Update') &&
58 isVideoChannelObjectValid(activity.object)
61 function isVideoChannelDeleteActivityValid (activity: any) {
62 return isBaseActivityValid(activity, 'Delete')
65 function isVideoChannelObjectValid (videoChannel: any) {
66 return videoChannel.type === 'VideoChannel' &&
67 isVideoChannelNameValid(videoChannel.name) &&
68 isVideoChannelDescriptionValid(videoChannel.description) &&
69 isUUIDValid(videoChannel.uuid)
72 // ---------------------------------------------------------------------------
75 isVideoTorrentAddActivityValid,
76 isVideoChannelCreateActivityValid,
77 isVideoTorrentUpdateActivityValid,
78 isVideoChannelUpdateActivityValid,
79 isVideoChannelDeleteActivityValid,
80 isVideoTorrentDeleteActivityValid
83 // ---------------------------------------------------------------------------
85 function setValidRemoteTags (video: any) {
86 if (Array.isArray(video.tag) === false) return false
88 const newTag = video.tag.filter(t => {
89 return t.type === 'Hashtag' &&
90 isVideoTagValid(t.name)
97 function isRemoteIdentifierValid (data: any) {
98 return validator.isInt(data.identifier, { min: 0 })
101 function isRemoteVideoContentValid (mediaType: string, content: string) {
102 return mediaType === 'text/markdown' && isVideoTruncatedDescriptionValid(content)
105 function isRemoteVideoIconValid (icon: any) {
106 return icon.type === 'Image' &&
107 isVideoUrlValid(icon.url) &&
108 icon.mediaType === 'image/jpeg' &&
109 validator.isInt(icon.width, { min: 0 }) &&
110 validator.isInt(icon.height, { min: 0 })
113 function setValidRemoteVideoUrls (video: any) {
114 if (Array.isArray(video.url) === false) return false
116 const newUrl = video.url.filter(u => isRemoteVideoUrlValid(u))
122 function isRemoteVideoUrlValid (url: any) {
123 return url.type === 'Link' &&
124 ACTIVITY_PUB.VIDEO_URL_MIME_TYPES.indexOf(url.mimeType) !== -1 &&
125 isVideoUrlValid(url.url) &&
126 validator.isInt(url.width, { min: 0 }) &&
127 validator.isInt(url.size, { min: 0 })