]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame_incremental - server/helpers/custom-validators/activitypub/activity.ts
Add ability to import video with youtube-dl
[github/Chocobozzz/PeerTube.git] / server / helpers / custom-validators / activitypub / activity.ts
... / ...
CommitLineData
1import * as validator from 'validator'
2import { Activity, ActivityType } from '../../../../shared/models/activitypub'
3import {
4 isActorAcceptActivityValid, isActorDeleteActivityValid, isActorFollowActivityValid, isActorRejectActivityValid,
5 isActorUpdateActivityValid
6} from './actor'
7import { isAnnounceActivityValid } from './announce'
8import { isActivityPubUrlValid } from './misc'
9import { isDislikeActivityValid, isLikeActivityValid } from './rate'
10import { isUndoActivityValid } from './undo'
11import { isVideoCommentCreateActivityValid, isVideoCommentDeleteActivityValid } from './video-comments'
12import {
13 isVideoFlagValid,
14 sanitizeAndCheckVideoTorrentCreateActivity,
15 isVideoTorrentDeleteActivityValid,
16 sanitizeAndCheckVideoTorrentUpdateActivity
17} from './videos'
18import { isViewActivityValid } from './view'
19import { exists } from '../misc'
20
21function isRootActivityValid (activity: any) {
22 return Array.isArray(activity['@context']) && (
23 (
24 (activity.type === 'Collection' || activity.type === 'OrderedCollection') &&
25 validator.isInt(activity.totalItems, { min: 0 }) &&
26 Array.isArray(activity.items)
27 ) ||
28 (
29 isActivityPubUrlValid(activity.id) &&
30 exists(activity.actor) &&
31 (isActivityPubUrlValid(activity.actor) || isActivityPubUrlValid(activity.actor.id))
32 )
33 )
34}
35
36const activityCheckers: { [ P in ActivityType ]: (activity: Activity) => boolean } = {
37 Create: checkCreateActivity,
38 Update: checkUpdateActivity,
39 Delete: checkDeleteActivity,
40 Follow: checkFollowActivity,
41 Accept: checkAcceptActivity,
42 Reject: checkRejectActivity,
43 Announce: checkAnnounceActivity,
44 Undo: checkUndoActivity,
45 Like: checkLikeActivity
46}
47
48function isActivityValid (activity: any) {
49 const checker = activityCheckers[activity.type]
50 // Unknown activity type
51 if (!checker) return false
52
53 return checker(activity)
54}
55
56// ---------------------------------------------------------------------------
57
58export {
59 isRootActivityValid,
60 isActivityValid
61}
62
63// ---------------------------------------------------------------------------
64
65function checkCreateActivity (activity: any) {
66 return isViewActivityValid(activity) ||
67 isDislikeActivityValid(activity) ||
68 sanitizeAndCheckVideoTorrentCreateActivity(activity) ||
69 isVideoFlagValid(activity) ||
70 isVideoCommentCreateActivityValid(activity)
71}
72
73function checkUpdateActivity (activity: any) {
74 return sanitizeAndCheckVideoTorrentUpdateActivity(activity) ||
75 isActorUpdateActivityValid(activity)
76}
77
78function checkDeleteActivity (activity: any) {
79 return isVideoTorrentDeleteActivityValid(activity) ||
80 isActorDeleteActivityValid(activity) ||
81 isVideoCommentDeleteActivityValid(activity)
82}
83
84function checkFollowActivity (activity: any) {
85 return isActorFollowActivityValid(activity)
86}
87
88function checkAcceptActivity (activity: any) {
89 return isActorAcceptActivityValid(activity)
90}
91
92function checkRejectActivity (activity: any) {
93 return isActorRejectActivityValid(activity)
94}
95
96function checkAnnounceActivity (activity: any) {
97 return isAnnounceActivityValid(activity)
98}
99
100function checkUndoActivity (activity: any) {
101 return isUndoActivityValid(activity)
102}
103
104function checkLikeActivity (activity: any) {
105 return isLikeActivityValid(activity)
106}