]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/helpers/custom-validators/activitypub/activity.ts
Rename downloadingEnabled property to downloadEnabled
[github/Chocobozzz/PeerTube.git] / server / helpers / custom-validators / activitypub / activity.ts
index 08e5ae0aad6b8e0052187aeb4fabe25f95be3433..2562ead9b874549317b3ebc0b758a84ebc0f918e 100644 (file)
@@ -1,20 +1,29 @@
 import * as validator from 'validator'
-import { isAccountAcceptActivityValid, isAccountDeleteActivityValid, isAccountFollowActivityValid } from './account'
+import { Activity, ActivityType } from '../../../../shared/models/activitypub'
+import {
+  isActorAcceptActivityValid,
+  isActorDeleteActivityValid,
+  isActorFollowActivityValid,
+  isActorRejectActivityValid,
+  isActorUpdateActivityValid
+} from './actor'
+import { isAnnounceActivityValid } from './announce'
 import { isActivityPubUrlValid } from './misc'
+import { isDislikeActivityValid, isLikeActivityValid } from './rate'
+import { isUndoActivityValid } from './undo'
+import { isVideoCommentCreateActivityValid, isVideoCommentDeleteActivityValid } from './video-comments'
 import {
-  isVideoAnnounceValid,
-  isVideoChannelAnnounceValid,
-  isVideoChannelCreateActivityValid,
-  isVideoChannelDeleteActivityValid,
-  isVideoChannelUpdateActivityValid,
   isVideoFlagValid,
-  isVideoTorrentAddActivityValid,
   isVideoTorrentDeleteActivityValid,
-  isVideoTorrentUpdateActivityValid
+  sanitizeAndCheckVideoTorrentCreateActivity,
+  sanitizeAndCheckVideoTorrentUpdateActivity
 } from './videos'
+import { isViewActivityValid } from './view'
+import { exists } from '../misc'
+import { isCacheFileCreateActivityValid, isCacheFileUpdateActivityValid } from './cache-file'
 
 function isRootActivityValid (activity: any) {
-  return Array.isArray(activity['@context']) &&
+  return Array.isArray(activity['@context']) && (
     (
       (activity.type === 'Collection' || activity.type === 'OrderedCollection') &&
       validator.isInt(activity.totalItems, { min: 0 }) &&
@@ -22,23 +31,30 @@ function isRootActivityValid (activity: any) {
     ) ||
     (
       isActivityPubUrlValid(activity.id) &&
-      isActivityPubUrlValid(activity.actor)
+      exists(activity.actor) &&
+      (isActivityPubUrlValid(activity.actor) || isActivityPubUrlValid(activity.actor.id))
     )
+  )
+}
+
+const activityCheckers: { [ P in ActivityType ]: (activity: Activity) => boolean } = {
+  Create: checkCreateActivity,
+  Update: checkUpdateActivity,
+  Delete: checkDeleteActivity,
+  Follow: checkFollowActivity,
+  Accept: checkAcceptActivity,
+  Reject: checkRejectActivity,
+  Announce: checkAnnounceActivity,
+  Undo: checkUndoActivity,
+  Like: checkLikeActivity
 }
 
 function isActivityValid (activity: any) {
-  return isVideoTorrentAddActivityValid(activity) ||
-    isVideoChannelCreateActivityValid(activity) ||
-    isVideoTorrentUpdateActivityValid(activity) ||
-    isVideoChannelUpdateActivityValid(activity) ||
-    isVideoTorrentDeleteActivityValid(activity) ||
-    isVideoChannelDeleteActivityValid(activity) ||
-    isAccountDeleteActivityValid(activity) ||
-    isAccountFollowActivityValid(activity) ||
-    isAccountAcceptActivityValid(activity) ||
-    isVideoFlagValid(activity) ||
-    isVideoAnnounceValid(activity) ||
-    isVideoChannelAnnounceValid(activity)
+  const checker = activityCheckers[activity.type]
+  // Unknown activity type
+  if (!checker) return false
+
+  return checker(activity)
 }
 
 // ---------------------------------------------------------------------------
@@ -47,3 +63,50 @@ export {
   isRootActivityValid,
   isActivityValid
 }
+
+// ---------------------------------------------------------------------------
+
+function checkCreateActivity (activity: any) {
+  return isViewActivityValid(activity) ||
+    isDislikeActivityValid(activity) ||
+    sanitizeAndCheckVideoTorrentCreateActivity(activity) ||
+    isVideoFlagValid(activity) ||
+    isVideoCommentCreateActivityValid(activity) ||
+    isCacheFileCreateActivityValid(activity)
+}
+
+function checkUpdateActivity (activity: any) {
+  return isCacheFileUpdateActivityValid(activity) ||
+    sanitizeAndCheckVideoTorrentUpdateActivity(activity) ||
+    isActorUpdateActivityValid(activity)
+}
+
+function checkDeleteActivity (activity: any) {
+  return isVideoTorrentDeleteActivityValid(activity) ||
+    isActorDeleteActivityValid(activity) ||
+    isVideoCommentDeleteActivityValid(activity)
+}
+
+function checkFollowActivity (activity: any) {
+  return isActorFollowActivityValid(activity)
+}
+
+function checkAcceptActivity (activity: any) {
+  return isActorAcceptActivityValid(activity)
+}
+
+function checkRejectActivity (activity: any) {
+  return isActorRejectActivityValid(activity)
+}
+
+function checkAnnounceActivity (activity: any) {
+  return isAnnounceActivityValid(activity)
+}
+
+function checkUndoActivity (activity: any) {
+  return isUndoActivityValid(activity)
+}
+
+function checkLikeActivity (activity: any) {
+  return isLikeActivityValid(activity)
+}