X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Flib%2Fredundancy.ts;h=2613d01be1ffa19826a2649febb1f04697d057d5;hb=bd911b54b555b11df7e9849cf92d358bccfecf6e;hp=1b4ecd7c04875d6abc3e98475a3fc14a257fc373;hpb=5c5e587307a27e173333789b5b5167d35f468b01;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/lib/redundancy.ts b/server/lib/redundancy.ts index 1b4ecd7c0..2613d01be 100644 --- a/server/lib/redundancy.ts +++ b/server/lib/redundancy.ts @@ -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() @@ -13,17 +19,41 @@ async function removeVideoRedundancy (videoRedundancy: MVideoRedundancyVideo, t? await videoRedundancy.destroy({ transaction: t }) } -async function removeRedundancyOf (serverId: number) { - const videosRedundancy = await VideoRedundancyModel.listLocalOfServer(serverId) +async function removeRedundanciesOfServer (serverId: number) { + const redundancies = await VideoRedundancyModel.listLocalOfServer(serverId) - for (const redundancy of videosRedundancy) { + 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, 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 { - removeRedundancyOf, + isRedundancyAccepted, + removeRedundanciesOfServer, removeVideoRedundancy }