X-Git-Url: http://these/git/?a=blobdiff_plain;f=crates%2Fapub%2Fsrc%2Flib.rs;h=8d818602262eb031971edd65649f1ac1f9dc7804;hb=1d38aad9d3d51ef606074d5b49a8030c49dd0e9e;hp=f7ef22eece91375f1e06d24027578a2805ba16c0;hpb=73492af4b09448684ffde3d55454434ec3ed490b;p=lemmy.git diff --git a/crates/apub/src/lib.rs b/crates/apub/src/lib.rs index f7ef22ee..8d818602 100644 --- a/crates/apub/src/lib.rs +++ b/crates/apub/src/lib.rs @@ -1,7 +1,6 @@ use crate::fetcher::post_or_comment::PostOrComment; use activitypub_federation::config::{Data, UrlVerifier}; use async_trait::async_trait; -use futures::future::join3; use lemmy_api_common::context::LemmyContext; use lemmy_db_schema::{ source::{ @@ -10,7 +9,7 @@ use lemmy_db_schema::{ local_site::LocalSite, }, traits::Crud, - utils::DbPool, + utils::{ActualDbPool, DbPool}, }; use lemmy_utils::error::{LemmyError, LemmyErrorType, LemmyResult}; use moka::future::Cache; @@ -41,12 +40,12 @@ static CONTEXT: Lazy> = Lazy::new(|| { }); #[derive(Clone)] -pub struct VerifyUrlData(pub DbPool); +pub struct VerifyUrlData(pub ActualDbPool); #[async_trait] impl UrlVerifier for VerifyUrlData { async fn verify(&self, url: &Url) -> Result<(), &'static str> { - let local_site_data = local_site_data_cached(&self.0) + let local_site_data = local_site_data_cached(&mut (&self.0).into()) .await .expect("read local site data"); check_apub_id_valid(url, &local_site_data)?; @@ -102,7 +101,9 @@ pub(crate) struct LocalSiteData { blocked_instances: Vec, } -pub(crate) async fn local_site_data_cached(pool: &DbPool) -> LemmyResult> { +pub(crate) async fn local_site_data_cached( + pool: &mut DbPool<'_>, +) -> LemmyResult> { static CACHE: Lazy>> = Lazy::new(|| { Cache::builder() .max_capacity(1) @@ -112,18 +113,20 @@ pub(crate) async fn local_site_data_cached(pool: &DbPool) -> LemmyResult ( + // LocalSite may be missing + |pool| async { + Ok(LocalSite::read(pool).await.ok()) + }, + Instance::allowlist, + Instance::blocklist + ))?; Ok::<_, diesel::result::Error>(Arc::new(LocalSiteData { - // LocalSite may be missing - local_site: local_site.ok(), - allowed_instances: allowed_instances?, - blocked_instances: blocked_instances?, + local_site, + allowed_instances, + blocked_instances, })) }) .await?, @@ -144,7 +147,7 @@ pub(crate) async fn check_apub_id_valid_with_strictness( return Ok(()); } - let local_site_data = local_site_data_cached(context.pool()).await?; + let local_site_data = local_site_data_cached(&mut context.pool()).await?; check_apub_id_valid(apub_id, &local_site_data).map_err(|err| match err { "Federation disabled" => LemmyErrorType::FederationDisabled, "Domain is blocked" => LemmyErrorType::DomainBlocked, @@ -198,7 +201,7 @@ where sensitive: Some(sensitive), updated: None, }; - Activity::create(data.pool(), &form).await?; + Activity::create(&mut data.pool(), &form).await?; Ok(()) }