caldav: add support for getcontentlength property

Allow the backend to provide a value for the `getcontentlength` property
as described in [RFC 2518 section 13.4][1].

The implementation treats is as optional, allthough it is a required
property per RFC. Most clients do perfectly fine without it, though.

Properly setting this in the backend makes the CalDAV collection
listable with clients that do require it, e.g. cadaver.

[1]: https://datatracker.ietf.org/doc/html/rfc2518#section-13.4
This commit is contained in:
Conrad Hoffmann 2022-05-17 14:43:17 +02:00 committed by Simon Ser
parent cabaf3268b
commit 491af8e42c
2 changed files with 10 additions and 4 deletions

View File

@ -119,6 +119,7 @@ type CalendarMultiGet struct {
type CalendarObject struct {
Path string
ModTime time.Time
ContentLength int64
ETag string
Data *ical.Calendar
}

View File

@ -465,6 +465,11 @@ func (b *backend) propfindCalendarObject(ctx context.Context, propfind *internal
},
}
if co.ContentLength > 0 {
props[internal.GetContentLengthName] = func(*internal.RawXMLValue) (interface{}, error) {
return &internal.GetContentLength{Length: co.ContentLength}, nil
}
}
if !co.ModTime.IsZero() {
props[internal.GetLastModifiedName] = func(*internal.RawXMLValue) (interface{}, error) {
return &internal.GetLastModified{LastModified: internal.Time(co.ModTime)}, nil