1 import * as validator from 'validator'
2 import { Activity, ActivityType } from '../../../../shared/models/activitypub'
3 import { isActorAcceptActivityValid, isActorDeleteActivityValid, isActorFollowActivityValid } from './actor'
4 import { isAnnounceActivityValid } from './announce'
5 import { isActivityPubUrlValid } from './misc'
6 import { isDislikeActivityValid, isLikeActivityValid } from './rate'
7 import { isUndoActivityValid } from './undo'
8 import { isVideoChannelDeleteActivityValid, isVideoChannelUpdateActivityValid } from './video-channels'
9 import { isVideoCommentCreateActivityValid } from './video-comments'
12 isVideoTorrentCreateActivityValid,
13 isVideoTorrentDeleteActivityValid,
14 isVideoTorrentUpdateActivityValid
16 import { isViewActivityValid } from './view'
18 function isRootActivityValid (activity: any) {
19 return Array.isArray(activity['@context']) &&
21 (activity.type === 'Collection' || activity.type === 'OrderedCollection') &&
22 validator.isInt(activity.totalItems, { min: 0 }) &&
23 Array.isArray(activity.items)
26 isActivityPubUrlValid(activity.id) &&
27 isActivityPubUrlValid(activity.actor)
31 const activityCheckers: { [ P in ActivityType ]: (activity: Activity) => boolean } = {
32 Create: checkCreateActivity,
33 Update: checkUpdateActivity,
34 Delete: checkDeleteActivity,
35 Follow: checkFollowActivity,
36 Accept: checkAcceptActivity,
37 Announce: checkAnnounceActivity,
38 Undo: checkUndoActivity,
39 Like: checkLikeActivity
42 function isActivityValid (activity: any) {
43 const checker = activityCheckers[activity.type]
44 // Unknown activity type
45 if (!checker) return false
47 return checker(activity)
50 // ---------------------------------------------------------------------------
57 // ---------------------------------------------------------------------------
59 function checkCreateActivity (activity: any) {
60 return isViewActivityValid(activity) ||
61 isDislikeActivityValid(activity) ||
62 isVideoTorrentCreateActivityValid(activity) ||
63 isVideoFlagValid(activity) ||
64 isVideoCommentCreateActivityValid(activity)
67 function checkUpdateActivity (activity: any) {
68 return isVideoTorrentUpdateActivityValid(activity) ||
69 isVideoChannelUpdateActivityValid(activity)
72 function checkDeleteActivity (activity: any) {
73 return isVideoTorrentDeleteActivityValid(activity) ||
74 isVideoChannelDeleteActivityValid(activity) ||
75 isActorDeleteActivityValid(activity)
78 function checkFollowActivity (activity: any) {
79 return isActorFollowActivityValid(activity)
82 function checkAcceptActivity (activity: any) {
83 return isActorAcceptActivityValid(activity)
86 function checkAnnounceActivity (activity: any) {
87 return isAnnounceActivityValid(activity)
90 function checkUndoActivity (activity: any) {
91 return isUndoActivityValid(activity)
94 function checkLikeActivity (activity: any) {
95 return isLikeActivityValid(activity)