From 41d4852efcd47d2eb0d68e11fcc96d762b7402d7 Mon Sep 17 00:00:00 2001 From: Nutomic Date: Fri, 25 Nov 2022 14:01:58 +0000 Subject: [PATCH] Federate group moderators using attributedTo field (#2588) * Federate group moderators using attributedTo field * fix tests Co-authored-by: Dessalines --- crates/apub/assets/lemmy/objects/group.json | 1 + crates/apub/src/objects/community.rs | 11 +++++++---- crates/apub/src/protocol/objects/group.rs | 4 +++- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/crates/apub/assets/lemmy/objects/group.json b/crates/apub/assets/lemmy/objects/group.json index c694d069..d44cc79b 100644 --- a/crates/apub/assets/lemmy/objects/group.json +++ b/crates/apub/assets/lemmy/objects/group.json @@ -20,6 +20,7 @@ "inbox": "https://enterprise.lemmy.ml/c/tenforward/inbox", "followers": "https://enterprise.lemmy.ml/c/tenforward/followers", "moderators": "https://enterprise.lemmy.ml/c/tenforward/moderators", + "attributedTo": "https://enterprise.lemmy.ml/c/tenforward/moderators", "postingRestrictedToMods": false, "endpoints": { "sharedInbox": "https://enterprise.lemmy.ml/inbox" diff --git a/crates/apub/src/objects/community.rs b/crates/apub/src/objects/community.rs index c15c23d3..aefc7edb 100644 --- a/crates/apub/src/objects/community.rs +++ b/crates/apub/src/objects/community.rs @@ -89,6 +89,9 @@ impl ApubObject for ApubCommunity { let community_id = self.id; let langs = CommunityLanguage::read(data.pool(), community_id).await?; let language = LanguageTag::new_multiple(langs, data.pool()).await?; + let attributed_to = Some(ObjectId::::new( + generate_moderators_url(&self.actor_id)?, + )); let group = Group { kind: GroupType::Group, @@ -100,9 +103,7 @@ impl ApubObject for ApubCommunity { icon: self.icon.clone().map(ImageObject::new), image: self.banner.clone().map(ImageObject::new), sensitive: Some(self.nsfw), - moderators: Some(ObjectId::::new( - generate_moderators_url(&self.actor_id)?, - )), + moderators: attributed_to.clone(), inbox: self.inbox_url.clone().into(), outbox: ObjectId::new(generate_outbox_url(&self.actor_id)?), followers: self.followers_url.clone().into(), @@ -114,6 +115,7 @@ impl ApubObject for ApubCommunity { published: Some(convert_datetime(self.published)), updated: self.updated.map(convert_datetime), posting_restricted_to_mods: Some(self.posting_restricted_to_mods), + attributed_to, }; Ok(group) } @@ -156,7 +158,7 @@ impl ApubObject for ApubCommunity { .map_err(|e| debug!("{}", e)) .ok(); - if let Some(moderators) = &group.moderators { + if let Some(moderators) = group.attributed_to.or(group.moderators) { moderators .dereference(&outbox_data, local_instance(context).await, request_counter) .await @@ -240,6 +242,7 @@ pub(crate) mod tests { let mut json: Group = file_to_json_object("assets/lemmy/objects/group.json").unwrap(); // change these links so they dont fetch over the network json.moderators = None; + json.attributed_to = None; json.outbox = ObjectId::new(Url::parse("https://enterprise.lemmy.ml/c/tenforward/not_outbox").unwrap()); diff --git a/crates/apub/src/protocol/objects/group.rs b/crates/apub/src/protocol/objects/group.rs index 1935589e..564aed16 100644 --- a/crates/apub/src/protocol/objects/group.rs +++ b/crates/apub/src/protocol/objects/group.rs @@ -57,8 +57,10 @@ pub struct Group { pub(crate) image: Option, // lemmy extension pub(crate) sensitive: Option, - // lemmy extension + // deprecated, use attributed_to instead pub(crate) moderators: Option>, + #[serde(deserialize_with = "deserialize_skip_error", default)] + pub(crate) attributed_to: Option>, // lemmy extension pub(crate) posting_restricted_to_mods: Option, pub(crate) outbox: ObjectId, -- 2.44.1