fix(dav): Principal-Depth-1 liefert keine Sub-Container mehr

Die zuletzt eingefuehrten Sub-Container (calendars/, addressbooks/) bei
PROPFIND Depth 1 auf /dav/<user>/ wurden von DAVx5 als leere Kalender
gezaehlt (DEFAULT_TASK_CALENDAR_NAME-Phantom-Eintraege). Da die CardDAV-
Route jetzt korrekt an den Home-Set-Handler delegiert, reicht es wenn der
Principal nur sich selbst liefert - Clients folgen den Home-Sets.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Stefan Hacker 2026-04-13 03:32:22 +02:00
parent 0ef480858e
commit 8772e02410
1 changed files with 3 additions and 14 deletions

View File

@ -269,24 +269,13 @@ def propfind(subpath=''):
multistatus.append(_principal_response(user))
return _xml_response(multistatus)
# /dav/<username>/ : principal itself + the two sub-containers as
# collection children (calendars/ and addressbooks/). The actual
# calendar/addressbook lists live under those home-sets.
# /dav/<username>/ : nur der Principal. Clients MUESSEN den Home-Sets
# (calendar-home-set / addressbook-home-set) folgen - sonst wuerden die
# Container hier faelschlich als leere Kalender angezeigt (DAVx5).
if len(parts) == 1:
if parts[0] != user.username:
return Response('', 403)
multistatus.append(_principal_response(user))
if depth != '0':
for (sub, dn) in (('calendars', 'Kalender'), ('addressbooks', 'Adressbücher')):
container = ET.Element(_qn('d', 'response'))
ET.SubElement(container, _qn('d', 'href')).text = f'/dav/{user.username}/{sub}/'
propstat = ET.SubElement(container, _qn('d', 'propstat'))
prop = ET.SubElement(propstat, _qn('d', 'prop'))
rt = ET.SubElement(prop, _qn('d', 'resourcetype'))
ET.SubElement(rt, _qn('d', 'collection'))
ET.SubElement(prop, _qn('d', 'displayname')).text = dn
ET.SubElement(propstat, _qn('d', 'status')).text = 'HTTP/1.1 200 OK'
multistatus.append(container)
return _xml_response(multistatus)
# /dav/<username>/calendars/ : only calendar collections