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