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:
1 parent
87788817f8
commit
d6e1854f1b
1 file changed
+11
-1
@@ -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)
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user