From dd53f44c4db26fb361011a48ae1aa070e53a753d Mon Sep 17 00:00:00 2001 From: Felix Ableitner Date: Fri, 22 Oct 2021 12:31:09 +0200 Subject: [PATCH] Remove compat for RemovePostCommentOrCommunity --- .../apub/src/activities/community/announce.rs | 2 - .../src/activities/community/remove_mod.rs | 58 +++++---------- crates/apub/src/activities/mod.rs | 1 - crates/apub/src/activities/undo_remove.rs | 73 ------------------- crates/apub/src/migrations.rs | 12 --- 5 files changed, 17 insertions(+), 129 deletions(-) delete mode 100644 crates/apub/src/activities/undo_remove.rs diff --git a/crates/apub/src/activities/community/announce.rs b/crates/apub/src/activities/community/announce.rs index 3fefac15f..5e8bb5203 100644 --- a/crates/apub/src/activities/community/announce.rs +++ b/crates/apub/src/activities/community/announce.rs @@ -12,7 +12,6 @@ use crate::{ deletion::{delete::Delete, undo_delete::UndoDelete}, generate_activity_id, post::create_or_update::CreateOrUpdatePost, - undo_remove::UndoRemovePostCommentOrCommunity, verify_activity, verify_community, voting::{undo_vote::UndoVote, vote::Vote}, @@ -51,7 +50,6 @@ pub enum AnnouncableActivities { UndoVote(UndoVote), Delete(Delete), UndoDelete(UndoDelete), - UndoRemovePostCommentOrCommunity(UndoRemovePostCommentOrCommunity), UpdateCommunity(Box), BlockUserFromCommunity(BlockUserFromCommunity), UndoBlockUserFromCommunity(UndoBlockUserFromCommunity), diff --git a/crates/apub/src/activities/community/remove_mod.rs b/crates/apub/src/activities/community/remove_mod.rs index d7186114d..7d98f4a2d 100644 --- a/crates/apub/src/activities/community/remove_mod.rs +++ b/crates/apub/src/activities/community/remove_mod.rs @@ -1,7 +1,6 @@ use crate::{ activities::{ community::{announce::AnnouncableActivities, send_to_community}, - deletion::{delete::receive_remove_action, verify_delete_activity}, generate_activity_id, verify_activity, verify_add_remove_moderator_target, @@ -44,7 +43,7 @@ pub struct RemoveMod { #[serde(rename = "type")] kind: RemoveType, // if target is set, this is means remove mod from community - pub(in crate::activities) target: Option, + pub(in crate::activities) target: Url, id: Url, #[serde(rename = "@context")] context: OneOrMany, @@ -67,7 +66,7 @@ impl RemoveMod { actor: ObjectId::new(actor.actor_id()), to: PublicUrlMigration::create(), object: ObjectId::new(removed_mod.actor_id()), - target: Some(generate_moderators_url(&community.actor_id)?.into()), + target: generate_moderators_url(&community.actor_id)?.into(), id: id.clone(), context: lemmy_context(), cc: [ObjectId::new(community.actor_id())], @@ -90,21 +89,9 @@ impl ActivityHandler for RemoveMod { request_counter: &mut i32, ) -> Result<(), LemmyError> { verify_activity(self, &context.settings())?; - if let Some(target) = &self.target { - verify_person_in_community(&self.actor, &self.cc[0], context, request_counter).await?; - verify_mod_action(&self.actor, &self.cc[0], context, request_counter).await?; - verify_add_remove_moderator_target(target, &self.cc[0])?; - } else { - verify_delete_activity( - self.object.inner(), - self, - &self.cc[0], - true, - context, - request_counter, - ) - .await?; - } + verify_person_in_community(&self.actor, &self.cc[0], context, request_counter).await?; + verify_mod_action(&self.actor, &self.cc[0], context, request_counter).await?; + verify_add_remove_moderator_target(&self.target, &self.cc[0])?; Ok(()) } @@ -113,29 +100,18 @@ impl ActivityHandler for RemoveMod { context: &Data, request_counter: &mut i32, ) -> Result<(), LemmyError> { - if self.target.is_some() { - let community = self.cc[0].dereference(context, request_counter).await?; - let remove_mod = self.object.dereference(context, request_counter).await?; + let community = self.cc[0].dereference(context, request_counter).await?; + let remove_mod = self.object.dereference(context, request_counter).await?; - let form = CommunityModeratorForm { - community_id: community.id, - person_id: remove_mod.id, - }; - blocking(context.pool(), move |conn| { - CommunityModerator::leave(conn, &form) - }) - .await??; - // TODO: send websocket notification about removed mod - Ok(()) - } else { - receive_remove_action( - &self.actor, - self.object.inner(), - None, - context, - request_counter, - ) - .await - } + let form = CommunityModeratorForm { + community_id: community.id, + person_id: remove_mod.id, + }; + blocking(context.pool(), move |conn| { + CommunityModerator::leave(conn, &form) + }) + .await??; + // TODO: send websocket notification about removed mod + Ok(()) } } diff --git a/crates/apub/src/activities/mod.rs b/crates/apub/src/activities/mod.rs index f59a93850..14a67394e 100644 --- a/crates/apub/src/activities/mod.rs +++ b/crates/apub/src/activities/mod.rs @@ -26,7 +26,6 @@ pub mod following; pub mod post; pub mod private_message; pub mod report; -pub mod undo_remove; pub mod voting; #[derive(Clone, Debug, ToString, Deserialize, Serialize)] diff --git a/crates/apub/src/activities/undo_remove.rs b/crates/apub/src/activities/undo_remove.rs deleted file mode 100644 index 57346490c..000000000 --- a/crates/apub/src/activities/undo_remove.rs +++ /dev/null @@ -1,73 +0,0 @@ -use crate::{ - activities::{ - community::remove_mod::RemoveMod, - deletion::{undo_delete::UndoDelete, verify_delete_activity}, - verify_activity, - }, - fetcher::object_id::ObjectId, - migrations::PublicUrlMigration, - objects::{community::ApubCommunity, person::ApubPerson}, -}; -use activitystreams::{ - activity::kind::UndoType, - base::AnyBase, - primitives::OneOrMany, - unparsed::Unparsed, -}; -use lemmy_apub_lib::{ - data::Data, - traits::{ActivityFields, ActivityHandler}, -}; -use lemmy_utils::LemmyError; -use lemmy_websocket::LemmyContext; -use serde::{Deserialize, Serialize}; -use url::Url; - -#[derive(Clone, Debug, Deserialize, Serialize, ActivityFields)] -#[serde(rename_all = "camelCase")] -pub struct UndoRemovePostCommentOrCommunity { - actor: ObjectId, - to: PublicUrlMigration, - // Note, there is no such thing as Undo/Remove/Mod, so we ignore that - object: RemoveMod, - cc: [ObjectId; 1], - #[serde(rename = "type")] - kind: UndoType, - id: Url, - #[serde(rename = "@context")] - context: OneOrMany, - #[serde(flatten)] - unparsed: Unparsed, -} - -#[async_trait::async_trait(?Send)] -impl ActivityHandler for UndoRemovePostCommentOrCommunity { - type DataType = LemmyContext; - async fn verify( - &self, - context: &Data, - request_counter: &mut i32, - ) -> Result<(), LemmyError> { - verify_activity(self, &context.settings())?; - self.object.verify(context, request_counter).await?; - - verify_delete_activity( - self.object.object.inner(), - self, - &self.cc[0], - true, - context, - request_counter, - ) - .await?; - Ok(()) - } - - async fn receive( - self, - context: &Data, - _request_counter: &mut i32, - ) -> Result<(), LemmyError> { - UndoDelete::receive_undo_remove_action(self.object.object.inner(), context).await - } -} diff --git a/crates/apub/src/migrations.rs b/crates/apub/src/migrations.rs index 9337e8b4c..b75f617ba 100644 --- a/crates/apub/src/migrations.rs +++ b/crates/apub/src/migrations.rs @@ -1,18 +1,6 @@ use lemmy_apub_lib::values::PublicUrl; use serde::{Deserialize, Serialize}; -// Another migration we are doing is to handle all deletions and removals using Delete activity. -// This is because Remove is for removing an object from a collection, so using it that way doesn't -// really make sense. It is also a problem because we have a RemoveMod activity, which was awkward -// to handle together with removing posts etc. -// -// v0.11: send and receive mod removals as Remove -// v0.12: receive removals as Remove, send as Delete (compatible with v0.11) -// v0.13: send and receive mod removals as Delete (compatible with v0.12) -// -// For v0.13, delete [`UndoRemovePostCommentOrCommunity`], and don't handle object deletion in -// [`RemoveMod`] handler. - /// Migrate value of field `to` from single value to vec. /// /// v0.14: send as single value, accept both