1 import * as validator from 'validator'
2 import { Activity, ActivityType } from '../../../../shared/models/activitypub'
4 isActorAcceptActivityValid,
5 isActorDeleteActivityValid,
6 isActorFollowActivityValid,
7 isActorRejectActivityValid,
8 isActorUpdateActivityValid
10 import { isAnnounceActivityValid } from './announce'
11 import { isActivityPubUrlValid } from './misc'
12 import { isDislikeActivityValid, isLikeActivityValid } from './rate'
13 import { isUndoActivityValid } from './undo'
14 import { isVideoCommentCreateActivityValid, isVideoCommentDeleteActivityValid } from './video-comments'
17 isVideoTorrentDeleteActivityValid,
18 sanitizeAndCheckVideoTorrentCreateActivity,
19 sanitizeAndCheckVideoTorrentUpdateActivity
21 import { isViewActivityValid } from './view'
22 import { exists } from '../misc'
23 import { isCacheFileCreateActivityValid, isCacheFileUpdateActivityValid } from './cache-file'
25 function isRootActivityValid (activity: any) {
26 return Array.isArray(activity['@context']) && (
28 (activity.type === 'Collection' || activity.type === 'OrderedCollection') &&
29 validator.isInt(activity.totalItems, { min: 0 }) &&
30 Array.isArray(activity.items)
33 isActivityPubUrlValid(activity.id) &&
34 exists(activity.actor) &&
35 (isActivityPubUrlValid(activity.actor) || isActivityPubUrlValid(activity.actor.id))
40 const activityCheckers: { [ P in ActivityType ]: (activity: Activity) => boolean } = {
41 Create: checkCreateActivity,
42 Update: checkUpdateActivity,
43 Delete: checkDeleteActivity,
44 Follow: checkFollowActivity,
45 Accept: checkAcceptActivity,
46 Reject: checkRejectActivity,
47 Announce: checkAnnounceActivity,
48 Undo: checkUndoActivity,
49 Like: checkLikeActivity
52 function isActivityValid (activity: any) {
53 const checker = activityCheckers[activity.type]
54 // Unknown activity type
55 if (!checker) return false
57 return checker(activity)
60 // ---------------------------------------------------------------------------
67 // ---------------------------------------------------------------------------
69 function checkCreateActivity (activity: any) {
70 return isViewActivityValid(activity) ||
71 isDislikeActivityValid(activity) ||
72 sanitizeAndCheckVideoTorrentCreateActivity(activity) ||
73 isVideoFlagValid(activity) ||
74 isVideoCommentCreateActivityValid(activity) ||
75 isCacheFileCreateActivityValid(activity)
78 function checkUpdateActivity (activity: any) {
79 return isCacheFileUpdateActivityValid(activity) ||
80 sanitizeAndCheckVideoTorrentUpdateActivity(activity) ||
81 isActorUpdateActivityValid(activity)
84 function checkDeleteActivity (activity: any) {
85 return isVideoTorrentDeleteActivityValid(activity) ||
86 isActorDeleteActivityValid(activity) ||
87 isVideoCommentDeleteActivityValid(activity)
90 function checkFollowActivity (activity: any) {
91 return isActorFollowActivityValid(activity)
94 function checkAcceptActivity (activity: any) {
95 return isActorAcceptActivityValid(activity)
98 function checkRejectActivity (activity: any) {
99 return isActorRejectActivityValid(activity)
102 function checkAnnounceActivity (activity: any) {
103 return isAnnounceActivityValid(activity)
106 function checkUndoActivity (activity: any) {
107 return isUndoActivityValid(activity)
110 function checkLikeActivity (activity: any) {
111 return isLikeActivityValid(activity)