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