]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - server/helpers/custom-validators/activitypub/activity.ts
Merge branch 'release/v1.2.0'
[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'
848f499d
C
3import { sanitizeAndCheckActorObject } from './actor'
4import { isActivityPubUrlValid, isBaseActivityValid, isObjectValid } from './misc'
5import { isDislikeActivityValid } from './rate'
6import { sanitizeAndCheckVideoCommentObject } from './video-comments'
7import { sanitizeAndCheckVideoTorrentObject } from './videos'
40ff5707 8import { isViewActivityValid } from './view'
bcec136e 9import { exists } from '../misc'
848f499d
C
10import { isCacheFileObjectValid } from './cache-file'
11import { isFlagActivityValid } from './flag'
0d0e8dd0
C
12
13function isRootActivityValid (activity: any) {
f6a7c82c 14 return Array.isArray(activity['@context']) && (
0d0e8dd0
C
15 (
16 (activity.type === 'Collection' || activity.type === 'OrderedCollection') &&
17 validator.isInt(activity.totalItems, { min: 0 }) &&
18 Array.isArray(activity.items)
19 ) ||
20 (
350e31d6 21 isActivityPubUrlValid(activity.id) &&
bcec136e 22 exists(activity.actor) &&
6be84cbc 23 (isActivityPubUrlValid(activity.actor) || isActivityPubUrlValid(activity.actor.id))
0d0e8dd0 24 )
f6a7c82c 25 )
0d0e8dd0
C
26}
27
54141398
C
28const activityCheckers: { [ P in ActivityType ]: (activity: Activity) => boolean } = {
29 Create: checkCreateActivity,
54141398
C
30 Update: checkUpdateActivity,
31 Delete: checkDeleteActivity,
32 Follow: checkFollowActivity,
33 Accept: checkAcceptActivity,
4bbc373f 34 Reject: checkRejectActivity,
54141398 35 Announce: checkAnnounceActivity,
0032ebe9 36 Undo: checkUndoActivity,
848f499d
C
37 Like: checkLikeActivity,
38 View: checkViewActivity,
39 Flag: checkFlagActivity,
40 Dislike: checkDislikeActivity
54141398
C
41}
42
0d0e8dd0 43function isActivityValid (activity: any) {
54141398
C
44 const checker = activityCheckers[activity.type]
45 // Unknown activity type
46 if (!checker) return false
47
48 return checker(activity)
0d0e8dd0
C
49}
50
51// ---------------------------------------------------------------------------
52
53export {
54 isRootActivityValid,
55 isActivityValid
56}
54141398
C
57
58// ---------------------------------------------------------------------------
59
848f499d
C
60function checkViewActivity (activity: any) {
61 return isBaseActivityValid(activity, 'View') &&
62 isViewActivityValid(activity)
63}
64
65function checkFlagActivity (activity: any) {
66 return isBaseActivityValid(activity, 'Flag') &&
67 isFlagActivityValid(activity)
68}
69
70function checkDislikeActivity (activity: any) {
71 return isBaseActivityValid(activity, 'Dislike') &&
72 isDislikeActivityValid(activity)
73}
74
54141398 75function checkCreateActivity (activity: any) {
848f499d
C
76 return isBaseActivityValid(activity, 'Create') &&
77 (
78 isViewActivityValid(activity.object) ||
79 isDislikeActivityValid(activity.object) ||
80 isFlagActivityValid(activity.object) ||
81
82 isCacheFileObjectValid(activity.object) ||
83 sanitizeAndCheckVideoCommentObject(activity.object) ||
84 sanitizeAndCheckVideoTorrentObject(activity.object)
85 )
54141398
C
86}
87
54141398 88function checkUpdateActivity (activity: any) {
848f499d
C
89 return isBaseActivityValid(activity, 'Update') &&
90 (
91 isCacheFileObjectValid(activity.object) ||
92 sanitizeAndCheckVideoTorrentObject(activity.object) ||
93 sanitizeAndCheckActorObject(activity.object)
94 )
54141398
C
95}
96
97function checkDeleteActivity (activity: any) {
848f499d
C
98 // We don't really check objects
99 return isBaseActivityValid(activity, 'Delete') &&
100 isObjectValid(activity.object)
54141398
C
101}
102
103function checkFollowActivity (activity: any) {
848f499d
C
104 return isBaseActivityValid(activity, 'Follow') &&
105 isObjectValid(activity.object)
54141398
C
106}
107
108function checkAcceptActivity (activity: any) {
848f499d 109 return isBaseActivityValid(activity, 'Accept')
54141398
C
110}
111
4bbc373f 112function checkRejectActivity (activity: any) {
848f499d 113 return isBaseActivityValid(activity, 'Reject')
4bbc373f
C
114}
115
54141398 116function checkAnnounceActivity (activity: any) {
848f499d
C
117 return isBaseActivityValid(activity, 'Announce') &&
118 isObjectValid(activity.object)
54141398
C
119}
120
121function checkUndoActivity (activity: any) {
848f499d
C
122 return isBaseActivityValid(activity, 'Undo') &&
123 (
124 checkFollowActivity(activity.object) ||
125 checkLikeActivity(activity.object) ||
126 checkDislikeActivity(activity.object) ||
127 checkAnnounceActivity(activity.object) ||
128 checkCreateActivity(activity.object)
129 )
0032ebe9
C
130}
131
132function checkLikeActivity (activity: any) {
848f499d
C
133 return isBaseActivityValid(activity, 'Like') &&
134 isObjectValid(activity.object)
54141398 135}