]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/lib/redundancy.ts
Add test on AP hooks
[github/Chocobozzz/PeerTube.git] / server / lib / redundancy.ts
index 78d84e02e97d7d8648ff8f4bed3eac99ea7fc5ed..2613d01be1ffa19826a2649febb1f04697d057d5 100644 (file)
@@ -1,8 +1,14 @@
+import { Transaction } from 'sequelize'
+import { logger, loggerTagsFactory } from '@server/helpers/logger'
+import { CONFIG } from '@server/initializers/config'
+import { ActorFollowModel } from '@server/models/actor/actor-follow'
+import { getServerActor } from '@server/models/application/application'
+import { MActorSignature, MVideoRedundancyVideo } from '@server/types/models'
+import { Activity } from '@shared/models'
 import { VideoRedundancyModel } from '../models/redundancy/video-redundancy'
 import { sendUndoCacheFile } from './activitypub/send'
-import { Transaction } from 'sequelize'
-import { getServerActor } from '../helpers/utils'
-import { MVideoRedundancyVideo } from '@server/typings/models'
+
+const lTags = loggerTagsFactory('redundancy')
 
 async function removeVideoRedundancy (videoRedundancy: MVideoRedundancyVideo, t?: Transaction) {
   const serverActor = await getServerActor()
@@ -21,9 +27,33 @@ async function removeRedundanciesOfServer (serverId: number) {
   }
 }
 
+async function isRedundancyAccepted (activity: Activity, byActor: MActorSignature) {
+  const configAcceptFrom = CONFIG.REMOTE_REDUNDANCY.VIDEOS.ACCEPT_FROM
+  if (configAcceptFrom === 'nobody') {
+    logger.info('Do not accept remote redundancy %s due instance accept policy.', activity.id, lTags())
+    return false
+  }
+
+  if (configAcceptFrom === 'followings') {
+    const serverActor = await getServerActor()
+    const allowed = await ActorFollowModel.isFollowedBy(byActor.id, serverActor.id)
+
+    if (allowed !== true) {
+      logger.info(
+        'Do not accept remote redundancy %s because actor %s is not followed by our instance.',
+        activity.id, byActor.url, lTags()
+      )
+      return false
+    }
+  }
+
+  return true
+}
+
 // ---------------------------------------------------------------------------
 
 export {
+  isRedundancyAccepted,
   removeRedundanciesOfServer,
   removeVideoRedundancy
 }