diff --git a/caldav/server.go b/caldav/server.go index 8658f9b..f98d06e 100644 --- a/caldav/server.go +++ b/caldav/server.go @@ -51,17 +51,18 @@ func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { return } - principalPath, err := h.Backend.CurrentUserPrincipal(r.Context()) - if err != nil { - http.Error(w, "caldav: failed to determine current user principal", http.StatusInternalServerError) - return - } - if r.URL.Path == "/.well-known/caldav" { + principalPath, err := h.Backend.CurrentUserPrincipal(r.Context()) + if err != nil { + http.Error(w, "caldav: failed to determine current user principal", http.StatusInternalServerError) + return + } + http.Redirect(w, r, principalPath, http.StatusMovedPermanently) return } + var err error switch r.Method { case "REPORT": err = h.handleReport(w, r) @@ -378,6 +379,7 @@ func (b *backend) propfindUserPrincipal(ctx context.Context, propfind *internal. if err != nil { return nil, err } + props := map[xml.Name]internal.PropfindFunc{ internal.CurrentUserPrincipalName: func(*internal.RawXMLValue) (interface{}, error) { return &internal.CurrentUserPrincipal{Href: internal.Href{Path: principalPath}}, nil @@ -390,13 +392,13 @@ func (b *backend) propfindUserPrincipal(ctx context.Context, propfind *internal. } func (b *backend) propfindCalendar(ctx context.Context, propfind *internal.Propfind, cal *Calendar) (*internal.Response, error) { - principalPath, err := b.Backend.CurrentUserPrincipal(ctx) - if err != nil { - return nil, err - } props := map[xml.Name]internal.PropfindFunc{ internal.CurrentUserPrincipalName: func(*internal.RawXMLValue) (interface{}, error) { - return &internal.CurrentUserPrincipal{Href: internal.Href{Path: principalPath}}, nil + path, err := b.Backend.CurrentUserPrincipal(ctx) + if err != nil { + return nil, err + } + return &internal.CurrentUserPrincipal{Href: internal.Href{Path: path}}, nil }, internal.ResourceTypeName: func(*internal.RawXMLValue) (interface{}, error) { return internal.NewResourceType(internal.CollectionName, calendarName), nil @@ -441,13 +443,13 @@ func (b *backend) propfindCalendar(ctx context.Context, propfind *internal.Propf } func (b *backend) propfindCalendarObject(ctx context.Context, propfind *internal.Propfind, co *CalendarObject) (*internal.Response, error) { - principalPath, err := b.Backend.CurrentUserPrincipal(ctx) - if err != nil { - return nil, err - } props := map[xml.Name]internal.PropfindFunc{ internal.CurrentUserPrincipalName: func(*internal.RawXMLValue) (interface{}, error) { - return &internal.CurrentUserPrincipal{Href: internal.Href{Path: principalPath}}, nil + path, err := b.Backend.CurrentUserPrincipal(ctx) + if err != nil { + return nil, err + } + return &internal.CurrentUserPrincipal{Href: internal.Href{Path: path}}, nil }, internal.GetContentTypeName: func(*internal.RawXMLValue) (interface{}, error) { return &internal.GetContentType{Type: ical.MIMEType}, nil