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