]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - server/helpers/custom-validators/activitypub/activity.ts
Update README.md (#378)
[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,
50d6de9c 14 isVideoTorrentCreateActivityValid,
350e31d6
C
15 isVideoTorrentDeleteActivityValid,
16 isVideoTorrentUpdateActivityValid
0d0e8dd0 17} from './videos'
40ff5707 18import { isViewActivityValid } from './view'
0d0e8dd0
C
19
20function isRootActivityValid (activity: any) {
21 return Array.isArray(activity['@context']) &&
22 (
23 (activity.type === 'Collection' || activity.type === 'OrderedCollection') &&
24 validator.isInt(activity.totalItems, { min: 0 }) &&
25 Array.isArray(activity.items)
26 ) ||
27 (
350e31d6
C
28 isActivityPubUrlValid(activity.id) &&
29 isActivityPubUrlValid(activity.actor)
0d0e8dd0
C
30 )
31}
32
54141398
C
33const activityCheckers: { [ P in ActivityType ]: (activity: Activity) => boolean } = {
34 Create: checkCreateActivity,
54141398
C
35 Update: checkUpdateActivity,
36 Delete: checkDeleteActivity,
37 Follow: checkFollowActivity,
38 Accept: checkAcceptActivity,
4bbc373f 39 Reject: checkRejectActivity,
54141398 40 Announce: checkAnnounceActivity,
0032ebe9
C
41 Undo: checkUndoActivity,
42 Like: checkLikeActivity
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
62function checkCreateActivity (activity: any) {
0032ebe9
C
63 return isViewActivityValid(activity) ||
64 isDislikeActivityValid(activity) ||
50d6de9c 65 isVideoTorrentCreateActivityValid(activity) ||
6d852470
C
66 isVideoFlagValid(activity) ||
67 isVideoCommentCreateActivityValid(activity)
54141398
C
68}
69
54141398 70function checkUpdateActivity (activity: any) {
265ba139
C
71 return isVideoTorrentUpdateActivityValid(activity) ||
72 isActorUpdateActivityValid(activity)
54141398
C
73}
74
75function checkDeleteActivity (activity: any) {
76 return isVideoTorrentDeleteActivityValid(activity) ||
4cb6d457
C
77 isActorDeleteActivityValid(activity) ||
78 isVideoCommentDeleteActivityValid(activity)
54141398
C
79}
80
81function checkFollowActivity (activity: any) {
50d6de9c 82 return isActorFollowActivityValid(activity)
54141398
C
83}
84
85function checkAcceptActivity (activity: any) {
50d6de9c 86 return isActorAcceptActivityValid(activity)
54141398
C
87}
88
4bbc373f
C
89function checkRejectActivity (activity: any) {
90 return isActorRejectActivityValid(activity)
91}
92
54141398 93function checkAnnounceActivity (activity: any) {
0032ebe9 94 return isAnnounceActivityValid(activity)
54141398
C
95}
96
97function checkUndoActivity (activity: any) {
0032ebe9
C
98 return isUndoActivityValid(activity)
99}
100
101function checkLikeActivity (activity: any) {
102 return isLikeActivityValid(activity)
54141398 103}