diff --git a/crates/caldav/src/calendar/service.rs b/crates/caldav/src/calendar/service.rs index 65e6194..55312f7 100644 --- a/crates/caldav/src/calendar/service.rs +++ b/crates/caldav/src/calendar/service.rs @@ -56,10 +56,11 @@ impl ResourceService for CalendarResourc async fn get_resource( &self, (principal, cal_id): &Self::PathComponents, + show_deleted: bool, ) -> Result { let calendar = self .cal_store - .get_calendar(principal, cal_id, false) + .get_calendar(principal, cal_id, show_deleted) .await?; Ok(CalendarResource { cal: calendar, diff --git a/crates/caldav/src/calendar_object/service.rs b/crates/caldav/src/calendar_object/service.rs index 899ff88..11625ba 100644 --- a/crates/caldav/src/calendar_object/service.rs +++ b/crates/caldav/src/calendar_object/service.rs @@ -58,10 +58,11 @@ impl ResourceService for CalendarObjectResourceService { calendar_id, object_id, }: &Self::PathComponents, + show_deleted: bool, ) -> Result { let object = self .cal_store - .get_object(principal, calendar_id, object_id, false) + .get_object(principal, calendar_id, object_id, show_deleted) .await?; Ok(CalendarObjectResource { object, diff --git a/crates/caldav/src/principal/service.rs b/crates/caldav/src/principal/service.rs index e1f198d..f938ffb 100644 --- a/crates/caldav/src/principal/service.rs +++ b/crates/caldav/src/principal/service.rs @@ -48,6 +48,7 @@ impl Resour async fn get_resource( &self, (principal,): &Self::PathComponents, + _show_deleted: bool, ) -> Result { let user = self .auth_provider diff --git a/crates/carddav/src/address_object/service.rs b/crates/carddav/src/address_object/service.rs index 1d38df5..e23725b 100644 --- a/crates/carddav/src/address_object/service.rs +++ b/crates/carddav/src/address_object/service.rs @@ -49,10 +49,11 @@ impl ResourceService for AddressObjectResourceService addressbook_id, object_id, }: &Self::PathComponents, + show_deleted: bool, ) -> Result { let object = self .addr_store - .get_object(principal, addressbook_id, object_id, false) + .get_object(principal, addressbook_id, object_id, show_deleted) .await?; Ok(AddressObjectResource { object, diff --git a/crates/carddav/src/addressbook/service.rs b/crates/carddav/src/addressbook/service.rs index d1d9d89..9d6588d 100644 --- a/crates/carddav/src/addressbook/service.rs +++ b/crates/carddav/src/addressbook/service.rs @@ -59,10 +59,11 @@ impl ResourceService async fn get_resource( &self, (principal, addressbook_id): &Self::PathComponents, + show_deleted: bool, ) -> Result { let addressbook = self .addr_store - .get_addressbook(principal, addressbook_id, false) + .get_addressbook(principal, addressbook_id, show_deleted) .await .map_err(|_e| Error::NotFound)?; Ok(addressbook.into()) diff --git a/crates/carddav/src/principal/service.rs b/crates/carddav/src/principal/service.rs index 6be078e..18f734f 100644 --- a/crates/carddav/src/principal/service.rs +++ b/crates/carddav/src/principal/service.rs @@ -59,6 +59,7 @@ impl Reso async fn get_resource( &self, (principal,): &Self::PathComponents, + _show_deleted: bool, ) -> Result { let user = self .auth_provider diff --git a/crates/dav/src/resource/methods/delete.rs b/crates/dav/src/resource/methods/delete.rs index 6e21464..8279ab4 100644 --- a/crates/dav/src/resource/methods/delete.rs +++ b/crates/dav/src/resource/methods/delete.rs @@ -45,7 +45,7 @@ pub async fn route_delete( if_match: Option, if_none_match: Option, ) -> Result<(), R::Error> { - let resource = resource_service.get_resource(path_components).await?; + let resource = resource_service.get_resource(path_components, true).await?; // Kind of a bodge since we don't get unbind from the parent let privileges = resource.get_user_privileges(principal)?; diff --git a/crates/dav/src/resource/methods/propfind.rs b/crates/dav/src/resource/methods/propfind.rs index 4f10719..c91b11e 100644 --- a/crates/dav/src/resource/methods/propfind.rs +++ b/crates/dav/src/resource/methods/propfind.rs @@ -49,7 +49,9 @@ pub(crate) async fn route_propfind( resource_service: &R, puri: &impl PrincipalUri, ) -> Result, R::Error> { - let resource = resource_service.get_resource(path_components).await?; + let resource = resource_service + .get_resource(path_components, false) + .await?; let privileges = resource.get_user_privileges(principal)?; if !privileges.has(&UserPrivilege::Read) { return Err(Error::Unauthorized.into()); diff --git a/crates/dav/src/resource/methods/proppatch.rs b/crates/dav/src/resource/methods/proppatch.rs index d06ab26..b837160 100644 --- a/crates/dav/src/resource/methods/proppatch.rs +++ b/crates/dav/src/resource/methods/proppatch.rs @@ -85,7 +85,9 @@ pub(crate) async fn route_proppatch( operations, ) = XmlDocument::parse_str(body).map_err(Error::XmlError)?; - let mut resource = resource_service.get_resource(path_components).await?; + let mut resource = resource_service + .get_resource(path_components, false) + .await?; let privileges = resource.get_user_privileges(principal)?; if !privileges.has(&UserPrivilege::Write) { return Err(Error::Unauthorized.into()); diff --git a/crates/dav/src/resource/resource_service.rs b/crates/dav/src/resource/resource_service.rs index a87ccb1..837ad46 100644 --- a/crates/dav/src/resource/resource_service.rs +++ b/crates/dav/src/resource/resource_service.rs @@ -34,7 +34,8 @@ pub trait ResourceService: Clone + Sized + Send + Sync + AxumMethods + 'static { async fn get_resource( &self, - _path: &Self::PathComponents, + path: &Self::PathComponents, + show_deleted: bool, ) -> Result; async fn save_resource( diff --git a/crates/dav/src/resources/root.rs b/crates/dav/src/resources/root.rs index 40b8aa8..0976ec3 100644 --- a/crates/dav/src/resources/root.rs +++ b/crates/dav/src/resources/root.rs @@ -86,7 +86,11 @@ where const DAV_HEADER: &str = "1, 3, access-control"; - async fn get_resource(&self, _: &()) -> Result { + async fn get_resource( + &self, + _: &(), + _show_deleted: bool, + ) -> Result { Ok(RootResource::::default()) }