]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - server/helpers/custom-validators/activitypub/activity.ts
fbdde10ad51bbac7089a313f9f17ba07bd155140
[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 { 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 }
69
70 function checkDeleteActivity (activity: any) {
71 return isVideoTorrentDeleteActivityValid(activity) ||
72 isActorDeleteActivityValid(activity)
73 }
74
75 function checkFollowActivity (activity: any) {
76 return isActorFollowActivityValid(activity)
77 }
78
79 function checkAcceptActivity (activity: any) {
80 return isActorAcceptActivityValid(activity)
81 }
82
83 function checkAnnounceActivity (activity: any) {
84 return isAnnounceActivityValid(activity)
85 }
86
87 function checkUndoActivity (activity: any) {
88 return isUndoActivityValid(activity)
89 }
90
91 function checkLikeActivity (activity: any) {
92 return isLikeActivityValid(activity)
93 }