feat(calendar): Kalender anlegen, umbenennen, loeschen -- vom Client aus
Bisher konnte ein CalDAV-Client Termine verwalten, aber keine Kalender:
MKCALENDAR -> 405 anlegen
PROPPATCH -> 501 umbenennen, umfaerben
DELETE -> 404 loeschen
go-webdav deckt davon nur MKCOL ab, und selbst da verwarf unser Backend
die vom Client gewaehlte Adresse. Alle drei Verben faengt der Handler
jetzt vorher ab (collections.go).
Der Kern steckt aber nicht in den Verben, sondern in der Adresse: Bei
MKCALENDAR sucht *der Client* aus, wo der Kalender liegen soll
("…/calendars/max/arbeit/"). Unsere Kalender lagen bisher zwingend unter
ihrer UUID -- der Client haette angelegt und auf seine eigene Adresse
sofort ein 404 bekommen.
Deshalb Migration 23 mit einer Spalte path_segment: gesetzt = die
gewaehlte Adresse, NULL = es gilt weiterhin die UUID. Bestehende
Kalender bleiben damit unter genau der Adresse erreichbar, unter der die
eingerichteten Geraete sie kennen -- ein Wechsel haette jedes Telefon
dazu gebracht, seine Termine fuer geloescht zu halten. Aufgeloest wird
beides in einer Abfrage (GetCalendarByRef), die gewaehlte Adresse hat
Vorrang.
PROPPATCH antwortet mit einem Status je Eigenschaft, auch wenn alles
geklappt hat: Es kann teilweise gelingen, und ein nacktes 200
verschwiege, welcher Teil angekommen ist. Was wir nicht aendern koennen,
bekommt 403 statt stillem Schlucken -- ein Client, der seine Aenderung
fuer angekommen haelt, ist schlimmer dran als einer mit klarer Absage.
Ebenso eine unlesbare Farbe: absagen statt raten.
DELETE auf eine Sammlung loescht den Kalender mitsamt allen Terminen --
das ist in WebDAV seine Bedeutung.
CalDAV-Selbsttest von 45 auf 62 Pruefungen: anlegen, unter der
gewaehlten Adresse erreichbar, Farbe aus dem MKCALENDAR uebernommen,
Termin darin ablegen und abrufen, zweites Anlegen auf dieselbe Adresse
405, umbenennen und umfaerben mit Status je Eigenschaft, loeschen, danach
404 -- und dasselbe noch einmal ueber MKCOL, das Verb, das DAVx5 nimmt.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
820ffdde6a
commit
f71ab710e1
13 files changed
+551
-53
No files matched your search
+18
-2
@@ -41,7 +41,7 @@ anderen.
|
||||
|
||||
python3 scripts/caldav-selbsttest.py
|
||||
|
||||
45 Prüfungen: Anmeldung (falsches Passwort und **Kontopasswort** werden
|
||||
62 Prüfungen: Anmeldung (falsches Passwort und **Kontopasswort** werden
|
||||
abgewiesen – für CalDAV gelten nur App-Passwörter), Auffinden über
|
||||
`.well-known/caldav` samt der Umleitung, der Clients mit GET folgen,
|
||||
Kalenderliste mit Anzeigename, Komponenten, `getctag` und
|
||||
@@ -50,12 +50,28 @@ muss 412 geben), `calendar-query` mit Zeitfenster und `calendar-multiget`,
|
||||
beide Richtungen zwischen Web und CalDAV (Ganztagstermin als reines Datum
|
||||
mit exklusivem DTEND, Terminfarbe als CSS3-Name, RRULE, EXDATE), das
|
||||
Umhängen aus Client-Sicht (Datei verschwindet in der Quelle, taucht im Ziel
|
||||
auf, UID bleibt) und dass ein fremder Benutzerpfad 404 gibt statt eines
|
||||
auf, UID bleibt), Kalender vom Client aus verwalten (MKCALENDAR und der
|
||||
erweiterte MKCOL, PROPPATCH zum Umbenennen und Umfärben, DELETE der
|
||||
ganzen Sammlung) und dass ein fremder Benutzerpfad 404 gibt statt eines
|
||||
leeren 207.
|
||||
|
||||
Legt sich ein eigenes App-Passwort und zwei eigene Kalender an und räumt
|
||||
beides am Ende weg; vorhandene Kalender werden nur gelesen.
|
||||
|
||||
### Kalender verwalten: Adresse wählt der Client
|
||||
|
||||
Bei MKCALENDAR sucht **der Client** die Adresse aus (`…/calendars/max/arbeit/`).
|
||||
Deshalb hat `cal_calendars` seit Migration 23 eine Spalte `path_segment`:
|
||||
gesetzt = die gewählte Adresse, leer = es gilt weiterhin die UUID. Alle vor
|
||||
der Migration angelegten Kalender bleiben damit unter genau der Adresse
|
||||
erreichbar, unter der eingerichtete Geräte sie schon kennen – das ist der
|
||||
Punkt, den ein Test hier zuerst prüfen sollte.
|
||||
|
||||
`go-webdav` kann davon nur MKCOL. MKCALENDAR kennt es nicht (405), PROPPATCH
|
||||
beantwortet es mit 501, und ein DELETE auf einen Kalender reicht es an das
|
||||
Löschen eines *Termins* weiter, was im 404 endet. Alle drei fängt Aether
|
||||
deshalb vorher ab (`backend/internal/calendar/collections.go`).
|
||||
|
||||
### Zwei Eigenschaften kommen nicht aus der Bibliothek
|
||||
|
||||
`go-webdav` v0.7.0 beantwortet in PROPFIND einen festen Satz Eigenschaften
|
||||
|
||||
Reference in new issue
Block a user