X-Git-Url: http://these/git/?a=blobdiff_plain;f=crates%2Fapub%2Fsrc%2Flib.rs;h=d4e34f9e740fd2bb3b444b759ec7e985c9841c93;hb=70fae9d68d65b1e4d153e30d3c065cc315b75eaf;hp=9a45284f22fbf609dfbbdf0196847e685b8cdbf0;hpb=e9e76549a88cfbdab36f00d302cceabcaaa24f4c;p=lemmy.git diff --git a/crates/apub/src/lib.rs b/crates/apub/src/lib.rs index 9a45284f..d4e34f9e 100644 --- a/crates/apub/src/lib.rs +++ b/crates/apub/src/lib.rs @@ -42,7 +42,21 @@ impl UrlVerifier for VerifyUrlData { 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)?; + check_apub_id_valid(url, &local_site_data).map_err(|err| match err { + LemmyError { + error_type: LemmyErrorType::FederationDisabled, + .. + } => "Federation disabled", + LemmyError { + error_type: LemmyErrorType::DomainBlocked(_), + .. + } => "Domain is blocked", + LemmyError { + error_type: LemmyErrorType::DomainNotInAllowList(_), + .. + } => "Domain is not in allowlist", + _ => "Failed validating apub id", + })?; Ok(()) } } @@ -55,7 +69,7 @@ impl UrlVerifier for VerifyUrlData { /// - URL being in the allowlist (if it is active) /// - URL not being in the blocklist (if it is active) #[tracing::instrument(skip(local_site_data))] -fn check_apub_id_valid(apub_id: &Url, local_site_data: &LocalSiteData) -> Result<(), &'static str> { +fn check_apub_id_valid(apub_id: &Url, local_site_data: &LocalSiteData) -> Result<(), LemmyError> { let domain = apub_id.domain().expect("apud id has domain").to_string(); if !local_site_data @@ -64,7 +78,7 @@ fn check_apub_id_valid(apub_id: &Url, local_site_data: &LocalSiteData) -> Result .map(|l| l.federation_enabled) .unwrap_or(true) { - return Err("Federation disabled"); + Err(LemmyErrorType::FederationDisabled)?; } if local_site_data @@ -72,7 +86,7 @@ fn check_apub_id_valid(apub_id: &Url, local_site_data: &LocalSiteData) -> Result .iter() .any(|i| domain.eq(&i.domain)) { - return Err("Domain is blocked"); + Err(LemmyErrorType::DomainBlocked(domain.clone()))?; } // Only check this if there are instances in the allowlist @@ -82,7 +96,7 @@ fn check_apub_id_valid(apub_id: &Url, local_site_data: &LocalSiteData) -> Result .iter() .any(|i| domain.eq(&i.domain)) { - return Err("Domain is not in allowlist"); + Err(LemmyErrorType::DomainNotInAllowList(domain))?; } Ok(()) @@ -142,12 +156,7 @@ pub(crate) async fn check_apub_id_valid_with_strictness( } 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, - "Domain is not in allowlist" => LemmyErrorType::DomainNotInAllowList, - _ => panic!("Could not handle apub error!"), - })?; + check_apub_id_valid(apub_id, &local_site_data)?; // Only check allowlist if this is a community, and there are instances in the allowlist if is_strict && !local_site_data.allowed_instances.is_empty() {