]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - server/helpers/custom-validators/activitypub/activity.ts
Update readme, architecture
[github/Chocobozzz/PeerTube.git] / server / helpers / custom-validators / activitypub / activity.ts
CommitLineData
0d0e8dd0 1import * as validator from 'validator'
54141398 2import { Activity, ActivityType } from '../../../../shared/models/activitypub/activity'
350e31d6 3import { isAccountAcceptActivityValid, isAccountDeleteActivityValid, isAccountFollowActivityValid } from './account'
0032ebe9 4import { isAnnounceActivityValid } from './announce'
350e31d6 5import { isActivityPubUrlValid } from './misc'
0032ebe9 6import { isUndoActivityValid } from './undo'
54141398 7import { isVideoChannelCreateActivityValid, isVideoChannelDeleteActivityValid, isVideoChannelUpdateActivityValid } from './video-channels'
0d0e8dd0 8import {
d8465018 9 isVideoFlagValid,
0d0e8dd0 10 isVideoTorrentAddActivityValid,
350e31d6
C
11 isVideoTorrentDeleteActivityValid,
12 isVideoTorrentUpdateActivityValid
0d0e8dd0 13} from './videos'
40ff5707 14import { isViewActivityValid } from './view'
0032ebe9 15import { isDislikeActivityValid, isLikeActivityValid } from './rate'
0d0e8dd0
C
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 (
350e31d6
C
25 isActivityPubUrlValid(activity.id) &&
26 isActivityPubUrlValid(activity.actor)
0d0e8dd0
C
27 )
28}
29
54141398
C
30const activityCheckers: { [ P in ActivityType ]: (activity: Activity) => boolean } = {
31 Create: checkCreateActivity,
32 Add: checkAddActivity,
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) ||
62 isVideoChannelCreateActivityValid(activity) ||
63 isVideoFlagValid(activity)
54141398
C
64}
65
66function checkAddActivity (activity: any) {
67 return isVideoTorrentAddActivityValid(activity)
68}
69
70function checkUpdateActivity (activity: any) {
71 return isVideoTorrentUpdateActivityValid(activity) ||
72 isVideoChannelUpdateActivityValid(activity)
73}
74
75function checkDeleteActivity (activity: any) {
76 return isVideoTorrentDeleteActivityValid(activity) ||
77 isVideoChannelDeleteActivityValid(activity) ||
78 isAccountDeleteActivityValid(activity)
79}
80
81function checkFollowActivity (activity: any) {
82 return isAccountFollowActivityValid(activity)
83}
84
85function checkAcceptActivity (activity: any) {
86 return isAccountAcceptActivityValid(activity)
87}
88
89function checkAnnounceActivity (activity: any) {
0032ebe9 90 return isAnnounceActivityValid(activity)
54141398
C
91}
92
93function checkUndoActivity (activity: any) {
0032ebe9
C
94 return isUndoActivityValid(activity)
95}
96
97function checkLikeActivity (activity: any) {
98 return isLikeActivityValid(activity)
54141398 99}