1 import * as validator from 'validator'
2 import { Activity, ActivityType } from '../../../../shared/models/activitypub/activity'
3 import { isAccountAcceptActivityValid, isAccountDeleteActivityValid, isAccountFollowActivityValid } from './account'
4 import { isAnnounceActivityValid } from './announce'
5 import { isActivityPubUrlValid } from './misc'
6 import { isUndoActivityValid } from './undo'
7 import { isVideoChannelCreateActivityValid, isVideoChannelDeleteActivityValid, isVideoChannelUpdateActivityValid } from './video-channels'
10 isVideoTorrentAddActivityValid,
11 isVideoTorrentDeleteActivityValid,
12 isVideoTorrentUpdateActivityValid
14 import { isViewActivityValid } from './view'
15 import { isDislikeActivityValid, isLikeActivityValid } from './rate'
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 Add: checkAddActivity,
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 isVideoChannelCreateActivityValid(activity) ||
63 isVideoFlagValid(activity)
66 function checkAddActivity (activity: any) {
67 return isVideoTorrentAddActivityValid(activity)
70 function checkUpdateActivity (activity: any) {
71 return isVideoTorrentUpdateActivityValid(activity) ||
72 isVideoChannelUpdateActivityValid(activity)
75 function checkDeleteActivity (activity: any) {
76 return isVideoTorrentDeleteActivityValid(activity) ||
77 isVideoChannelDeleteActivityValid(activity) ||
78 isAccountDeleteActivityValid(activity)
81 function checkFollowActivity (activity: any) {
82 return isAccountFollowActivityValid(activity)
85 function checkAcceptActivity (activity: any) {
86 return isAccountAcceptActivityValid(activity)
89 function checkAnnounceActivity (activity: any) {
90 return isAnnounceActivityValid(activity)
93 function checkUndoActivity (activity: any) {
94 return isUndoActivityValid(activity)
97 function checkLikeActivity (activity: any) {
98 return isLikeActivityValid(activity)