X-Git-Url: http://these/git/?a=blobdiff_plain;f=crates%2Fapub%2Fsrc%2Fobjects%2Fpost.rs;h=48b573d30ab0dfdfd58398cdd2159ce7ee266a85;hb=92568956353f21649ed9aff68b42699c9d036f30;hp=7878fcf12215a22242021a7e1e658a1d28e7e18e;hpb=810762762fedcf4f20c571c263603aa7753234df;p=lemmy.git diff --git a/crates/apub/src/objects/post.rs b/crates/apub/src/objects/post.rs index 7878fcf1..48b573d3 100644 --- a/crates/apub/src/objects/post.rs +++ b/crates/apub/src/objects/post.rs @@ -1,7 +1,7 @@ use crate::{ activities::{verify_is_public, verify_person_in_community}, check_apub_id_valid_with_strictness, - fetch_local_site_data, + local_site_data_cached, objects::{read_from_string_or_source_opt, verify_is_remote_object}, protocol::{ objects::{ @@ -44,6 +44,7 @@ use lemmy_utils::{ markdown::markdown_to_html, slurs::{check_slurs_opt, remove_slurs}, time::convert_datetime, + validation::check_url_scheme, }, }; use std::ops::Deref; @@ -83,7 +84,7 @@ impl Object for ApubPost { context: &Data, ) -> Result, LemmyError> { Ok( - Post::read_from_apub_id(context.pool(), object_id) + Post::read_from_apub_id(&mut context.pool(), object_id) .await? .map(Into::into), ) @@ -93,7 +94,7 @@ impl Object for ApubPost { async fn delete(self, context: &Data) -> Result<(), LemmyError> { if !self.deleted { let form = PostUpdateForm::builder().deleted(Some(true)).build(); - Post::update(context.pool(), self.id, &form).await?; + Post::update(&mut context.pool(), self.id, &form).await?; } Ok(()) } @@ -102,10 +103,10 @@ impl Object for ApubPost { #[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 community_id = self.community_id; - let community = Community::read(context.pool(), community_id).await?; - let language = LanguageTag::new_single(self.language_id, context.pool()).await?; + let community = Community::read(&mut context.pool(), community_id).await?; + let language = LanguageTag::new_single(self.language_id, &mut context.pool()).await?; let page = Page { kind: PageType::Page, @@ -143,17 +144,11 @@ impl Object for ApubPost { verify_is_remote_object(page.id.inner(), context.settings())?; }; - let local_site_data = fetch_local_site_data(context.pool()).await?; - let community = page.community(context).await?; - check_apub_id_valid_with_strictness( - page.id.inner(), - community.local, - &local_site_data, - context.settings(), - )?; + check_apub_id_valid_with_strictness(page.id.inner(), community.local, context).await?; verify_person_in_community(&page.creator()?, &community, context).await?; + let local_site_data = local_site_data_cached(&mut context.pool()).await?; let slur_regex = &local_site_opt_to_slur_regex(&local_site_data.local_site); check_slurs_opt(&page.name, slur_regex)?; @@ -167,7 +162,7 @@ impl Object for ApubPost { let creator = page.creator()?.dereference(context).await?; let community = page.community(context).await?; if community.posting_restricted_to_mods { - is_mod_or_admin(context.pool(), creator.id, community.id).await?; + is_mod_or_admin(&mut context.pool(), creator.id, community.id).await?; } let mut name = page .name @@ -197,8 +192,9 @@ impl Object for ApubPost { } else { None }; + check_url_scheme(&url)?; - let local_site = LocalSite::read(context.pool()).await.ok(); + let local_site = LocalSite::read(&mut context.pool()).await.ok(); let allow_sensitive = local_site_opt_to_sensitive(&local_site); let page_is_sensitive = page.sensitive.unwrap_or(false); let include_image = allow_sensitive || !page_is_sensitive; @@ -229,7 +225,8 @@ impl Object for ApubPost { let body_slurs_removed = read_from_string_or_source_opt(&page.content, &page.media_type, &page.source) .map(|s| remove_slurs(&s, slur_regex)); - let language_id = LanguageTag::to_language_id_single(page.language, context.pool()).await?; + let language_id = + LanguageTag::to_language_id_single(page.language, &mut context.pool()).await?; PostInsertForm { name, @@ -265,7 +262,7 @@ impl Object for ApubPost { .build() }; - let post = Post::create(context.pool(), &form).await?; + let post = Post::create(&mut context.pool(), &form).await?; // write mod log entry for lock if Page::is_locked_changed(&old_post, &page.comments_enabled) { @@ -274,7 +271,7 @@ impl Object for ApubPost { post_id: post.id, locked: Some(post.locked), }; - ModLockPost::create(context.pool(), &form).await?; + ModLockPost::create(&mut context.pool(), &form).await?; } Ok(post.into()) @@ -283,6 +280,9 @@ impl Object for ApubPost { #[cfg(test)] mod tests { + #![allow(clippy::unwrap_used)] + #![allow(clippy::indexing_slicing)] + use super::*; use crate::{ objects::{ @@ -316,11 +316,13 @@ mod tests { assert!(!post.featured_community); assert_eq!(context.request_count(), 0); - Post::delete(context.pool(), post.id).await.unwrap(); - Person::delete(context.pool(), person.id).await.unwrap(); - Community::delete(context.pool(), community.id) + Post::delete(&mut context.pool(), post.id).await.unwrap(); + Person::delete(&mut context.pool(), person.id) + .await + .unwrap(); + Community::delete(&mut context.pool(), community.id) .await .unwrap(); - Site::delete(context.pool(), site.id).await.unwrap(); + Site::delete(&mut context.pool(), site.id).await.unwrap(); } }