]> Untitled Git - lemmy.git/blob - crates/apub/src/activities/community/mod.rs
Upgrade activitypub_federation to 0.2.0, add setting federation.debug (#2300)
[lemmy.git] / crates / apub / src / activities / community / mod.rs
1 use crate::{
2   activities::send_lemmy_activity,
3   activity_lists::AnnouncableActivities,
4   local_instance,
5   objects::community::ApubCommunity,
6   protocol::activities::community::announce::AnnounceActivity,
7   ActorType,
8 };
9 use activitypub_federation::{core::object_id::ObjectId, traits::Actor};
10 use lemmy_utils::error::LemmyError;
11 use lemmy_websocket::LemmyContext;
12 use url::Url;
13
14 pub mod add_mod;
15 pub mod announce;
16 pub mod remove_mod;
17 pub mod report;
18 pub mod update;
19
20 #[tracing::instrument(skip_all)]
21 pub(crate) async fn send_activity_in_community<ActorT>(
22   activity: AnnouncableActivities,
23   actor: &ActorT,
24   community: &ApubCommunity,
25   mut inboxes: Vec<Url>,
26   context: &LemmyContext,
27 ) -> Result<(), LemmyError>
28 where
29   ActorT: Actor + ActorType,
30 {
31   inboxes.push(community.shared_inbox_or_inbox());
32   send_lemmy_activity(context, activity.clone(), actor, inboxes, false).await?;
33
34   if community.local {
35     AnnounceActivity::send(activity, community, context).await?;
36   }
37
38   Ok(())
39 }
40
41 #[tracing::instrument(skip_all)]
42 async fn get_community_from_moderators_url(
43   moderators: &Url,
44   context: &LemmyContext,
45   request_counter: &mut i32,
46 ) -> Result<ApubCommunity, LemmyError> {
47   let community_id = Url::parse(&moderators.to_string().replace("/moderators", ""))?;
48   ObjectId::new(community_id)
49     .dereference(context, local_instance(context), request_counter)
50     .await
51 }