X-Git-Url: http://these/git/?a=blobdiff_plain;f=crates%2Fapub%2Fsrc%2Fobjects%2Fprivate_message.rs;h=a51cfe6b77c2cad5008a062cc1a424a85ec968ae;hb=3471f3533cb724b2cf6953d563aadfcc9f66c1d2;hp=e2571bd938ad9227a061859e1a1db14da1b7c62d;hpb=93225e5ddfd48e613afe51984243112a1bedfcc2;p=lemmy.git diff --git a/crates/apub/src/objects/private_message.rs b/crates/apub/src/objects/private_message.rs index e2571bd9..a51cfe6b 100644 --- a/crates/apub/src/objects/private_message.rs +++ b/crates/apub/src/objects/private_message.rs @@ -12,7 +12,10 @@ use activitypub_federation::{ traits::Object, }; use chrono::NaiveDateTime; -use lemmy_api_common::{context::LemmyContext, utils::check_person_block}; +use lemmy_api_common::{ + context::LemmyContext, + utils::{check_person_block, sanitize_html}, +}; use lemmy_db_schema::{ source::{ person::Person, @@ -59,7 +62,7 @@ impl Object for ApubPrivateMessage { context: &Data, ) -> Result, LemmyError> { Ok( - PrivateMessage::read_from_apub_id(context.pool(), object_id) + PrivateMessage::read_from_apub_id(&mut context.pool(), object_id) .await? .map(Into::into), ) @@ -73,10 +76,10 @@ impl Object for ApubPrivateMessage { #[tracing::instrument(skip_all)] async fn into_json(self, context: &Data) -> Result { let creator_id = self.creator_id; - let creator = Person::read(context.pool(), creator_id).await?; + let creator = Person::read(&mut context.pool(), creator_id).await?; let recipient_id = self.recipient_id; - let recipient = Person::read(context.pool(), recipient_id).await?; + let recipient = Person::read(&mut context.pool(), recipient_id).await?; let note = ChatMessage { r#type: ChatMessageType::ChatMessage, @@ -116,12 +119,15 @@ impl Object for ApubPrivateMessage { ) -> Result { let creator = note.attributed_to.dereference(context).await?; let recipient = note.to[0].dereference(context).await?; - check_person_block(creator.id, recipient.id, context.pool()).await?; + check_person_block(creator.id, recipient.id, &mut context.pool()).await?; + + let content = read_from_string_or_source(¬e.content, &None, ¬e.source); + let content = sanitize_html(&content); let form = PrivateMessageInsertForm { creator_id: creator.id, recipient_id: recipient.id, - content: read_from_string_or_source(¬e.content, &None, ¬e.source), + content, published: note.published.map(|u| u.naive_local()), updated: note.updated.map(|u| u.naive_local()), deleted: Some(false), @@ -129,13 +135,16 @@ impl Object for ApubPrivateMessage { ap_id: Some(note.id.into()), local: Some(false), }; - let pm = PrivateMessage::create(context.pool(), &form).await?; + let pm = PrivateMessage::create(&mut context.pool(), &form).await?; Ok(pm.into()) } } #[cfg(test)] mod tests { + #![allow(clippy::unwrap_used)] + #![allow(clippy::indexing_slicing)] + use super::*; use crate::{ objects::{ @@ -174,9 +183,13 @@ mod tests { } async fn cleanup(data: (ApubPerson, ApubPerson, ApubSite), context: &Data) { - Person::delete(context.pool(), data.0.id).await.unwrap(); - Person::delete(context.pool(), data.1.id).await.unwrap(); - Site::delete(context.pool(), data.2.id).await.unwrap(); + Person::delete(&mut context.pool(), data.0.id) + .await + .unwrap(); + Person::delete(&mut context.pool(), data.1.id) + .await + .unwrap(); + Site::delete(&mut context.pool(), data.2.id).await.unwrap(); } #[tokio::test] @@ -201,7 +214,9 @@ mod tests { let to_apub = pm.into_json(&context).await.unwrap(); assert_json_include!(actual: json, expected: to_apub); - PrivateMessage::delete(context.pool(), pm_id).await.unwrap(); + PrivateMessage::delete(&mut context.pool(), pm_id) + .await + .unwrap(); cleanup(data, &context).await; } @@ -222,7 +237,9 @@ mod tests { assert_eq!(pm.content.len(), 3); assert_eq!(context.request_count(), 0); - PrivateMessage::delete(context.pool(), pm.id).await.unwrap(); + PrivateMessage::delete(&mut context.pool(), pm.id) + .await + .unwrap(); cleanup(data, &context).await; } }