From 074febb960bcda6adb847fe707b8e85fe6f9b057 Mon Sep 17 00:00:00 2001 From: Felix Ableitner Date: Sun, 27 Jun 2021 05:41:56 +0200 Subject: [PATCH] add cc field for all activities which i forgot before --- .../src/activities_new/comment/create.rs | 1 + .../src/activities_new/comment/delete.rs | 2 +- .../src/activities_new/comment/dislike.rs | 2 +- .../src/activities_new/comment/like.rs | 2 +- .../src/activities_new/comment/remove.rs | 4 ++-- .../src/activities_new/comment/update.rs | 1 + .../src/activities_new/community/delete.rs | 6 +++--- .../src/activities_new/community/remove.rs | 4 ++-- .../activities_new/community/undo_delete.rs | 6 +++--- .../activities_new/community/undo_remove.rs | 4 ++-- .../src/activities_new/community/update.rs | 8 +++---- crates/apub_receive/src/activities_new/mod.rs | 21 +++++++------------ .../src/activities_new/post/create.rs | 1 + .../src/activities_new/post/delete.rs | 1 + .../src/activities_new/post/dislike.rs | 1 + .../src/activities_new/post/like.rs | 1 + .../src/activities_new/post/remove.rs | 4 ++-- .../src/activities_new/post/update.rs | 1 + .../src/inbox/new_inbox_routing.rs | 12 +++++++---- 19 files changed, 43 insertions(+), 39 deletions(-) diff --git a/crates/apub_receive/src/activities_new/comment/create.rs b/crates/apub_receive/src/activities_new/comment/create.rs index 74a367e4..1a1da075 100644 --- a/crates/apub_receive/src/activities_new/comment/create.rs +++ b/crates/apub_receive/src/activities_new/comment/create.rs @@ -16,6 +16,7 @@ pub struct CreateComment { actor: Url, to: PublicUrl, object: NoteExt, + cc: Vec, #[serde(rename = "type")] kind: CreateType, } diff --git a/crates/apub_receive/src/activities_new/comment/delete.rs b/crates/apub_receive/src/activities_new/comment/delete.rs index 39166550..e50c3888 100644 --- a/crates/apub_receive/src/activities_new/comment/delete.rs +++ b/crates/apub_receive/src/activities_new/comment/delete.rs @@ -15,7 +15,7 @@ pub struct DeleteComment { actor: Url, to: PublicUrl, object: Url, - cc: Vec, + cc: [Url; 1], #[serde(rename = "type")] kind: DeleteType, } diff --git a/crates/apub_receive/src/activities_new/comment/dislike.rs b/crates/apub_receive/src/activities_new/comment/dislike.rs index d2dbb210..9953e4f3 100644 --- a/crates/apub_receive/src/activities_new/comment/dislike.rs +++ b/crates/apub_receive/src/activities_new/comment/dislike.rs @@ -12,7 +12,7 @@ pub struct DislikeComment { actor: Url, to: PublicUrl, object: Url, - cc: Vec, + cc: [Url; 1], #[serde(rename = "type")] kind: DislikeType, } diff --git a/crates/apub_receive/src/activities_new/comment/like.rs b/crates/apub_receive/src/activities_new/comment/like.rs index f9882d5a..c7fae913 100644 --- a/crates/apub_receive/src/activities_new/comment/like.rs +++ b/crates/apub_receive/src/activities_new/comment/like.rs @@ -12,7 +12,7 @@ pub struct LikeComment { actor: Url, to: PublicUrl, object: Url, - cc: Vec, + cc: [Url; 1], #[serde(rename = "type")] kind: LikeType, } diff --git a/crates/apub_receive/src/activities_new/comment/remove.rs b/crates/apub_receive/src/activities_new/comment/remove.rs index e23d3b4d..44ee49af 100644 --- a/crates/apub_receive/src/activities_new/comment/remove.rs +++ b/crates/apub_receive/src/activities_new/comment/remove.rs @@ -18,7 +18,7 @@ pub struct RemoveComment { actor: Url, to: PublicUrl, object: Url, - cc: Vec, + cc: [Url; 1], #[serde(rename = "type")] kind: RemoveType, } @@ -28,7 +28,7 @@ impl VerifyActivity for Activity { async fn verify(&self, context: &LemmyContext) -> Result<(), LemmyError> { verify_domains_match(&self.inner.actor, self.id_unchecked())?; check_is_apub_id_valid(&self.inner.actor, false)?; - verify_mod_action(self.inner.actor.clone(), self.inner.cc.clone(), context).await + verify_mod_action(self.inner.actor.clone(), self.inner.cc[0].clone(), context).await } } diff --git a/crates/apub_receive/src/activities_new/comment/update.rs b/crates/apub_receive/src/activities_new/comment/update.rs index 540ec2a3..34332192 100644 --- a/crates/apub_receive/src/activities_new/comment/update.rs +++ b/crates/apub_receive/src/activities_new/comment/update.rs @@ -16,6 +16,7 @@ pub struct UpdateComment { actor: Url, to: PublicUrl, object: NoteExt, + cc: Vec, #[serde(rename = "type")] kind: UpdateType, } diff --git a/crates/apub_receive/src/activities_new/community/delete.rs b/crates/apub_receive/src/activities_new/community/delete.rs index 0229ee0e..efd01f83 100644 --- a/crates/apub_receive/src/activities_new/community/delete.rs +++ b/crates/apub_receive/src/activities_new/community/delete.rs @@ -26,7 +26,7 @@ pub struct DeleteCommunity { actor: Url, to: PublicUrl, pub(in crate::activities_new::community) object: Url, - cc: Url, + cc: [Url; 1], #[serde(rename = "type")] kind: DeleteType, } @@ -41,14 +41,14 @@ impl VerifyActivity for Activity { .await?; // remote mod action on local community if let Ok(c) = community { - verify_domains_match(&self.inner.object, &self.inner.cc)?; + verify_domains_match(&self.inner.object, &self.inner.cc[0])?; check_is_apub_id_valid(&self.inner.actor, false)?; verify_is_community_mod(self.inner.actor.clone(), c.actor_id(), context).await } // community action sent to followers else { verify_domains_match(&self.inner.actor, &self.inner.object)?; - verify_domains_match(&self.inner.actor, &self.inner.cc) + verify_domains_match(&self.inner.actor, &self.inner.cc[0]) } } } diff --git a/crates/apub_receive/src/activities_new/community/remove.rs b/crates/apub_receive/src/activities_new/community/remove.rs index ba27984d..5ba99756 100644 --- a/crates/apub_receive/src/activities_new/community/remove.rs +++ b/crates/apub_receive/src/activities_new/community/remove.rs @@ -18,7 +18,7 @@ pub struct RemoveCommunity { actor: Url, to: PublicUrl, pub(in crate::activities_new::community) object: Url, - cc: Url, + cc: [Url; 1], #[serde(rename = "type")] kind: RemoveType, } @@ -28,7 +28,7 @@ impl VerifyActivity for Activity { async fn verify(&self, _context: &LemmyContext) -> Result<(), LemmyError> { check_is_apub_id_valid(&self.inner.actor, false)?; verify_domains_match(&self.inner.actor, &self.inner.object)?; - verify_domains_match(&self.inner.actor, &self.inner.cc) + verify_domains_match(&self.inner.actor, &self.inner.cc[0]) } } diff --git a/crates/apub_receive/src/activities_new/community/undo_delete.rs b/crates/apub_receive/src/activities_new/community/undo_delete.rs index 71d4c78b..e46909e9 100644 --- a/crates/apub_receive/src/activities_new/community/undo_delete.rs +++ b/crates/apub_receive/src/activities_new/community/undo_delete.rs @@ -30,7 +30,7 @@ pub struct UndoDeleteCommunity { actor: Url, to: PublicUrl, object: Activity, - cc: Url, + cc: [Url; 1], #[serde(rename = "type")] kind: DeleteType, } @@ -45,14 +45,14 @@ impl VerifyActivity for Activity { .await?; // remote mod action on local community if let Ok(c) = community { - verify_domains_match(&self.inner.object.inner.object, &self.inner.cc)?; + verify_domains_match(&self.inner.object.inner.object, &self.inner.cc[0])?; check_is_apub_id_valid(&self.inner.actor, false)?; verify_is_community_mod(self.inner.actor.clone(), c.actor_id(), context).await?; } // community action sent to followers else { verify_domains_match(&self.inner.actor, &self.inner.object.inner.object)?; - verify_domains_match(&self.inner.actor, &self.inner.cc)?; + verify_domains_match(&self.inner.actor, &self.inner.cc[0])?; } self.inner.object.verify(context).await } diff --git a/crates/apub_receive/src/activities_new/community/undo_remove.rs b/crates/apub_receive/src/activities_new/community/undo_remove.rs index 7478b44e..e7330732 100644 --- a/crates/apub_receive/src/activities_new/community/undo_remove.rs +++ b/crates/apub_receive/src/activities_new/community/undo_remove.rs @@ -18,7 +18,7 @@ pub struct UndoRemoveCommunity { actor: Url, to: PublicUrl, object: Activity, - cc: Url, + cc: [Url; 1], #[serde(rename = "type")] kind: RemoveType, } @@ -28,7 +28,7 @@ impl VerifyActivity for Activity { async fn verify(&self, context: &LemmyContext) -> Result<(), LemmyError> { check_is_apub_id_valid(&self.inner.actor, false)?; verify_domains_match(&self.inner.actor, &self.inner.object.inner.object)?; - verify_domains_match(&self.inner.actor, &self.inner.cc)?; + verify_domains_match(&self.inner.actor, &self.inner.cc[0])?; self.inner.object.verify(context).await } } diff --git a/crates/apub_receive/src/activities_new/community/update.rs b/crates/apub_receive/src/activities_new/community/update.rs index f9343039..1b29a417 100644 --- a/crates/apub_receive/src/activities_new/community/update.rs +++ b/crates/apub_receive/src/activities_new/community/update.rs @@ -20,7 +20,7 @@ pub struct UpdateCommunity { actor: Url, to: PublicUrl, object: GroupExt, - cc: Url, + cc: [Url; 1], #[serde(rename = "type")] kind: UpdateType, } @@ -28,9 +28,9 @@ pub struct UpdateCommunity { #[async_trait::async_trait(?Send)] impl VerifyActivity for Activity { async fn verify(&self, context: &LemmyContext) -> Result<(), LemmyError> { - self.inner.object.id(self.inner.cc.as_str())?; + self.inner.object.id(self.inner.cc[0].as_str())?; check_is_apub_id_valid(&self.inner.actor, false)?; - verify_is_community_mod(self.inner.actor.clone(), self.inner.cc.clone(), context).await + verify_is_community_mod(self.inner.actor.clone(), self.inner.cc[0].clone(), context).await } } @@ -41,7 +41,7 @@ impl ReceiveActivity for Activity { context: &LemmyContext, request_counter: &mut i32, ) -> Result<(), LemmyError> { - let cc = self.inner.cc.clone().into(); + let cc = self.inner.cc[0].clone().into(); let community = blocking(context.pool(), move |conn| { Community::read_from_apub_id(conn, &cc) }) diff --git a/crates/apub_receive/src/activities_new/mod.rs b/crates/apub_receive/src/activities_new/mod.rs index a6f9eebb..daae5341 100644 --- a/crates/apub_receive/src/activities_new/mod.rs +++ b/crates/apub_receive/src/activities_new/mod.rs @@ -1,9 +1,9 @@ -use anyhow::{anyhow, Context}; +use anyhow::anyhow; use lemmy_api_common::blocking; use lemmy_db_queries::ApubObject; use lemmy_db_schema::source::{community::Community, person::Person}; use lemmy_db_views_actor::community_view::CommunityView; -use lemmy_utils::{location_info, LemmyError}; +use lemmy_utils::LemmyError; use lemmy_websocket::LemmyContext; use url::Url; @@ -15,20 +15,13 @@ pub mod private_message; async fn verify_mod_action( actor_id: Url, - activity_cc: Vec, + activity_cc: Url, context: &LemmyContext, ) -> Result<(), LemmyError> { - let mut cc = activity_cc.into_iter(); - let community: Community = loop { - let current = cc.next().context(location_info!())?; - let community = blocking(context.pool(), move |conn| { - Community::read_from_apub_id(conn, ¤t.into()) - }) - .await?; - if let Ok(c) = community { - break c; - } - }; + let community = blocking(context.pool(), move |conn| { + Community::read_from_apub_id(conn, &activity_cc.into()) + }) + .await??; if community.local { let actor = blocking(&context.pool(), move |conn| { diff --git a/crates/apub_receive/src/activities_new/post/create.rs b/crates/apub_receive/src/activities_new/post/create.rs index 76872214..ea23fae9 100644 --- a/crates/apub_receive/src/activities_new/post/create.rs +++ b/crates/apub_receive/src/activities_new/post/create.rs @@ -19,6 +19,7 @@ pub struct CreatePost { actor: Url, to: PublicUrl, object: PageExt, + cc: Vec, #[serde(rename = "type")] kind: CreateType, } diff --git a/crates/apub_receive/src/activities_new/post/delete.rs b/crates/apub_receive/src/activities_new/post/delete.rs index b52ddd7d..647ea1b0 100644 --- a/crates/apub_receive/src/activities_new/post/delete.rs +++ b/crates/apub_receive/src/activities_new/post/delete.rs @@ -15,6 +15,7 @@ pub struct DeletePost { actor: Url, to: PublicUrl, object: Url, + cc: [Url; 1], #[serde(rename = "type")] kind: DeleteType, } diff --git a/crates/apub_receive/src/activities_new/post/dislike.rs b/crates/apub_receive/src/activities_new/post/dislike.rs index a46b7164..a087be17 100644 --- a/crates/apub_receive/src/activities_new/post/dislike.rs +++ b/crates/apub_receive/src/activities_new/post/dislike.rs @@ -12,6 +12,7 @@ pub struct DislikePost { actor: Url, to: PublicUrl, object: Url, + cc: [Url; 1], #[serde(rename = "type")] kind: DislikeType, } diff --git a/crates/apub_receive/src/activities_new/post/like.rs b/crates/apub_receive/src/activities_new/post/like.rs index 3154ac68..10054006 100644 --- a/crates/apub_receive/src/activities_new/post/like.rs +++ b/crates/apub_receive/src/activities_new/post/like.rs @@ -12,6 +12,7 @@ pub struct LikePost { actor: Url, to: PublicUrl, object: Url, + cc: [Url; 1], #[serde(rename = "type")] kind: LikeType, } diff --git a/crates/apub_receive/src/activities_new/post/remove.rs b/crates/apub_receive/src/activities_new/post/remove.rs index 5f738d5e..0fa0b255 100644 --- a/crates/apub_receive/src/activities_new/post/remove.rs +++ b/crates/apub_receive/src/activities_new/post/remove.rs @@ -18,7 +18,7 @@ pub struct RemovePost { actor: Url, to: PublicUrl, object: Url, - cc: Vec, + cc: [Url; 1], #[serde(rename = "type")] kind: RemoveType, } @@ -28,7 +28,7 @@ impl VerifyActivity for Activity { async fn verify(&self, context: &LemmyContext) -> Result<(), LemmyError> { verify_domains_match(&self.inner.actor, self.id_unchecked())?; check_is_apub_id_valid(&self.inner.actor, false)?; - verify_mod_action(self.inner.actor.clone(), self.inner.cc.clone(), context).await + verify_mod_action(self.inner.actor.clone(), self.inner.cc[0].clone(), context).await } } diff --git a/crates/apub_receive/src/activities_new/post/update.rs b/crates/apub_receive/src/activities_new/post/update.rs index 20b0f880..5ccbce19 100644 --- a/crates/apub_receive/src/activities_new/post/update.rs +++ b/crates/apub_receive/src/activities_new/post/update.rs @@ -28,6 +28,7 @@ pub struct UpdatePost { actor: Url, to: PublicUrl, object: PageExt, + cc: Vec, #[serde(rename = "type")] kind: UpdateType, } diff --git a/crates/apub_receive/src/inbox/new_inbox_routing.rs b/crates/apub_receive/src/inbox/new_inbox_routing.rs index 7fcfff14..2a72137a 100644 --- a/crates/apub_receive/src/inbox/new_inbox_routing.rs +++ b/crates/apub_receive/src/inbox/new_inbox_routing.rs @@ -7,7 +7,13 @@ use crate::activities_new::{ remove::RemoveComment, update::UpdateComment, }, - community::{delete::DeleteCommunity, update::UpdateCommunity}, + community::{ + delete::DeleteCommunity, + remove::RemoveCommunity, + undo_delete::UndoDeleteCommunity, + undo_remove::UndoRemoveCommunity, + update::UpdateCommunity, + }, follow::AcceptFollowCommunity, post::{ create::CreatePost, @@ -29,9 +35,6 @@ use lemmy_apub_lib::{ReceiveActivity, VerifyActivity}; use lemmy_utils::LemmyError; use lemmy_websocket::LemmyContext; use url::Url; -use crate::activities_new::community::remove::RemoveCommunity; -use crate::activities_new::community::undo_remove::UndoRemoveCommunity; -use crate::activities_new::community::undo_delete::UndoDeleteCommunity; // TODO: would be nice if we could move this to lemmy_apub_lib crate. doing that gives error: // "only traits defined in the current crate can be implemented for arbitrary types" @@ -57,6 +60,7 @@ impl Activity { } } +// TODO: this is probably wrong, it contains all activities #[derive(Clone, Debug, serde::Deserialize, serde::Serialize)] pub enum PersonAcceptedActivitiesNew { AcceptFollowCommunity(AcceptFollowCommunity),