X-Git-Url: http://these/git/?a=blobdiff_plain;f=crates%2Fapub%2Fsrc%2Factivities%2Fblock%2Fundo_block_user.rs;h=91cafa0a555cf42a43064b0c2941b20e39911053;hb=969f8b2ce9cd80492eb5e556ce3bda95c9b892b3;hp=56f794dc18e5e97741efaa3da3c8b0b98ff8cb46;hpb=030afbc2e78a91b1a302ca59c4ea0ccef9057019;p=lemmy.git diff --git a/crates/apub/src/activities/block/undo_block_user.rs b/crates/apub/src/activities/block/undo_block_user.rs index 56f794dc..91cafa0a 100644 --- a/crates/apub/src/activities/block/undo_block_user.rs +++ b/crates/apub/src/activities/block/undo_block_user.rs @@ -7,19 +7,17 @@ use crate::{ verify_is_public, }, activity_lists::AnnouncableActivities, - local_instance, + insert_received_activity, objects::{instance::remote_instance_inboxes, person::ApubPerson}, protocol::activities::block::{block_user::BlockUser, undo_block_user::UndoBlockUser}, - ActorType, }; use activitypub_federation::{ - core::object_id::ObjectId, - data::Data, + config::Data, + kinds::{activity::UndoType, public}, + protocol::verification::verify_domains_match, traits::{ActivityHandler, Actor}, - utils::verify_domains_match, }; -use activitystreams_kinds::{activity::UndoType, public}; -use lemmy_api_common::LemmyContext; +use lemmy_api_common::{context::LemmyContext, utils::sanitize_html_opt}; use lemmy_db_schema::{ source::{ community::{CommunityPersonBan, CommunityPersonBanForm}, @@ -38,11 +36,11 @@ impl UndoBlockUser { user: &ApubPerson, mod_: &ApubPerson, reason: Option, - context: &LemmyContext, + context: &Data, ) -> Result<(), LemmyError> { let block = BlockUser::new(target, user, mod_, None, reason, None, context).await?; let audience = if let SiteOrCommunity::Community(c) = target { - Some(ObjectId::new(c.actor_id())) + Some(c.id().into()) } else { None }; @@ -52,10 +50,10 @@ impl UndoBlockUser { &context.settings().get_protocol_and_hostname(), )?; let undo = UndoBlockUser { - actor: ObjectId::new(mod_.actor_id()), + actor: mod_.id().into(), to: vec![public()], object: block, - cc: generate_cc(target, context.pool()).await?, + cc: generate_cc(target, &mut context.pool()).await?, kind: UndoType::Undo, id: id.clone(), audience, @@ -64,7 +62,7 @@ impl UndoBlockUser { let mut inboxes = vec![user.shared_inbox_or_inbox()]; match target { SiteOrCommunity::Site(_) => { - inboxes.append(&mut remote_instance_inboxes(context.pool()).await?); + inboxes.append(&mut remote_instance_inboxes(&mut context.pool()).await?); send_lemmy_activity(context, undo, mod_, inboxes, false).await } SiteOrCommunity::Community(c) => { @@ -75,7 +73,7 @@ impl UndoBlockUser { } } -#[async_trait::async_trait(?Send)] +#[async_trait::async_trait] impl ActivityHandler for UndoBlockUser { type DataType = LemmyContext; type Error = LemmyError; @@ -89,48 +87,29 @@ impl ActivityHandler for UndoBlockUser { } #[tracing::instrument(skip_all)] - async fn verify( - &self, - context: &Data, - request_counter: &mut i32, - ) -> Result<(), LemmyError> { + async fn verify(&self, context: &Data) -> Result<(), LemmyError> { + insert_received_activity(&self.id, context).await?; verify_is_public(&self.to, &self.cc)?; verify_domains_match(self.actor.inner(), self.object.actor.inner())?; - self.object.verify(context, request_counter).await?; + self.object.verify(context).await?; Ok(()) } #[tracing::instrument(skip_all)] - async fn receive( - self, - context: &Data, - request_counter: &mut i32, - ) -> Result<(), LemmyError> { - let instance = local_instance(context).await; + async fn receive(self, context: &Data) -> Result<(), LemmyError> { let expires = self.object.expires.map(|u| u.naive_local()); - let mod_person = self - .actor - .dereference(context, instance, request_counter) - .await?; - let blocked_person = self - .object - .object - .dereference(context, instance, request_counter) - .await?; - match self - .object - .target - .dereference(context, instance, request_counter) - .await? - { + let mod_person = self.actor.dereference(context).await?; + let blocked_person = self.object.object.dereference(context).await?; + match self.object.target.dereference(context).await? { SiteOrCommunity::Site(_site) => { let blocked_person = Person::update( - context.pool(), + &mut context.pool(), blocked_person.id, - &PersonUpdateForm::builder() - .banned(Some(false)) - .ban_expires(Some(expires)) - .build(), + &PersonUpdateForm { + banned: Some(false), + ban_expires: Some(expires), + ..Default::default() + }, ) .await?; @@ -138,11 +117,11 @@ impl ActivityHandler for UndoBlockUser { let form = ModBanForm { mod_person_id: mod_person.id, other_person_id: blocked_person.id, - reason: self.object.summary, + reason: sanitize_html_opt(&self.object.summary), banned: Some(false), expires, }; - ModBan::create(context.pool(), &form).await?; + ModBan::create(&mut context.pool(), &form).await?; } SiteOrCommunity::Community(community) => { let community_user_ban_form = CommunityPersonBanForm { @@ -150,18 +129,18 @@ impl ActivityHandler for UndoBlockUser { person_id: blocked_person.id, expires: None, }; - CommunityPersonBan::unban(context.pool(), &community_user_ban_form).await?; + CommunityPersonBan::unban(&mut context.pool(), &community_user_ban_form).await?; // write to mod log let form = ModBanFromCommunityForm { mod_person_id: mod_person.id, other_person_id: blocked_person.id, community_id: community.id, - reason: self.object.summary, + reason: sanitize_html_opt(&self.object.summary), banned: Some(false), expires, }; - ModBanFromCommunity::create(context.pool(), &form).await?; + ModBanFromCommunity::create(&mut context.pool(), &form).await?; } }