diff --git a/crates/dav/src/principal/propfind.rs b/crates/dav/src/principal/propfind.rs index 60676dfe..ef5eba65 100644 --- a/crates/dav/src/principal/propfind.rs +++ b/crates/dav/src/principal/propfind.rs @@ -10,7 +10,8 @@ use common::{Server, auth::AccessToken}; use dav_proto::schema::{ Namespace, property::{ - DavProperty, PrincipalProperty, Privilege, ReportSet, ResourceType, WebDavProperty, + DavProperty, DavValue, PrincipalProperty, Privilege, ReportSet, ResourceType, + WebDavProperty, }, request::{DavPropertyValue, PropFind}, response::{Href, MultiStatus, PropStat, Response}, @@ -193,6 +194,18 @@ impl PrincipalPropFind for Server { fields.push(DavPropertyValue::new(property.clone(), sync_token)); } + WebDavProperty::GetCTag if !is_principal => { + let ctag = self + .fetch_dav_resources(access_token, account_id, collection.into()) + .await + .caused_by(trc::location!())? + .highest_change_id; + + fields.push(DavPropertyValue::new( + property.clone(), + DavValue::String(format!("\"{ctag}\"")), + )); + } WebDavProperty::Owner => { fields.push(DavPropertyValue::new( property.clone(),