From 6bac67470123669e3ae45ba2b52cf258a40cffb4 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Sun, 19 Jan 2020 15:06:09 +0100 Subject: [PATCH] carddav: add max-resource-size to serve --- carddav/carddav.go | 7 ++++--- carddav/elements.go | 8 ++++++++ carddav/server.go | 8 +++++++- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/carddav/carddav.go b/carddav/carddav.go index cea36d5..9f1d9a2 100644 --- a/carddav/carddav.go +++ b/carddav/carddav.go @@ -5,9 +5,10 @@ import ( ) type AddressBook struct { - Href string - Name string - Description string + Href string + Name string + Description string + MaxResourceSize int64 } type AddressBookQuery struct { diff --git a/carddav/elements.go b/carddav/elements.go index 6e3840c..732d870 100644 --- a/carddav/elements.go +++ b/carddav/elements.go @@ -18,6 +18,8 @@ var ( addressBookSupportedAddressData = xml.Name{namespace, "addressbook-supported-address-data"} addressDataName = xml.Name{namespace, "address-data"} + + maxResourceSizeName = xml.Name{namespace, "max-resource-size"} ) type addressbookHomeSet struct { @@ -42,6 +44,12 @@ type addressDataType struct { Version string `xml:"version,attr"` } +// https://tools.ietf.org/html/rfc6352#section-6.2.3 +type maxResourceSize struct { + XMLName xml.Name `xml:"urn:ietf:params:xml:ns:carddav max-resource-size"` + Size int64 `xml:",chardata"` +} + // https://tools.ietf.org/html/rfc6352#section-10.3 type addressbookQuery struct { XMLName xml.Name `xml:"urn:ietf:params:xml:ns:carddav addressbook-query"` diff --git a/carddav/server.go b/carddav/server.go index 209a2c4..da83e0e 100644 --- a/carddav/server.go +++ b/carddav/server.go @@ -219,7 +219,13 @@ func (b *backend) propfindAddressBook(propfind *internal.Propfind, ab *AddressBo }, }, nil }, - // TODO: addressbook-max-resource-size, addressbook-home-set + // TODO: addressbook-home-set + } + + if ab.MaxResourceSize > 0 { + props[maxResourceSizeName] = func(*internal.RawXMLValue) (interface{}, error) { + return &maxResourceSize{Size: ab.MaxResourceSize}, nil + } } return internal.NewPropfindResponse("/", propfind, props)