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