]> Untitled Git - lemmy.git/commitdiff
Federate group moderators using attributedTo field (#2588)
authorNutomic <me@nutomic.com>
Fri, 25 Nov 2022 14:01:58 +0000 (14:01 +0000)
committerGitHub <noreply@github.com>
Fri, 25 Nov 2022 14:01:58 +0000 (09:01 -0500)
* Federate group moderators using attributedTo field

* fix tests

Co-authored-by: Dessalines <dessalines@users.noreply.github.com>
crates/apub/assets/lemmy/objects/group.json
crates/apub/src/objects/community.rs
crates/apub/src/protocol/objects/group.rs

index c694d069d88e590cc538ae2dc0fdb5df18d14e92..d44cc79bd7d17c40c57c3292291ebe85e009bbc3 100644 (file)
@@ -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"
index c15c23d3d1aa11840da7317362c42fecd29e73ce..aefc7edb233cd707c7c0d0e9a1d6e7b53f6b4987 100644 (file)
@@ -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::<ApubCommunityModerators>::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::<ApubCommunityModerators>::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());
 
index 1935589e3c86abe622906416b7c7f96b50ab77a6..564aed16956e7e5ee05d106d405bd91588c5599d 100644 (file)
@@ -57,8 +57,10 @@ pub struct Group {
   pub(crate) image: Option<ImageObject>,
   // lemmy extension
   pub(crate) sensitive: Option<bool>,
-  // lemmy extension
+  // deprecated, use attributed_to instead
   pub(crate) moderators: Option<ObjectId<ApubCommunityModerators>>,
+  #[serde(deserialize_with = "deserialize_skip_error", default)]
+  pub(crate) attributed_to: Option<ObjectId<ApubCommunityModerators>>,
   // lemmy extension
   pub(crate) posting_restricted_to_mods: Option<bool>,
   pub(crate) outbox: ObjectId<ApubCommunityOutbox>,