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