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