]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - server/helpers/custom-validators/activitypub/activity.ts
Create comment on replied mastodon statutes
[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'
50d6de9c 3import { isActorAcceptActivityValid, isActorDeleteActivityValid, isActorFollowActivityValid } from './actor'
0032ebe9 4import { isAnnounceActivityValid } from './announce'
350e31d6 5import { isActivityPubUrlValid } from './misc'
3fd3ab2d 6import { isDislikeActivityValid, isLikeActivityValid } from './rate'
0032ebe9 7import { isUndoActivityValid } from './undo'
50d6de9c 8import { isVideoChannelDeleteActivityValid, isVideoChannelUpdateActivityValid } from './video-channels'
6d852470 9import { isVideoCommentCreateActivityValid } from './video-comments'
0d0e8dd0 10import {
d8465018 11 isVideoFlagValid,
50d6de9c 12 isVideoTorrentCreateActivityValid,
350e31d6
C
13 isVideoTorrentDeleteActivityValid,
14 isVideoTorrentUpdateActivityValid
0d0e8dd0 15} from './videos'
40ff5707 16import { isViewActivityValid } from './view'
0d0e8dd0
C
17
18function isRootActivityValid (activity: any) {
19 return Array.isArray(activity['@context']) &&
20 (
21 (activity.type === 'Collection' || activity.type === 'OrderedCollection') &&
22 validator.isInt(activity.totalItems, { min: 0 }) &&
23 Array.isArray(activity.items)
24 ) ||
25 (
350e31d6
C
26 isActivityPubUrlValid(activity.id) &&
27 isActivityPubUrlValid(activity.actor)
0d0e8dd0
C
28 )
29}
30
54141398
C
31const activityCheckers: { [ P in ActivityType ]: (activity: Activity) => boolean } = {
32 Create: checkCreateActivity,
54141398
C
33 Update: checkUpdateActivity,
34 Delete: checkDeleteActivity,
35 Follow: checkFollowActivity,
36 Accept: checkAcceptActivity,
37 Announce: checkAnnounceActivity,
0032ebe9
C
38 Undo: checkUndoActivity,
39 Like: checkLikeActivity
54141398
C
40}
41
0d0e8dd0 42function isActivityValid (activity: any) {
54141398
C
43 const checker = activityCheckers[activity.type]
44 // Unknown activity type
45 if (!checker) return false
46
47 return checker(activity)
0d0e8dd0
C
48}
49
50// ---------------------------------------------------------------------------
51
52export {
53 isRootActivityValid,
54 isActivityValid
55}
54141398
C
56
57// ---------------------------------------------------------------------------
58
59function checkCreateActivity (activity: any) {
0032ebe9
C
60 return isViewActivityValid(activity) ||
61 isDislikeActivityValid(activity) ||
50d6de9c 62 isVideoTorrentCreateActivityValid(activity) ||
6d852470
C
63 isVideoFlagValid(activity) ||
64 isVideoCommentCreateActivityValid(activity)
54141398
C
65}
66
54141398
C
67function checkUpdateActivity (activity: any) {
68 return isVideoTorrentUpdateActivityValid(activity) ||
69 isVideoChannelUpdateActivityValid(activity)
70}
71
72function checkDeleteActivity (activity: any) {
73 return isVideoTorrentDeleteActivityValid(activity) ||
74 isVideoChannelDeleteActivityValid(activity) ||
50d6de9c 75 isActorDeleteActivityValid(activity)
54141398
C
76}
77
78function checkFollowActivity (activity: any) {
50d6de9c 79 return isActorFollowActivityValid(activity)
54141398
C
80}
81
82function checkAcceptActivity (activity: any) {
50d6de9c 83 return isActorAcceptActivityValid(activity)
54141398
C
84}
85
86function checkAnnounceActivity (activity: any) {
0032ebe9 87 return isAnnounceActivityValid(activity)
54141398
C
88}
89
90function checkUndoActivity (activity: any) {
0032ebe9
C
91 return isUndoActivityValid(activity)
92}
93
94function checkLikeActivity (activity: any) {
95 return isLikeActivityValid(activity)
54141398 96}