]>
Commit | Line | Data |
---|---|---|
7cde3b9c | 1 | import validator from 'validator' |
3fd3ab2d | 2 | import { Activity, ActivityType } from '../../../../shared/models/activitypub' |
74d249bc | 3 | import { exists } from '../misc' |
848f499d | 4 | import { sanitizeAndCheckActorObject } from './actor' |
74d249bc C |
5 | import { isCacheFileObjectValid } from './cache-file' |
6 | import { isFlagActivityValid } from './flag' | |
848f499d | 7 | import { isActivityPubUrlValid, isBaseActivityValid, isObjectValid } from './misc' |
74d249bc C |
8 | import { isPlaylistObjectValid } from './playlist' |
9 | import { isDislikeActivityValid, isLikeActivityValid } from './rate' | |
10 | import { isShareActivityValid } from './share' | |
848f499d C |
11 | import { sanitizeAndCheckVideoCommentObject } from './video-comments' |
12 | import { sanitizeAndCheckVideoTorrentObject } from './videos' | |
40ff5707 | 13 | import { isViewActivityValid } from './view' |
0d0e8dd0 C |
14 | |
15 | function isRootActivityValid (activity: any) { | |
4550872b C |
16 | return isCollection(activity) || isActivity(activity) |
17 | } | |
18 | ||
19 | function isCollection (activity: any) { | |
20 | return (activity.type === 'Collection' || activity.type === 'OrderedCollection') && | |
21 | validator.isInt(activity.totalItems, { min: 0 }) && | |
22 | Array.isArray(activity.items) | |
23 | } | |
24 | ||
25 | function isActivity (activity: any) { | |
26 | return isActivityPubUrlValid(activity.id) && | |
27 | exists(activity.actor) && | |
28 | (isActivityPubUrlValid(activity.actor) || isActivityPubUrlValid(activity.actor.id)) | |
0d0e8dd0 C |
29 | } |
30 | ||
54141398 C |
31 | const activityCheckers: { [ P in ActivityType ]: (activity: Activity) => boolean } = { |
32 | Create: checkCreateActivity, | |
54141398 C |
33 | Update: checkUpdateActivity, |
34 | Delete: checkDeleteActivity, | |
35 | Follow: checkFollowActivity, | |
36 | Accept: checkAcceptActivity, | |
4bbc373f | 37 | Reject: checkRejectActivity, |
54141398 | 38 | Announce: checkAnnounceActivity, |
0032ebe9 | 39 | Undo: checkUndoActivity, |
848f499d C |
40 | Like: checkLikeActivity, |
41 | View: checkViewActivity, | |
42 | Flag: checkFlagActivity, | |
43 | Dislike: checkDislikeActivity | |
54141398 C |
44 | } |
45 | ||
0d0e8dd0 | 46 | function isActivityValid (activity: any) { |
54141398 C |
47 | const checker = activityCheckers[activity.type] |
48 | // Unknown activity type | |
49 | if (!checker) return false | |
50 | ||
51 | return checker(activity) | |
0d0e8dd0 C |
52 | } |
53 | ||
54 | // --------------------------------------------------------------------------- | |
55 | ||
56 | export { | |
57 | isRootActivityValid, | |
58 | isActivityValid | |
59 | } | |
54141398 C |
60 | |
61 | // --------------------------------------------------------------------------- | |
62 | ||
848f499d C |
63 | function checkViewActivity (activity: any) { |
64 | return isBaseActivityValid(activity, 'View') && | |
65 | isViewActivityValid(activity) | |
66 | } | |
67 | ||
68 | function checkFlagActivity (activity: any) { | |
69 | return isBaseActivityValid(activity, 'Flag') && | |
70 | isFlagActivityValid(activity) | |
71 | } | |
72 | ||
73 | function checkDislikeActivity (activity: any) { | |
74d249bc C |
74 | return isDislikeActivityValid(activity) |
75 | } | |
76 | ||
77 | function checkLikeActivity (activity: any) { | |
78 | return isLikeActivityValid(activity) | |
848f499d C |
79 | } |
80 | ||
54141398 | 81 | function checkCreateActivity (activity: any) { |
848f499d C |
82 | return isBaseActivityValid(activity, 'Create') && |
83 | ( | |
84 | isViewActivityValid(activity.object) || | |
85 | isDislikeActivityValid(activity.object) || | |
86 | isFlagActivityValid(activity.object) || | |
418d092a | 87 | isPlaylistObjectValid(activity.object) || |
848f499d C |
88 | |
89 | isCacheFileObjectValid(activity.object) || | |
90 | sanitizeAndCheckVideoCommentObject(activity.object) || | |
91 | sanitizeAndCheckVideoTorrentObject(activity.object) | |
92 | ) | |
54141398 C |
93 | } |
94 | ||
54141398 | 95 | function checkUpdateActivity (activity: any) { |
848f499d C |
96 | return isBaseActivityValid(activity, 'Update') && |
97 | ( | |
98 | isCacheFileObjectValid(activity.object) || | |
418d092a | 99 | isPlaylistObjectValid(activity.object) || |
848f499d C |
100 | sanitizeAndCheckVideoTorrentObject(activity.object) || |
101 | sanitizeAndCheckActorObject(activity.object) | |
102 | ) | |
54141398 C |
103 | } |
104 | ||
105 | function checkDeleteActivity (activity: any) { | |
848f499d C |
106 | // We don't really check objects |
107 | return isBaseActivityValid(activity, 'Delete') && | |
108 | isObjectValid(activity.object) | |
54141398 C |
109 | } |
110 | ||
111 | function checkFollowActivity (activity: any) { | |
848f499d C |
112 | return isBaseActivityValid(activity, 'Follow') && |
113 | isObjectValid(activity.object) | |
54141398 C |
114 | } |
115 | ||
116 | function checkAcceptActivity (activity: any) { | |
848f499d | 117 | return isBaseActivityValid(activity, 'Accept') |
54141398 C |
118 | } |
119 | ||
4bbc373f | 120 | function checkRejectActivity (activity: any) { |
848f499d | 121 | return isBaseActivityValid(activity, 'Reject') |
4bbc373f C |
122 | } |
123 | ||
54141398 | 124 | function checkAnnounceActivity (activity: any) { |
74d249bc | 125 | return isShareActivityValid(activity) |
54141398 C |
126 | } |
127 | ||
128 | function checkUndoActivity (activity: any) { | |
848f499d C |
129 | return isBaseActivityValid(activity, 'Undo') && |
130 | ( | |
131 | checkFollowActivity(activity.object) || | |
132 | checkLikeActivity(activity.object) || | |
133 | checkDislikeActivity(activity.object) || | |
134 | checkAnnounceActivity(activity.object) || | |
135 | checkCreateActivity(activity.object) | |
136 | ) | |
0032ebe9 | 137 | } |