detailed error message for blocked domains (#3698) (#3701)

* detailed error message for blocked domains (#3698)

* Pass the domain as an error param

Not formatting the error message to support i18n

---------

Co-authored-by: Freek van Zee <freek.van.zee@mediamonks.com>
This commit is contained in:
Freakazoid182 2023-07-25 19:26:54 +02:00 committed by GitHub
parent 95e758e707
commit 9a1f9aad45
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 22 additions and 13 deletions

View file

@ -42,7 +42,21 @@ impl UrlVerifier for VerifyUrlData {
let local_site_data = local_site_data_cached(&mut (&self.0).into()) let local_site_data = local_site_data_cached(&mut (&self.0).into())
.await .await
.expect("read local site data"); .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(()) Ok(())
} }
} }
@ -55,7 +69,7 @@ impl UrlVerifier for VerifyUrlData {
/// - URL being in the allowlist (if it is active) /// - URL being in the allowlist (if it is active)
/// - URL not being in the blocklist (if it is active) /// - URL not being in the blocklist (if it is active)
#[tracing::instrument(skip(local_site_data))] #[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(); let domain = apub_id.domain().expect("apud id has domain").to_string();
if !local_site_data 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) .map(|l| l.federation_enabled)
.unwrap_or(true) .unwrap_or(true)
{ {
return Err("Federation disabled"); return Err(LemmyErrorType::FederationDisabled)?;
} }
if local_site_data if local_site_data
@ -72,7 +86,7 @@ fn check_apub_id_valid(apub_id: &Url, local_site_data: &LocalSiteData) -> Result
.iter() .iter()
.any(|i| domain.eq(&i.domain)) .any(|i| domain.eq(&i.domain))
{ {
return Err("Domain is blocked"); return Err(LemmyErrorType::DomainBlocked(domain))?;
} }
// Only check this if there are instances in the allowlist // 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() .iter()
.any(|i| domain.eq(&i.domain)) .any(|i| domain.eq(&i.domain))
{ {
return Err("Domain is not in allowlist"); return Err(LemmyErrorType::DomainNotInAllowList(domain))?;
} }
Ok(()) 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?; 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 { check_apub_id_valid(apub_id, &local_site_data)?;
"Federation disabled" => LemmyErrorType::FederationDisabled,
"Domain is blocked" => LemmyErrorType::DomainBlocked,
"Domain is not in allowlist" => LemmyErrorType::DomainNotInAllowList,
_ => panic!("Could not handle apub error!"),
})?;
// Only check allowlist if this is a community, and there are instances in the allowlist // 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() { if is_strict && !local_site_data.allowed_instances.is_empty() {

View file

@ -195,8 +195,8 @@ pub enum LemmyErrorType {
CouldntFindObject, CouldntFindObject,
RegistrationDenied(String), RegistrationDenied(String),
FederationDisabled, FederationDisabled,
DomainBlocked, DomainBlocked(String),
DomainNotInAllowList, DomainNotInAllowList(String),
FederationDisabledByStrictAllowList, FederationDisabledByStrictAllowList,
SiteNameRequired, SiteNameRequired,
SiteNameLengthOverflow, SiteNameLengthOverflow,