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