From e20bdb71afe24d1de350f20651bc2efbe1d3db43 Mon Sep 17 00:00:00 2001 From: mdecimus Date: Tue, 26 Aug 2025 12:01:21 +0200 Subject: [PATCH] WebDAV: Do not return shared calendars in home-set responses (#1796) --- crates/dav/src/common/propfind.rs | 2 ++ crates/dav/src/principal/propfind.rs | 18 +++++++++++++----- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/crates/dav/src/common/propfind.rs b/crates/dav/src/common/propfind.rs index 5e15dcfb..1159551d 100644 --- a/crates/dav/src/common/propfind.rs +++ b/crates/dav/src/common/propfind.rs @@ -1745,6 +1745,7 @@ async fn add_base_collection_response( &access_token.name, access_token.primary_id, true, + false, ) .await .caused_by(trc::location!())?; @@ -1759,6 +1760,7 @@ async fn add_base_collection_response( &access_token.name, access_token.primary_id, false, + false, ) .await .caused_by(trc::location!())?; diff --git a/crates/dav/src/principal/propfind.rs b/crates/dav/src/principal/propfind.rs index 5ba9becb..a3bc1f52 100644 --- a/crates/dav/src/principal/propfind.rs +++ b/crates/dav/src/principal/propfind.rs @@ -268,10 +268,16 @@ impl PrincipalPropFind for Server { )); } PrincipalProperty::CalendarHomeSet => { - let hrefs = - build_home_set(self, access_token, name.as_ref(), account_id, true) - .await - .caused_by(trc::location!())?; + let hrefs = build_home_set( + self, + access_token, + name.as_ref(), + account_id, + true, + false, + ) + .await + .caused_by(trc::location!())?; fields.push(DavPropertyValue::new(property.clone(), hrefs)); response.set_namespace(Namespace::CalDav); @@ -283,6 +289,7 @@ impl PrincipalPropFind for Server { name.as_ref(), account_id, false, + false, ) .await .caused_by(trc::location!())?; @@ -412,6 +419,7 @@ pub(crate) async fn build_home_set( name: &str, account_id: u32, is_calendar: bool, + include_sharings: bool, ) -> trc::Result> { let (collection, resource_name) = if is_calendar { (Collection::Calendar, DavResourceName::Cal) @@ -426,7 +434,7 @@ pub(crate) async fn build_home_set( percent_encoding::utf8_percent_encode(name, RFC_3986), ))); - if account_id == access_token.primary_id() { + if include_sharings && account_id == access_token.primary_id() { for account_id in access_token.all_ids_by_collection(collection) { if account_id != access_token.primary_id() { let other_name = server