fix(calendar): klare Fehlermeldung für GET auf CalDAV-Sammlungen

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 <noreply@anthropic.com>
This commit is contained in:
marcandClaude Sonnet 5 committed 2026-09-03 22:45:24 +02:00
1 parent 87788817f8
commit d6e1854f1b
1 file changed
+11 -1
+11 -1
View File
@@ -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)
}