* 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:
parent
95e758e707
commit
9a1f9aad45
2 changed files with 22 additions and 13 deletions
|
@ -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() {
|
||||||
|
|
|
@ -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,
|
||||||
|
|
Loading…
Reference in a new issue