]> 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 dd671c4cff6fcde1aefe767be4d42ee8b14cd41b..632f1422317c19ccc6c0aecb758e0a29cb037755 100644 (file)
@@ -1,10 +1,21 @@
 import * as validator from 'validator'
+import { Activity, ActivityType } from '../../../../shared/models/activitypub'
 import {
-  isVideoChannelCreateActivityValid,
-  isVideoTorrentAddActivityValid,
-  isVideoTorrentUpdateActivityValid,
-  isVideoChannelUpdateActivityValid
+  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 {
+  isVideoFlagValid,
+  isVideoTorrentCreateActivityValid,
+  isVideoTorrentDeleteActivityValid,
+  isVideoTorrentUpdateActivityValid
 } from './videos'
+import { isViewActivityValid } from './view'
 
 function isRootActivityValid (activity: any) {
   return Array.isArray(activity['@context']) &&
@@ -14,16 +25,29 @@ function isRootActivityValid (activity: any) {
       Array.isArray(activity.items)
     ) ||
     (
-      validator.isURL(activity.id) &&
-      validator.isURL(activity.actor)
+      isActivityPubUrlValid(activity.id) &&
+      isActivityPubUrlValid(activity.actor)
     )
 }
 
+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)
+  const checker = activityCheckers[activity.type]
+  // Unknown activity type
+  if (!checker) return false
+
+  return checker(activity)
 }
 
 // ---------------------------------------------------------------------------
@@ -32,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)
+}