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