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(())
}
}
/// - 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
.map(|l| l.federation_enabled)
.unwrap_or(true)
{
- return Err("Federation disabled");
+ return Err(LemmyErrorType::FederationDisabled)?;
}
if local_site_data
.iter()
.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
.iter()
.any(|i| domain.eq(&i.domain))
{
- return Err("Domain is not in allowlist");
+ return Err(LemmyErrorType::DomainNotInAllowList(domain))?;
}
Ok(())
}
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() {