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 { isVideoCommentCreateActivityValid } 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)
70 function checkDeleteActivity (activity: any) {
71 return isVideoTorrentDeleteActivityValid(activity) ||
72 isActorDeleteActivityValid(activity)
75 function checkFollowActivity (activity: any) {
76 return isActorFollowActivityValid(activity)
79 function checkAcceptActivity (activity: any) {
80 return isActorAcceptActivityValid(activity)
83 function checkAnnounceActivity (activity: any) {
84 return isAnnounceActivityValid(activity)
87 function checkUndoActivity (activity: any) {
88 return isUndoActivityValid(activity)
91 function checkLikeActivity (activity: any) {
92 return isLikeActivityValid(activity)