From 238e72b73ec38f74a3c587b069c1b6493a8fc9e8 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Sun, 19 Jan 2020 15:00:15 +0100 Subject: [PATCH] carddav: add addressbook-supprted-address-data to server --- carddav/elements.go | 23 ++++++++++++++++++----- carddav/server.go | 10 +++++++++- 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/carddav/elements.go b/carddav/elements.go index e919d1f..6e3840c 100644 --- a/carddav/elements.go +++ b/carddav/elements.go @@ -10,11 +10,12 @@ import ( const namespace = "urn:ietf:params:xml:ns:carddav" var ( - addressBookName = xml.Name{namespace, "addressbook"} - addressBookHomeSetName = xml.Name{namespace, "addressbook-home-set"} - addressBookDescriptionName = xml.Name{namespace, "addressbook-description"} - addressBookQueryName = xml.Name{namespace, "addressbook-query"} - addressBookMultigetName = xml.Name{namespace, "addressbook-multiget"} + addressBookName = xml.Name{namespace, "addressbook"} + addressBookHomeSetName = xml.Name{namespace, "addressbook-home-set"} + addressBookDescriptionName = xml.Name{namespace, "addressbook-description"} + addressBookQueryName = xml.Name{namespace, "addressbook-query"} + addressBookMultigetName = xml.Name{namespace, "addressbook-multiget"} + addressBookSupportedAddressData = xml.Name{namespace, "addressbook-supported-address-data"} addressDataName = xml.Name{namespace, "address-data"} ) @@ -29,6 +30,18 @@ type addressbookDescription struct { Description string `xml:",chardata"` } +// https://tools.ietf.org/html/rfc6352#section-6.2.2 +type addressbookSupportedAddressData struct { + XMLName xml.Name `xml:"urn:ietf:params:xml:ns:carddav addressbook-supported-address-data"` + Types []addressDataType `xml:"address-data-type"` +} + +type addressDataType struct { + XMLName xml.Name `xml:"urn:ietf:params:xml:ns:carddav address-data-type"` + ContentType string `xml:"content-type,attr"` + Version string `xml:"version,attr"` +} + // 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 8e49b91..209a2c4 100644 --- a/carddav/server.go +++ b/carddav/server.go @@ -211,7 +211,15 @@ func (b *backend) propfindAddressBook(propfind *internal.Propfind, ab *AddressBo addressBookDescriptionName: func(*internal.RawXMLValue) (interface{}, error) { return &addressbookDescription{Description: ab.Description}, nil }, - // TODO: addressbook-supported-address-data, addressbook-max-resource-size, addressbook-home-set + addressBookSupportedAddressData: func(*internal.RawXMLValue) (interface{}, error) { + return &addressbookSupportedAddressData{ + Types: []addressDataType{ + {ContentType: vcard.MIMEType, Version: "3.0"}, + {ContentType: vcard.MIMEType, Version: "4.0"}, + }, + }, nil + }, + // TODO: addressbook-max-resource-size, addressbook-home-set } return internal.NewPropfindResponse("/", propfind, props)