diff --git a/src/error.rs b/src/error.rs index a13f8c5..1866e48 100644 --- a/src/error.rs +++ b/src/error.rs @@ -78,9 +78,6 @@ pub enum Error { /// Attempted to fetch object but the response's id field doesn't match #[error("Attempted to fetch object from {0} but the response's id field doesn't match")] FetchWrongId(Url), - /// Object which has local domain cannot be fetched over HTTP - #[error("Object which has local domain cannot be fetched over HTTP")] - CannotDereferenceLocalObject, /// Other generic errors #[error("{0}")] Other(String), diff --git a/src/fetch/object_id.rs b/src/fetch/object_id.rs index f71b03f..10be714 100644 --- a/src/fetch/object_id.rs +++ b/src/fetch/object_id.rs @@ -158,10 +158,6 @@ where where ::Error: From, { - if self.is_local(data) { - return Err(Error::CannotDereferenceLocalObject.into()); - } - let res = Box::pin(fetch_object_http(&self.0, data)).await; if let Err(Error::ObjectDeleted(url)) = res { @@ -174,8 +170,12 @@ where let res = res?; let redirect_url = &res.url; - if data.config.is_local_url(&redirect_url) { - return Err(Error::CannotDereferenceLocalObject.into()); + // Prevent overwriting local object + if data.config.is_local_url(redirect_url) { + return self + .dereference_from_db(data) + .await? + .ok_or(Error::NotFound.into()); } Box::pin(Kind::verify(&res.object, redirect_url, data)).await?;