X-Git-Url: http://these/git/?a=blobdiff_plain;f=crates%2Fapub%2Fsrc%2Factivities%2Fcommunity%2Freport.rs;h=67b84644e6b473078d7833823cdcb4780828178c;hb=e9e76549a88cfbdab36f00d302cceabcaaa24f4c;hp=c3b50abfeeb915d18cf07cf3abf125c34527d364;hpb=b0c318566342740c5c97dd4b4d341fc2902607e0;p=lemmy.git diff --git a/crates/apub/src/activities/community/report.rs b/crates/apub/src/activities/community/report.rs index c3b50abf..67b84644 100644 --- a/crates/apub/src/activities/community/report.rs +++ b/crates/apub/src/activities/community/report.rs @@ -1,18 +1,23 @@ use crate::{ activities::{generate_activity_id, send_lemmy_activity, verify_person_in_community}, - local_instance, + insert_received_activity, objects::{community::ApubCommunity, person::ApubPerson}, - protocol::activities::community::report::Report, - ActorType, + protocol::{activities::community::report::Report, InCommunity}, PostOrComment, + SendActivity, }; use activitypub_federation::{ - core::object_id::ObjectId, - data::Data, + config::Data, + fetch::object_id::ObjectId, + kinds::activity::FlagType, traits::{ActivityHandler, Actor}, }; -use activitystreams_kinds::activity::FlagType; -use lemmy_api_common::{comment::CommentReportResponse, post::PostReportResponse, utils::blocking}; +use lemmy_api_common::{ + comment::{CommentReportResponse, CreateCommentReport}, + context::LemmyContext, + post::{CreatePostReport, PostReportResponse}, + utils::local_user_view_from_jwt, +}; use lemmy_db_schema::{ source::{ comment_report::{CommentReport, CommentReportForm}, @@ -20,19 +25,59 @@ use lemmy_db_schema::{ }, traits::Reportable, }; -use lemmy_db_views::structs::{CommentReportView, PostReportView}; use lemmy_utils::error::LemmyError; -use lemmy_websocket::{messages::SendModRoomMessage, LemmyContext, UserOperation}; use url::Url; +#[async_trait::async_trait] +impl SendActivity for CreatePostReport { + type Response = PostReportResponse; + + async fn send_activity( + request: &Self, + response: &Self::Response, + context: &Data, + ) -> Result<(), LemmyError> { + let local_user_view = local_user_view_from_jwt(&request.auth, context).await?; + Report::send( + ObjectId::from(response.post_report_view.post.ap_id.clone()), + &local_user_view.person.into(), + ObjectId::from(response.post_report_view.community.actor_id.clone()), + request.reason.to_string(), + context, + ) + .await + } +} + +#[async_trait::async_trait] +impl SendActivity for CreateCommentReport { + type Response = CommentReportResponse; + + async fn send_activity( + request: &Self, + response: &Self::Response, + context: &Data, + ) -> Result<(), LemmyError> { + let local_user_view = local_user_view_from_jwt(&request.auth, context).await?; + Report::send( + ObjectId::from(response.comment_report_view.comment.ap_id.clone()), + &local_user_view.person.into(), + ObjectId::from(response.comment_report_view.community.actor_id.clone()), + request.reason.to_string(), + context, + ) + .await + } +} + impl Report { #[tracing::instrument(skip_all)] - pub async fn send( + async fn send( object_id: ObjectId, actor: &ApubPerson, community_id: ObjectId, reason: String, - context: &LemmyContext, + context: &Data, ) -> Result<(), LemmyError> { let community = community_id.dereference_local(context).await?; let kind = FlagType::Flag; @@ -41,13 +86,13 @@ impl Report { &context.settings().get_protocol_and_hostname(), )?; let report = Report { - actor: ObjectId::new(actor.actor_id()), - to: [ObjectId::new(community.actor_id())], + actor: actor.id().into(), + to: [community.id().into()], object: object_id, summary: reason, kind, id: id.clone(), - unparsed: Default::default(), + audience: Some(community.id().into()), }; let inbox = vec![community.shared_inbox_or_inbox()]; @@ -55,7 +100,7 @@ impl Report { } } -#[async_trait::async_trait(?Send)] +#[async_trait::async_trait] impl ActivityHandler for Report { type DataType = LemmyContext; type Error = LemmyError; @@ -69,33 +114,17 @@ impl ActivityHandler for Report { } #[tracing::instrument(skip_all)] - async fn verify( - &self, - context: &Data, - request_counter: &mut i32, - ) -> Result<(), LemmyError> { - let community = self.to[0] - .dereference(context, local_instance(context), request_counter) - .await?; - verify_person_in_community(&self.actor, &community, context, request_counter).await?; + async fn verify(&self, context: &Data) -> Result<(), LemmyError> { + insert_received_activity(&self.id, context).await?; + let community = self.community(context).await?; + verify_person_in_community(&self.actor, &community, context).await?; Ok(()) } #[tracing::instrument(skip_all)] - async fn receive( - self, - context: &Data, - request_counter: &mut i32, - ) -> Result<(), LemmyError> { - let actor = self - .actor - .dereference(context, local_instance(context), request_counter) - .await?; - match self - .object - .dereference(context, local_instance(context), request_counter) - .await? - { + async fn receive(self, context: &Data) -> Result<(), LemmyError> { + let actor = self.actor.dereference(context).await?; + match self.object.dereference(context).await? { PostOrComment::Post(post) => { let report_form = PostReportForm { creator_id: actor.id, @@ -105,23 +134,7 @@ impl ActivityHandler for Report { reason: self.summary, original_post_body: post.body.clone(), }; - - let report = blocking(context.pool(), move |conn| { - PostReport::report(conn, &report_form) - }) - .await??; - - let post_report_view = blocking(context.pool(), move |conn| { - PostReportView::read(conn, report.id, actor.id) - }) - .await??; - - context.chat_server().do_send(SendModRoomMessage { - op: UserOperation::CreateCommentReport, - response: PostReportResponse { post_report_view }, - community_id: post.community_id, - websocket_id: None, - }); + PostReport::report(&mut context.pool(), &report_form).await?; } PostOrComment::Comment(comment) => { let report_form = CommentReportForm { @@ -130,26 +143,7 @@ impl ActivityHandler for Report { original_comment_text: comment.content.clone(), reason: self.summary, }; - - let report = blocking(context.pool(), move |conn| { - CommentReport::report(conn, &report_form) - }) - .await??; - - let comment_report_view = blocking(context.pool(), move |conn| { - CommentReportView::read(conn, report.id, actor.id) - }) - .await??; - let community_id = comment_report_view.community.id; - - context.chat_server().do_send(SendModRoomMessage { - op: UserOperation::CreateCommentReport, - response: CommentReportResponse { - comment_report_view, - }, - community_id, - websocket_id: None, - }); + CommentReport::report(&mut context.pool(), &report_form).await?; } }; Ok(())