]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/helpers/custom-validators/activitypub/activity.ts
Federate video views
[github/Chocobozzz/PeerTube.git] / server / helpers / custom-validators / activitypub / activity.ts
index b5ba0f7af75f03d233c9465d7b5fd2a71e7e1305..66e557d39cbf164641d3f2a05e4c05bcccf86926 100644 (file)
@@ -1,14 +1,17 @@
 import * as validator from 'validator'
+import { Activity, ActivityType } from '../../../../shared/models/activitypub/activity'
 import { isAccountAcceptActivityValid, isAccountDeleteActivityValid, isAccountFollowActivityValid } from './account'
+import { isAnnounceValid } from './announce'
 import { isActivityPubUrlValid } from './misc'
+import { isUndoValid } from './undo'
+import { isVideoChannelCreateActivityValid, isVideoChannelDeleteActivityValid, isVideoChannelUpdateActivityValid } from './video-channels'
 import {
-  isVideoChannelCreateActivityValid,
-  isVideoChannelDeleteActivityValid,
-  isVideoChannelUpdateActivityValid,
+  isVideoFlagValid,
   isVideoTorrentAddActivityValid,
   isVideoTorrentDeleteActivityValid,
   isVideoTorrentUpdateActivityValid
 } from './videos'
+import { isViewActivityValid } from './view'
 
 function isRootActivityValid (activity: any) {
   return Array.isArray(activity['@context']) &&
@@ -23,16 +26,23 @@ function isRootActivityValid (activity: any) {
     )
 }
 
+const activityCheckers: { [ P in ActivityType ]: (activity: Activity) => boolean } = {
+  Create: checkCreateActivity,
+  Add: checkAddActivity,
+  Update: checkUpdateActivity,
+  Delete: checkDeleteActivity,
+  Follow: checkFollowActivity,
+  Accept: checkAcceptActivity,
+  Announce: checkAnnounceActivity,
+  Undo: checkUndoActivity
+}
+
 function isActivityValid (activity: any) {
-  return isVideoTorrentAddActivityValid(activity) ||
-    isVideoChannelCreateActivityValid(activity) ||
-    isVideoTorrentUpdateActivityValid(activity) ||
-    isVideoChannelUpdateActivityValid(activity) ||
-    isVideoTorrentDeleteActivityValid(activity) ||
-    isVideoChannelDeleteActivityValid(activity) ||
-    isAccountDeleteActivityValid(activity) ||
-    isAccountFollowActivityValid(activity) ||
-    isAccountAcceptActivityValid(activity)
+  const checker = activityCheckers[activity.type]
+  // Unknown activity type
+  if (!checker) return false
+
+  return checker(activity)
 }
 
 // ---------------------------------------------------------------------------
@@ -41,3 +51,42 @@ export {
   isRootActivityValid,
   isActivityValid
 }
+
+// ---------------------------------------------------------------------------
+
+function checkCreateActivity (activity: any) {
+  return isVideoChannelCreateActivityValid(activity) ||
+    isVideoFlagValid(activity) ||
+    isViewActivityValid(activity)
+}
+
+function checkAddActivity (activity: any) {
+  return isVideoTorrentAddActivityValid(activity)
+}
+
+function checkUpdateActivity (activity: any) {
+  return isVideoTorrentUpdateActivityValid(activity) ||
+    isVideoChannelUpdateActivityValid(activity)
+}
+
+function checkDeleteActivity (activity: any) {
+  return isVideoTorrentDeleteActivityValid(activity) ||
+    isVideoChannelDeleteActivityValid(activity) ||
+    isAccountDeleteActivityValid(activity)
+}
+
+function checkFollowActivity (activity: any) {
+  return isAccountFollowActivityValid(activity)
+}
+
+function checkAcceptActivity (activity: any) {
+  return isAccountAcceptActivityValid(activity)
+}
+
+function checkAnnounceActivity (activity: any) {
+  return isAnnounceValid(activity)
+}
+
+function checkUndoActivity (activity: any) {
+  return isUndoValid(activity)
+}