fix: Separate CalDAV/CardDAV Home-Sets + UI-URLs ohne /dav/

Kalender und Adressbuecher teilten sich den gleichen Home-Set
(/dav/<user>/). DAVx5 hat bei Depth-1-PROPFIND beide Collection-
Typen angezeigt und mangels bekanntem Resourcetype als
"DEFAULT_TASK_CALENDAR_NAME"-Kacheln gelistet.

Loesung:
* calendar-home-set zeigt auf /dav/<user>/calendars/
* addressbook-home-set zeigt auf /dav/<user>/addressbooks/
* Beide Pfade sind eigene Container-Collections - PROPFIND Depth 1
  liefert nur den jeweils passenden Typ
* /dav/<user>/ selbst gibt bei Depth 1 keine Kinder mehr zurueck,
  Clients folgen den Home-Sets
* Die konkreten URLs cal-<id> / ab-<id> liegen weiterhin unter
  /dav/<user>/ (keine Breaking Change fuer existierende Clients;
  nur die Discovery-URL aendert sich)

Frontend:
CalendarView + ContactsView zeigen als Auto-Discovery-URL nur
noch den Hostname - PROPFIND auf / funktioniert ja jetzt. Die
Direkt-URL bleibt vollstaendig mit /dav/<user>/cal-<id> bzw.
ab-<id> fuer Clients die das brauchen.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Stefan Hacker
2026-04-12 15:22:29 +02:00
parent 9c102823e4
commit 24a6015841
3 changed files with 53 additions and 18 deletions
+5 -5
View File
@@ -223,9 +223,9 @@
und Passwort sind deine normalen Mini-Cloud-Zugangsdaten.
</p>
<div class="url-row">
<strong>Auto-Discovery</strong>
<code>{{ origin }}/dav/</code>
<Button icon="pi pi-copy" text size="small" title="Kopieren" @click="copyText(origin + '/dav/')" />
<strong>Server (Auto-Discovery)</strong>
<code>{{ origin }}</code>
<Button icon="pi pi-copy" text size="small" title="Kopieren" @click="copyText(origin)" />
</div>
<div class="url-row">
<strong>Dieser Kalender (direkt)</strong>
@@ -234,8 +234,8 @@
@click="copyText(`${origin}/dav/${username}/cal-${selectedCal.id}/`)" />
</div>
<div class="caldav-clients">
<div><strong>Thunderbird / DAVx5 / Apple</strong>: Auto-Discovery-URL benutzen</div>
<div><strong>Outlook (CalDAV-Synchronizer)</strong>: Direkt-URL</div>
<div><strong>Thunderbird / DAVx5 / Apple</strong>: Server-URL reicht</div>
<div><strong>Outlook (CalDAV-Synchronizer)</strong>: Direkt-URL des Kalenders</div>
</div>
</div>
+7 -4
View File
@@ -129,16 +129,19 @@
<div class="field carddav-block">
<label><i class="pi pi-info-circle"></i> CardDAV-Zugang</label>
<div class="url-row">
<strong>Auto-Discovery</strong>
<code>{{ origin }}/dav/</code>
<Button icon="pi pi-copy" text size="small" @click="copyText(origin + '/dav/')" />
<strong>Server (Auto-Discovery)</strong>
<code>{{ origin }}</code>
<Button icon="pi pi-copy" text size="small" @click="copyText(origin)" />
</div>
<div class="url-row">
<strong>Dieses Adressbuch</strong>
<strong>Dieses Adressbuch (direkt)</strong>
<code>{{ origin }}/dav/{{ username }}/ab-{{ menuBook.id }}/</code>
<Button icon="pi pi-copy" text size="small"
@click="copyText(`${origin}/dav/${username}/ab-${menuBook.id}/`)" />
</div>
<div class="caldav-hint">
Bei DAVx5/Apple/Thunderbird reicht die Auto-Discovery-URL. Benutzername + Passwort wie im Web.
</div>
</div>
<Button v-if="menuBook.permission === 'owner'" label="Adressbuch löschen"