From fd2291c0047c4aea28667a0b4678dd4dff73be9c Mon Sep 17 00:00:00 2001 From: Felix Ableitner Date: Tue, 18 Aug 2020 15:12:03 +0200 Subject: [PATCH] Dont send out any activities if federation is disabled (fixes #1095) --- server/src/apub/activities.rs | 4 ++++ server/src/apub/mod.rs | 34 +++++++++++++++++++++++++--------- 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/server/src/apub/activities.rs b/server/src/apub/activities.rs index 6b6b17b86..c798dd795 100644 --- a/server/src/apub/activities.rs +++ b/server/src/apub/activities.rs @@ -45,6 +45,10 @@ pub async fn send_activity( actor: &dyn ActorType, to: Vec, ) -> Result<(), LemmyError> { + if !Settings::get().federation.enabled { + return Ok(()); + } + let activity = serde_json::to_string(&activity)?; debug!("Sending activitypub activity {} to {:?}", activity, to); diff --git a/server/src/apub/mod.rs b/server/src/apub/mod.rs index 1af1cc0ca..404bfecbb 100644 --- a/server/src/apub/mod.rs +++ b/server/src/apub/mod.rs @@ -72,6 +72,30 @@ where // Checks if the ID has a valid format, correct scheme, and is in the allowed instance list. fn check_is_apub_id_valid(apub_id: &Url) -> Result<(), LemmyError> { + let settings = Settings::get(); + let domain = apub_id.domain().context(location_info!())?.to_string(); + let local_instance = settings + .hostname + .split(':') + .collect::>() + .first() + .context(location_info!())? + .to_string(); + + if !settings.federation.enabled { + return if domain == local_instance { + Ok(()) + } else { + Err( + anyhow!( + "Trying to connect with {}, but federation is disabled", + domain + ) + .into(), + ) + }; + } + if apub_id.scheme() != get_apub_protocol_string() { return Err(anyhow!("invalid apub id scheme: {:?}", apub_id.scheme()).into()); } @@ -79,18 +103,10 @@ fn check_is_apub_id_valid(apub_id: &Url) -> Result<(), LemmyError> { let mut allowed_instances = Settings::get().get_allowed_instances(); let blocked_instances = Settings::get().get_blocked_instances(); - let domain = apub_id.domain().context(location_info!())?.to_string(); if !allowed_instances.is_empty() { // need to allow this explicitly because apub activities might contain objects from our local // instance. split is needed to remove the port in our federation test setup. - let settings = Settings::get(); - let local_instance = settings.hostname.split(':').collect::>(); - allowed_instances.push( - local_instance - .first() - .context(location_info!())? - .to_string(), - ); + allowed_instances.push(local_instance); if allowed_instances.contains(&domain) { Ok(())