diff --git a/crates/apub/src/http/community.rs b/crates/apub/src/http/community.rs index 38b2158df..cd75031dc 100644 --- a/crates/apub/src/http/community.rs +++ b/crates/apub/src/http/community.rs @@ -1,6 +1,7 @@ use crate::{ activities::{ - community::announce::AnnouncableActivities, + community::announce::{AnnouncableActivities, AnnounceActivity}, + extract_community, following::{follow::FollowCommunity, undo::UndoFollowCommunity}, }, extensions::context::lemmy_context, @@ -76,15 +77,23 @@ pub async fn community_inbox( trace!("Received community inbox activity {}", unparsed); let activity = serde_json::from_str::(&unparsed)?; - receive_group_inbox(activity.clone(), request, context).await + receive_group_inbox(activity.clone(), request, &context).await?; + + if let GroupInboxActivities::AnnouncableActivities(announcable) = activity { + let community = extract_community(&announcable.cc(), &context, &mut 0).await?; + if community.local { + AnnounceActivity::send(announcable, &community, vec![], &context).await?; + } + } + Ok(HttpResponse::Ok().finish()) } pub(in crate::http) async fn receive_group_inbox( activity: GroupInboxActivities, request: HttpRequest, - context: web::Data, + context: &LemmyContext, ) -> Result { - receive_activity(request, activity.clone(), context.get_ref()).await + receive_activity(request, activity.clone(), context).await } /// Returns an empty followers collection, only populating the size (for privacy). diff --git a/crates/apub/src/http/mod.rs b/crates/apub/src/http/mod.rs index 1014b00a2..6fe8d182e 100644 --- a/crates/apub/src/http/mod.rs +++ b/crates/apub/src/http/mod.rs @@ -55,10 +55,10 @@ pub async fn shared_inbox( let activity = serde_json::from_str::(&unparsed)?; match activity { SharedInboxActivities::GroupInboxActivities(g) => { - receive_group_inbox(g, request, context).await + receive_group_inbox(g, request, &context).await } SharedInboxActivities::PersonInboxActivities(p) => { - receive_person_inbox(p, request, context).await + receive_person_inbox(p, request, &context).await } } } diff --git a/crates/apub/src/http/person.rs b/crates/apub/src/http/person.rs index e7b8dfed0..dcab60017 100644 --- a/crates/apub/src/http/person.rs +++ b/crates/apub/src/http/person.rs @@ -80,15 +80,15 @@ pub async fn person_inbox( let unparsed = payload_to_string(payload).await?; trace!("Received person inbox activity {}", unparsed); let activity = serde_json::from_str::(&unparsed)?; - receive_person_inbox(activity, request, context).await + receive_person_inbox(activity, request, &context).await } pub(in crate::http) async fn receive_person_inbox( activity: PersonInboxActivities, request: HttpRequest, - context: web::Data, + context: &LemmyContext, ) -> Result { - receive_activity(request, activity, context.get_ref()).await + receive_activity(request, activity, context).await } pub(crate) async fn get_apub_person_outbox(