]>
Commit | Line | Data |
---|---|---|
0d0e8dd0 | 1 | import * as validator from 'validator' |
54141398 | 2 | import { Activity, ActivityType } from '../../../../shared/models/activitypub/activity' |
350e31d6 | 3 | import { isAccountAcceptActivityValid, isAccountDeleteActivityValid, isAccountFollowActivityValid } from './account' |
54141398 | 4 | import { isAnnounceValid } from './announce' |
350e31d6 | 5 | import { isActivityPubUrlValid } from './misc' |
54141398 C |
6 | import { isUndoValid } from './undo' |
7 | import { isVideoChannelCreateActivityValid, isVideoChannelDeleteActivityValid, isVideoChannelUpdateActivityValid } from './video-channels' | |
0d0e8dd0 | 8 | import { |
d8465018 | 9 | isVideoFlagValid, |
0d0e8dd0 | 10 | isVideoTorrentAddActivityValid, |
350e31d6 C |
11 | isVideoTorrentDeleteActivityValid, |
12 | isVideoTorrentUpdateActivityValid | |
0d0e8dd0 C |
13 | } from './videos' |
14 | ||
15 | function isRootActivityValid (activity: any) { | |
16 | return Array.isArray(activity['@context']) && | |
17 | ( | |
18 | (activity.type === 'Collection' || activity.type === 'OrderedCollection') && | |
19 | validator.isInt(activity.totalItems, { min: 0 }) && | |
20 | Array.isArray(activity.items) | |
21 | ) || | |
22 | ( | |
350e31d6 C |
23 | isActivityPubUrlValid(activity.id) && |
24 | isActivityPubUrlValid(activity.actor) | |
0d0e8dd0 C |
25 | ) |
26 | } | |
27 | ||
54141398 C |
28 | const activityCheckers: { [ P in ActivityType ]: (activity: Activity) => boolean } = { |
29 | Create: checkCreateActivity, | |
30 | Add: checkAddActivity, | |
31 | Update: checkUpdateActivity, | |
32 | Delete: checkDeleteActivity, | |
33 | Follow: checkFollowActivity, | |
34 | Accept: checkAcceptActivity, | |
35 | Announce: checkAnnounceActivity, | |
36 | Undo: checkUndoActivity | |
37 | } | |
38 | ||
0d0e8dd0 | 39 | function isActivityValid (activity: any) { |
54141398 C |
40 | const checker = activityCheckers[activity.type] |
41 | // Unknown activity type | |
42 | if (!checker) return false | |
43 | ||
44 | return checker(activity) | |
0d0e8dd0 C |
45 | } |
46 | ||
47 | // --------------------------------------------------------------------------- | |
48 | ||
49 | export { | |
50 | isRootActivityValid, | |
51 | isActivityValid | |
52 | } | |
54141398 C |
53 | |
54 | // --------------------------------------------------------------------------- | |
55 | ||
56 | function checkCreateActivity (activity: any) { | |
57 | return isVideoChannelCreateActivityValid(activity) || | |
58 | isVideoFlagValid(activity) | |
59 | } | |
60 | ||
61 | function checkAddActivity (activity: any) { | |
62 | return isVideoTorrentAddActivityValid(activity) | |
63 | } | |
64 | ||
65 | function checkUpdateActivity (activity: any) { | |
66 | return isVideoTorrentUpdateActivityValid(activity) || | |
67 | isVideoChannelUpdateActivityValid(activity) | |
68 | } | |
69 | ||
70 | function checkDeleteActivity (activity: any) { | |
71 | return isVideoTorrentDeleteActivityValid(activity) || | |
72 | isVideoChannelDeleteActivityValid(activity) || | |
73 | isAccountDeleteActivityValid(activity) | |
74 | } | |
75 | ||
76 | function checkFollowActivity (activity: any) { | |
77 | return isAccountFollowActivityValid(activity) | |
78 | } | |
79 | ||
80 | function checkAcceptActivity (activity: any) { | |
81 | return isAccountAcceptActivityValid(activity) | |
82 | } | |
83 | ||
84 | function checkAnnounceActivity (activity: any) { | |
85 | return isAnnounceValid(activity) | |
86 | } | |
87 | ||
88 | function checkUndoActivity (activity: any) { | |
89 | return isUndoValid(activity) | |
90 | } |