diff --git a/carddav/elements.go b/carddav/elements.go index 5a0ca71..718b769 100644 --- a/carddav/elements.go +++ b/carddav/elements.go @@ -15,6 +15,8 @@ var ( addressBookDescriptionName = xml.Name{namespace, "addressbook-description"} addressBookQueryName = xml.Name{namespace, "addressbook-query"} addressBookMultigetName = xml.Name{namespace, "addressbook-multiget"} + + addressDataName = xml.Name{namespace, "address-data"} ) type addressbookHomeSet struct { @@ -74,7 +76,7 @@ type addressDataResp struct { } type reportReq struct { - Query *addressbookQuery + Query *addressbookQuery Multiget *addressbookMultiget } diff --git a/carddav/server.go b/carddav/server.go index 6dd31c7..76665e7 100644 --- a/carddav/server.go +++ b/carddav/server.go @@ -209,8 +209,15 @@ func (b *backend) propfindAddressObject(propfind *internal.Propfind, ao *Address internal.GetContentTypeName: func(*internal.RawXMLValue) (interface{}, error) { return &internal.GetContentType{Type: vcard.MIMEType}, nil }, + addressBookDataName: func(*internal.RawXMLValue) (interface{}, error) { + var buf bytes.Buffer + if err := vcard.NewEncoder(&buf).Encode(ao.Card); err != nil { + return nil, err + } + + return &addressDataResp{Data: buf.Bytes()}, nil + }, // TODO: getlastmodified, getetag - // TODO: address-data } return internal.NewPropfindResponse(ao.Href, propfind, props)