diff options
author | Chocobozzz <me@florianbigard.com> | 2020-04-07 15:27:41 +0200 |
---|---|---|
committer | Chocobozzz <me@florianbigard.com> | 2020-04-07 15:32:20 +0200 |
commit | 8c9e7875269a990ed3000e1d4995d808e4ff50f7 (patch) | |
tree | 896f60aedf0fac0dc64b57ff76a63e7a718c0a5b /server/lib | |
parent | bc30363602ad504d784662a9373c0a114d05042c (diff) | |
download | PeerTube-8c9e7875269a990ed3000e1d4995d808e4ff50f7.tar.gz PeerTube-8c9e7875269a990ed3000e1d4995d808e4ff50f7.tar.zst PeerTube-8c9e7875269a990ed3000e1d4995d808e4ff50f7.zip |
Add ability to accept or not remote redundancies
Diffstat (limited to 'server/lib')
-rw-r--r-- | server/lib/activitypub/process/process-create.ts | 3 | ||||
-rw-r--r-- | server/lib/activitypub/process/process-update.ts | 3 | ||||
-rw-r--r-- | server/lib/redundancy.ts | 27 |
3 files changed, 32 insertions, 1 deletions
diff --git a/server/lib/activitypub/process/process-create.ts b/server/lib/activitypub/process/process-create.ts index bee853721..d375e29e3 100644 --- a/server/lib/activitypub/process/process-create.ts +++ b/server/lib/activitypub/process/process-create.ts | |||
@@ -12,6 +12,7 @@ import { PlaylistObject } from '../../../../shared/models/activitypub/objects/pl | |||
12 | import { createOrUpdateVideoPlaylist } from '../playlist' | 12 | import { createOrUpdateVideoPlaylist } from '../playlist' |
13 | import { APProcessorOptions } from '../../../typings/activitypub-processor.model' | 13 | import { APProcessorOptions } from '../../../typings/activitypub-processor.model' |
14 | import { MActorSignature, MCommentOwnerVideo, MVideoAccountLightBlacklistAllFiles } from '../../../typings/models' | 14 | import { MActorSignature, MCommentOwnerVideo, MVideoAccountLightBlacklistAllFiles } from '../../../typings/models' |
15 | import { isRedundancyAccepted } from '@server/lib/redundancy' | ||
15 | 16 | ||
16 | async function processCreateActivity (options: APProcessorOptions<ActivityCreate>) { | 17 | async function processCreateActivity (options: APProcessorOptions<ActivityCreate>) { |
17 | const { activity, byActor } = options | 18 | const { activity, byActor } = options |
@@ -60,6 +61,8 @@ async function processCreateVideo (activity: ActivityCreate, notify: boolean) { | |||
60 | } | 61 | } |
61 | 62 | ||
62 | async function processCreateCacheFile (activity: ActivityCreate, byActor: MActorSignature) { | 63 | async function processCreateCacheFile (activity: ActivityCreate, byActor: MActorSignature) { |
64 | if (await isRedundancyAccepted(activity, byActor) !== true) return | ||
65 | |||
63 | const cacheFile = activity.object as CacheFileObject | 66 | const cacheFile = activity.object as CacheFileObject |
64 | 67 | ||
65 | const { video } = await getOrCreateVideoAndAccountAndChannel({ videoObject: cacheFile.object }) | 68 | const { video } = await getOrCreateVideoAndAccountAndChannel({ videoObject: cacheFile.object }) |
diff --git a/server/lib/activitypub/process/process-update.ts b/server/lib/activitypub/process/process-update.ts index a47d605d8..9579512b7 100644 --- a/server/lib/activitypub/process/process-update.ts +++ b/server/lib/activitypub/process/process-update.ts | |||
@@ -16,6 +16,7 @@ import { PlaylistObject } from '../../../../shared/models/activitypub/objects/pl | |||
16 | import { createOrUpdateVideoPlaylist } from '../playlist' | 16 | import { createOrUpdateVideoPlaylist } from '../playlist' |
17 | import { APProcessorOptions } from '../../../typings/activitypub-processor.model' | 17 | import { APProcessorOptions } from '../../../typings/activitypub-processor.model' |
18 | import { MActorSignature, MAccountIdActor } from '../../../typings/models' | 18 | import { MActorSignature, MAccountIdActor } from '../../../typings/models' |
19 | import { isRedundancyAccepted } from '@server/lib/redundancy' | ||
19 | 20 | ||
20 | async function processUpdateActivity (options: APProcessorOptions<ActivityUpdate>) { | 21 | async function processUpdateActivity (options: APProcessorOptions<ActivityUpdate>) { |
21 | const { activity, byActor } = options | 22 | const { activity, byActor } = options |
@@ -78,6 +79,8 @@ async function processUpdateVideo (actor: MActorSignature, activity: ActivityUpd | |||
78 | } | 79 | } |
79 | 80 | ||
80 | async function processUpdateCacheFile (byActor: MActorSignature, activity: ActivityUpdate) { | 81 | async function processUpdateCacheFile (byActor: MActorSignature, activity: ActivityUpdate) { |
82 | if (await isRedundancyAccepted(activity, byActor) !== true) return | ||
83 | |||
81 | const cacheFileObject = activity.object as CacheFileObject | 84 | const cacheFileObject = activity.object as CacheFileObject |
82 | 85 | ||
83 | if (!isCacheFileObjectValid(cacheFileObject)) { | 86 | if (!isCacheFileObjectValid(cacheFileObject)) { |
diff --git a/server/lib/redundancy.ts b/server/lib/redundancy.ts index 78d84e02e..aa0e37478 100644 --- a/server/lib/redundancy.ts +++ b/server/lib/redundancy.ts | |||
@@ -2,7 +2,11 @@ import { VideoRedundancyModel } from '../models/redundancy/video-redundancy' | |||
2 | import { sendUndoCacheFile } from './activitypub/send' | 2 | import { sendUndoCacheFile } from './activitypub/send' |
3 | import { Transaction } from 'sequelize' | 3 | import { Transaction } from 'sequelize' |
4 | import { getServerActor } from '../helpers/utils' | 4 | import { getServerActor } from '../helpers/utils' |
5 | import { MVideoRedundancyVideo } from '@server/typings/models' | 5 | import { MActorSignature, MVideoRedundancyVideo } from '@server/typings/models' |
6 | import { CONFIG } from '@server/initializers/config' | ||
7 | import { logger } from '@server/helpers/logger' | ||
8 | import { ActorFollowModel } from '@server/models/activitypub/actor-follow' | ||
9 | import { Activity } from '@shared/models' | ||
6 | 10 | ||
7 | async function removeVideoRedundancy (videoRedundancy: MVideoRedundancyVideo, t?: Transaction) { | 11 | async function removeVideoRedundancy (videoRedundancy: MVideoRedundancyVideo, t?: Transaction) { |
8 | const serverActor = await getServerActor() | 12 | const serverActor = await getServerActor() |
@@ -21,9 +25,30 @@ async function removeRedundanciesOfServer (serverId: number) { | |||
21 | } | 25 | } |
22 | } | 26 | } |
23 | 27 | ||
28 | async function isRedundancyAccepted (activity: Activity, byActor: MActorSignature) { | ||
29 | const configAcceptFrom = CONFIG.REMOTE_REDUNDANCY.VIDEOS.ACCEPT_FROM | ||
30 | if (configAcceptFrom === 'nobody') { | ||
31 | logger.info('Do not accept remote redundancy %s due instance accept policy.', activity.id) | ||
32 | return false | ||
33 | } | ||
34 | |||
35 | if (configAcceptFrom === 'followings') { | ||
36 | const serverActor = await getServerActor() | ||
37 | const allowed = await ActorFollowModel.isFollowedBy(byActor.id, serverActor.id) | ||
38 | |||
39 | if (allowed !== true) { | ||
40 | logger.info('Do not accept remote redundancy %s because actor %s is not followed by our instance.', activity.id, byActor.url) | ||
41 | return false | ||
42 | } | ||
43 | } | ||
44 | |||
45 | return true | ||
46 | } | ||
47 | |||
24 | // --------------------------------------------------------------------------- | 48 | // --------------------------------------------------------------------------- |
25 | 49 | ||
26 | export { | 50 | export { |
51 | isRedundancyAccepted, | ||
27 | removeRedundanciesOfServer, | 52 | removeRedundanciesOfServer, |
28 | removeVideoRedundancy | 53 | removeVideoRedundancy |
29 | } | 54 | } |