From d6e1854f1bc7ab34915d60256e2fb17bb83723de Mon Sep 17 00:00:00 2001 From: marc Date: Thu, 3 Sep 2026 22:45:24 +0200 Subject: [PATCH] =?UTF-8?q?fix(calendar):=20klare=20Fehlermeldung=20f?= =?UTF-8?q?=C3=BCr=20GET=20auf=20CalDAV-Sammlungen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit go-webdav leitet GET/HEAD auf jeden Pfad unverändert an GetCalendarObject weiter, auch auf Principal- oder Home-Set-Pfade (ein Browser kann nur GET, kein PROPFIND). Ohne Prüfung hielt parseCalendarPath dann z.B. das Wort 'caldav' aus dem Pfad für eine Kalender-ID und gab einen internen UUID-Parsing-Fehler nach außen. Co-Authored-By: Claude Sonnet 5 --- backend/internal/calendar/backend.go | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/backend/internal/calendar/backend.go b/backend/internal/calendar/backend.go index 1b57330..abdcda2 100644 --- a/backend/internal/calendar/backend.go +++ b/backend/internal/calendar/backend.go @@ -96,7 +96,17 @@ func objectPath(username string, id uuid.UUID, uid string) string { // angemeldeten Nutzer geprüft – Phase 1 kennt ohnehin nur den eigenen Pfad, // spätere Freigaben ändern das gezielt in resolveCalendar. func parseCalendarPath(p string) (calID uuid.UUID, rest string, err error) { - parts := strings.SplitN(strings.TrimPrefix(p, davPrefix+"/calendars/"), "/", 3) + // Kommt vor: ein Browser macht GET auf eine Sammlung (Principal, + // Home-Set) statt PROPFIND – go-webdav reicht das trotzdem unverändert + // an GetCalendarObject durch, siehe backend.go-Kommentar zum Pfadschema. + // Ohne diese Prüfung würde z. B. "/caldav/principals-max/" das Wort + // "caldav" für eine Kalender-ID halten und einen kryptischen + // UUID-Parsing-Fehler nach außen geben. + const calPrefix = davPrefix + "/calendars/" + if !strings.HasPrefix(p, calPrefix) { + return uuid.UUID{}, "", fmt.Errorf("calendar: not a calendar path: %q", p) + } + parts := strings.SplitN(strings.TrimPrefix(p, calPrefix), "/", 3) if len(parts) < 2 || parts[1] == "" { return uuid.UUID{}, "", fmt.Errorf("calendar: malformed path %q", p) }