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