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