]>
Commit | Line | Data |
---|---|---|
0d0e8dd0 | 1 | import * as validator from 'validator' |
3fd3ab2d | 2 | import { Activity, ActivityType } from '../../../../shared/models/activitypub' |
4bbc373f | 3 | import { |
c48e82b5 C |
4 | isActorAcceptActivityValid, |
5 | isActorDeleteActivityValid, | |
6 | isActorFollowActivityValid, | |
7 | isActorRejectActivityValid, | |
4bbc373f C |
8 | isActorUpdateActivityValid |
9 | } from './actor' | |
0032ebe9 | 10 | import { isAnnounceActivityValid } from './announce' |
350e31d6 | 11 | import { isActivityPubUrlValid } from './misc' |
3fd3ab2d | 12 | import { isDislikeActivityValid, isLikeActivityValid } from './rate' |
0032ebe9 | 13 | import { isUndoActivityValid } from './undo' |
4cb6d457 | 14 | import { isVideoCommentCreateActivityValid, isVideoCommentDeleteActivityValid } from './video-comments' |
0d0e8dd0 | 15 | import { |
d8465018 | 16 | isVideoFlagValid, |
350e31d6 | 17 | isVideoTorrentDeleteActivityValid, |
c48e82b5 | 18 | sanitizeAndCheckVideoTorrentCreateActivity, |
1d6e5dfc | 19 | sanitizeAndCheckVideoTorrentUpdateActivity |
0d0e8dd0 | 20 | } from './videos' |
40ff5707 | 21 | import { isViewActivityValid } from './view' |
bcec136e | 22 | import { exists } from '../misc' |
c48e82b5 | 23 | import { isCacheFileCreateActivityValid, isCacheFileUpdateActivityValid } from './cache-file' |
0d0e8dd0 C |
24 | |
25 | function isRootActivityValid (activity: any) { | |
f6a7c82c | 26 | return Array.isArray(activity['@context']) && ( |
0d0e8dd0 C |
27 | ( |
28 | (activity.type === 'Collection' || activity.type === 'OrderedCollection') && | |
29 | validator.isInt(activity.totalItems, { min: 0 }) && | |
30 | Array.isArray(activity.items) | |
31 | ) || | |
32 | ( | |
350e31d6 | 33 | isActivityPubUrlValid(activity.id) && |
bcec136e | 34 | exists(activity.actor) && |
6be84cbc | 35 | (isActivityPubUrlValid(activity.actor) || isActivityPubUrlValid(activity.actor.id)) |
0d0e8dd0 | 36 | ) |
f6a7c82c | 37 | ) |
0d0e8dd0 C |
38 | } |
39 | ||
54141398 C |
40 | const activityCheckers: { [ P in ActivityType ]: (activity: Activity) => boolean } = { |
41 | Create: checkCreateActivity, | |
54141398 C |
42 | Update: checkUpdateActivity, |
43 | Delete: checkDeleteActivity, | |
44 | Follow: checkFollowActivity, | |
45 | Accept: checkAcceptActivity, | |
4bbc373f | 46 | Reject: checkRejectActivity, |
54141398 | 47 | Announce: checkAnnounceActivity, |
0032ebe9 C |
48 | Undo: checkUndoActivity, |
49 | Like: checkLikeActivity | |
54141398 C |
50 | } |
51 | ||
0d0e8dd0 | 52 | function isActivityValid (activity: any) { |
54141398 C |
53 | const checker = activityCheckers[activity.type] |
54 | // Unknown activity type | |
55 | if (!checker) return false | |
56 | ||
57 | return checker(activity) | |
0d0e8dd0 C |
58 | } |
59 | ||
60 | // --------------------------------------------------------------------------- | |
61 | ||
62 | export { | |
63 | isRootActivityValid, | |
64 | isActivityValid | |
65 | } | |
54141398 C |
66 | |
67 | // --------------------------------------------------------------------------- | |
68 | ||
69 | function checkCreateActivity (activity: any) { | |
0032ebe9 C |
70 | return isViewActivityValid(activity) || |
71 | isDislikeActivityValid(activity) || | |
1d6e5dfc | 72 | sanitizeAndCheckVideoTorrentCreateActivity(activity) || |
6d852470 | 73 | isVideoFlagValid(activity) || |
c48e82b5 C |
74 | isVideoCommentCreateActivityValid(activity) || |
75 | isCacheFileCreateActivityValid(activity) | |
54141398 C |
76 | } |
77 | ||
54141398 | 78 | function checkUpdateActivity (activity: any) { |
c48e82b5 C |
79 | return isCacheFileUpdateActivityValid(activity) || |
80 | sanitizeAndCheckVideoTorrentUpdateActivity(activity) || | |
265ba139 | 81 | isActorUpdateActivityValid(activity) |
54141398 C |
82 | } |
83 | ||
84 | function checkDeleteActivity (activity: any) { | |
85 | return isVideoTorrentDeleteActivityValid(activity) || | |
4cb6d457 C |
86 | isActorDeleteActivityValid(activity) || |
87 | isVideoCommentDeleteActivityValid(activity) | |
54141398 C |
88 | } |
89 | ||
90 | function checkFollowActivity (activity: any) { | |
50d6de9c | 91 | return isActorFollowActivityValid(activity) |
54141398 C |
92 | } |
93 | ||
94 | function checkAcceptActivity (activity: any) { | |
50d6de9c | 95 | return isActorAcceptActivityValid(activity) |
54141398 C |
96 | } |
97 | ||
4bbc373f C |
98 | function checkRejectActivity (activity: any) { |
99 | return isActorRejectActivityValid(activity) | |
100 | } | |
101 | ||
54141398 | 102 | function checkAnnounceActivity (activity: any) { |
0032ebe9 | 103 | return isAnnounceActivityValid(activity) |
54141398 C |
104 | } |
105 | ||
106 | function checkUndoActivity (activity: any) { | |
0032ebe9 C |
107 | return isUndoActivityValid(activity) |
108 | } | |
109 | ||
110 | function checkLikeActivity (activity: any) { | |
111 | return isLikeActivityValid(activity) | |
54141398 | 112 | } |