]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/helpers/custom-validators/activitypub/activity.ts
Add links to comment mentions
[github/Chocobozzz/PeerTube.git] / server / helpers / custom-validators / activitypub / activity.ts
index b5ba0f7af75f03d233c9465d7b5fd2a71e7e1305..632f1422317c19ccc6c0aecb758e0a29cb037755 100644 (file)
@@ -1,14 +1,21 @@
 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 {
-  isVideoChannelCreateActivityValid,
-  isVideoChannelDeleteActivityValid,
-  isVideoChannelUpdateActivityValid,
-  isVideoTorrentAddActivityValid,
+  isVideoFlagValid,
+  isVideoTorrentCreateActivityValid,
   isVideoTorrentDeleteActivityValid,
   isVideoTorrentUpdateActivityValid
 } from './videos'
+import { isViewActivityValid } from './view'
 
 function isRootActivityValid (activity: any) {
   return Array.isArray(activity['@context']) &&
@@ -23,16 +30,24 @@ function isRootActivityValid (activity: any) {
     )
 }
 
+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)
+  const checker = activityCheckers[activity.type]
+  // Unknown activity type
+  if (!checker) return false
+
+  return checker(activity)
 }
 
 // ---------------------------------------------------------------------------
@@ -41,3 +56,48 @@ export {
   isRootActivityValid,
   isActivityValid
 }
+
+// ---------------------------------------------------------------------------
+
+function checkCreateActivity (activity: any) {
+  return isViewActivityValid(activity) ||
+    isDislikeActivityValid(activity) ||
+    isVideoTorrentCreateActivityValid(activity) ||
+    isVideoFlagValid(activity) ||
+    isVideoCommentCreateActivityValid(activity)
+}
+
+function checkUpdateActivity (activity: any) {
+  return isVideoTorrentUpdateActivityValid(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)
+}