]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/lib/redundancy.ts
parseQueryStringFilter cleanup
[github/Chocobozzz/PeerTube.git] / server / lib / redundancy.ts
index 16b1226585d76f277a65be40001c3f29ef497fed..361b401a50db342618160af53880dd87fe4f695b 100644 (file)
@@ -1,9 +1,14 @@
 import { VideoRedundancyModel } from '../models/redundancy/video-redundancy'
 import { sendUndoCacheFile } from './activitypub/send'
 import { Transaction } from 'sequelize'
-import { getServerActor } from '../helpers/utils'
+import { MActorSignature, MVideoRedundancyVideo } from '@server/typings/models'
+import { CONFIG } from '@server/initializers/config'
+import { logger } from '@server/helpers/logger'
+import { ActorFollowModel } from '@server/models/activitypub/actor-follow'
+import { Activity } from '@shared/models'
+import { getServerActor } from '@server/models/application/application'
 
-async function removeVideoRedundancy (videoRedundancy: VideoRedundancyModel, t?: Transaction) {
+async function removeVideoRedundancy (videoRedundancy: MVideoRedundancyVideo, t?: Transaction) {
   const serverActor = await getServerActor()
 
   // Local cache, send undo to remote instances
@@ -12,8 +17,38 @@ async function removeVideoRedundancy (videoRedundancy: VideoRedundancyModel, t?:
   await videoRedundancy.destroy({ transaction: t })
 }
 
+async function removeRedundanciesOfServer (serverId: number) {
+  const redundancies = await VideoRedundancyModel.listLocalOfServer(serverId)
+
+  for (const redundancy of redundancies) {
+    await removeVideoRedundancy(redundancy)
+  }
+}
+
+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)
+    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)
+      return false
+    }
+  }
+
+  return true
+}
+
 // ---------------------------------------------------------------------------
 
 export {
+  isRedundancyAccepted,
+  removeRedundanciesOfServer,
   removeVideoRedundancy
 }