use crate::{
activities::receive::verify_activity_domains_valid,
inbox::{
+ assert_activity_not_local,
get_activity_id,
get_activity_to_and_cc,
inbox_verify_http_signature,
return Err(anyhow!("Activity delivered to wrong community").into());
}
+ assert_activity_not_local(&activity)?;
insert_activity(&activity_id, activity.clone(), false, true, context.pool()).await?;
info!(
use anyhow::{anyhow, Context};
use lemmy_db::{activity::Activity, community::Community, user::User_, DbPool};
use lemmy_structs::blocking;
-use lemmy_utils::{location_info, LemmyError};
+use lemmy_utils::{location_info, settings::Settings, LemmyError};
use lemmy_websocket::LemmyContext;
use serde::{export::fmt::Debug, Serialize};
use url::Url;
}
Ok(None)
}
+
+pub(in crate::inbox) fn assert_activity_not_local<T, Kind>(activity: &T) -> Result<(), LemmyError>
+where
+ T: BaseExt<Kind> + Debug,
+{
+ let id = activity.id_unchecked().context(location_info!())?;
+ let activity_domain = id.domain().context(location_info!())?;
+
+ if activity_domain == Settings::get().hostname {
+ return Err(
+ anyhow!(
+ "Error: received activity which was sent by local instance: {:?}",
+ activity
+ )
+ .into(),
+ );
+ }
+ Ok(())
+}
use crate::{
inbox::{
+ assert_activity_not_local,
community_inbox::{community_receive_message, CommunityAcceptedActivities},
get_activity_id,
get_activity_to_and_cc,
return Ok(HttpResponse::Ok().finish());
}
+ assert_activity_not_local(&activity)?;
// Log the activity, so we avoid receiving and parsing it twice. Note that this could still happen
// if we receive the same activity twice in very quick succession.
insert_activity(&activity_id, activity.clone(), false, true, context.pool()).await?;
check_is_apub_id_valid,
fetcher::get_or_fetch_and_upsert_community,
inbox::{
+ assert_activity_not_local,
get_activity_id,
get_activity_to_and_cc,
inbox_verify_http_signature,
return Err(anyhow!("Activity delivered to wrong user").into());
}
+ assert_activity_not_local(&activity)?;
insert_activity(&activity_id, activity.clone(), false, true, context.pool()).await?;
debug!(