From ea0626d8060ab10005f29a8e9722ea35f58b0ec4 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Thu, 27 Feb 2020 12:56:06 +0100 Subject: plugins/carddav: check supported vCard versions --- plugins/carddav/routes.go | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'plugins') diff --git a/plugins/carddav/routes.go b/plugins/carddav/routes.go index b276944..ccc053c 100644 --- a/plugins/carddav/routes.go +++ b/plugins/carddav/routes.go @@ -151,10 +151,16 @@ func registerRoutes(p *plugin) { fn := ctx.FormValue("fn") emails := strings.Split(ctx.FormValue("emails"), ",") - // Some CardDAV servers (e.g. Google) don't support vCard 4.0 - // TODO: get supported formats from server, use highest version if _, ok := card[vcard.FieldVersion]; !ok { - card.SetValue(vcard.FieldVersion, "3.0") + // Some CardDAV servers (e.g. Google) don't support vCard 4.0 + var version = "4.0" + if !addressBook.SupportsAddressData(vcard.MIMEType, version) { + version = "3.0" + } + if !addressBook.SupportsAddressData(vcard.MIMEType, version) { + return fmt.Errorf("upstream CardDAV server doesn't support vCard %v", version) + } + card.SetValue(vcard.FieldVersion, version) } if field := card.Preferred(vcard.FieldFormattedName); field != nil { -- cgit v1.2.3