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