1 import * as validator from 'validator'
2 import { Activity, ActivityType } from '../../../../shared/models/activitypub'
3 import { isActorAcceptActivityValid, isActorDeleteActivityValid, isActorFollowActivityValid, isActorUpdateActivityValid } 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 { isVideoCommentCreateActivityValid, isVideoCommentDeleteActivityValid } from './video-comments'
11 isVideoTorrentCreateActivityValid,
12 isVideoTorrentDeleteActivityValid,
13 isVideoTorrentUpdateActivityValid
15 import { isViewActivityValid } from './view'
17 function isRootActivityValid (activity: any) {
18 return Array.isArray(activity['@context']) &&
20 (activity.type === 'Collection' || activity.type === 'OrderedCollection') &&
21 validator.isInt(activity.totalItems, { min: 0 }) &&
22 Array.isArray(activity.items)
25 isActivityPubUrlValid(activity.id) &&
26 isActivityPubUrlValid(activity.actor)
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 Announce: checkAnnounceActivity,
37 Undo: checkUndoActivity,
38 Like: checkLikeActivity
41 function isActivityValid (activity: any) {
42 const checker = activityCheckers[activity.type]
43 // Unknown activity type
44 if (!checker) return false
46 return checker(activity)
49 // ---------------------------------------------------------------------------
56 // ---------------------------------------------------------------------------
58 function checkCreateActivity (activity: any) {
59 return isViewActivityValid(activity) ||
60 isDislikeActivityValid(activity) ||
61 isVideoTorrentCreateActivityValid(activity) ||
62 isVideoFlagValid(activity) ||
63 isVideoCommentCreateActivityValid(activity)
66 function checkUpdateActivity (activity: any) {
67 return isVideoTorrentUpdateActivityValid(activity) ||
68 isActorUpdateActivityValid(activity)
71 function checkDeleteActivity (activity: any) {
72 return isVideoTorrentDeleteActivityValid(activity) ||
73 isActorDeleteActivityValid(activity) ||
74 isVideoCommentDeleteActivityValid(activity)
77 function checkFollowActivity (activity: any) {
78 return isActorFollowActivityValid(activity)
81 function checkAcceptActivity (activity: any) {
82 return isActorAcceptActivityValid(activity)
85 function checkAnnounceActivity (activity: any) {
86 return isAnnounceActivityValid(activity)
89 function checkUndoActivity (activity: any) {
90 return isUndoActivityValid(activity)
93 function checkLikeActivity (activity: any) {
94 return isLikeActivityValid(activity)