X-Git-Url: http://these/git/?a=blobdiff_plain;f=crates%2Fapub%2Fsrc%2Fobjects%2Fprivate_message.rs;h=a51cfe6b77c2cad5008a062cc1a424a85ec968ae;hb=3471f3533cb724b2cf6953d563aadfcc9f66c1d2;hp=ae2637c58e9a40aaabe52972e530f0851ed452db;hpb=d7da911a480756dc6607ecce86516205ed81e99c;p=lemmy.git diff --git a/crates/apub/src/objects/private_message.rs b/crates/apub/src/objects/private_message.rs index ae2637c5..a51cfe6b 100644 --- a/crates/apub/src/objects/private_message.rs +++ b/crates/apub/src/objects/private_message.rs @@ -1,6 +1,5 @@ use crate::{ check_apub_id_valid_with_strictness, - fetch_local_site_data, objects::read_from_string_or_source, protocol::{ objects::chat_message::{ChatMessage, ChatMessageType}, @@ -13,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, @@ -22,7 +24,7 @@ use lemmy_db_schema::{ traits::Crud, }; use lemmy_utils::{ - error::LemmyError, + error::{LemmyError, LemmyErrorType}, utils::{markdown::markdown_to_html, time::convert_datetime}, }; use std::ops::Deref; @@ -60,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), ) @@ -74,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, @@ -102,17 +104,10 @@ impl Object for ApubPrivateMessage { verify_domains_match(note.id.inner(), expected_domain)?; verify_domains_match(note.attributed_to.inner(), note.id.inner())?; - let local_site_data = fetch_local_site_data(context.pool()).await?; - - check_apub_id_valid_with_strictness( - note.id.inner(), - false, - &local_site_data, - context.settings(), - )?; + check_apub_id_valid_with_strictness(note.id.inner(), false, context).await?; let person = note.attributed_to.dereference(context).await?; if person.banned { - return Err(LemmyError::from_message("Person is banned from site")); + return Err(LemmyErrorType::PersonIsBannedFromSite)?; } Ok(()) } @@ -124,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), @@ -137,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::{ @@ -182,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] @@ -209,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; } @@ -230,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; } }