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