From 34b2ebf9404c2e38b2ec979507d409c7a1e51d2f Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Fri, 17 Jan 2020 17:09:23 +0100 Subject: [PATCH] all: use variables for xml.Name values --- carddav/carddav.go | 4 ---- carddav/elements.go | 4 ++++ carddav/server.go | 7 ++----- internal/elements.go | 10 ++++++++++ server.go | 8 ++++---- 5 files changed, 20 insertions(+), 13 deletions(-) diff --git a/carddav/carddav.go b/carddav/carddav.go index 2d07cc4..ada6659 100644 --- a/carddav/carddav.go +++ b/carddav/carddav.go @@ -6,15 +6,11 @@ import ( "github.com/emersion/go-vcard" ) -const namespace = "urn:ietf:params:xml:ns:carddav" - type AddressBook struct { Href string Description string } -var addressBookName = xml.Name{namespace, "addressbook"} - type AddressBookQuery struct { Props []string } diff --git a/carddav/elements.go b/carddav/elements.go index 78ebd21..7b94e78 100644 --- a/carddav/elements.go +++ b/carddav/elements.go @@ -6,6 +6,10 @@ import ( "github.com/emersion/go-webdav/internal" ) +const namespace = "urn:ietf:params:xml:ns:carddav" + +var addressBookName = xml.Name{namespace, "addressbook"} + type addressbookHomeSet struct { XMLName xml.Name `xml:"urn:ietf:params:xml:ns:carddav addressbook-home-set"` Href string `xml:"href"` diff --git a/carddav/server.go b/carddav/server.go index 4bc6773..2c2d9a8 100644 --- a/carddav/server.go +++ b/carddav/server.go @@ -111,7 +111,7 @@ func (b *backend) Propfind(r *http.Request, propfind *internal.Propfind, depth i func (b *backend) propfindAddressBook(propfind *internal.Propfind) (*internal.Response, error) { props := map[xml.Name]internal.PropfindFunc{ - {"DAV:", "resourcetype"}: func(*internal.RawXMLValue) (interface{}, error) { + internal.ResourceTypeName: func(*internal.RawXMLValue) (interface{}, error) { return internal.NewResourceType(internal.CollectionName, addressBookName), nil }, } @@ -121,10 +121,7 @@ func (b *backend) propfindAddressBook(propfind *internal.Propfind) (*internal.Re func (b *backend) propfindAddressObject(propfind *internal.Propfind, ao *AddressObject) (*internal.Response, error) { props := map[xml.Name]internal.PropfindFunc{ - {"DAV:", "resourcetype"}: func(*internal.RawXMLValue) (interface{}, error) { - return internal.NewResourceType(), nil - }, - {"DAV:", "getcontenttype"}: func(*internal.RawXMLValue) (interface{}, error) { + internal.GetContentTypeName: func(*internal.RawXMLValue) (interface{}, error) { return &internal.GetContentType{Type: vcard.MIMEType}, nil }, // TODO getlastmodified, getetag diff --git a/internal/elements.go b/internal/elements.go index b046cec..e528dcf 100644 --- a/internal/elements.go +++ b/internal/elements.go @@ -9,6 +9,8 @@ import ( "time" ) +const Namespace = "DAV:" + type Status struct { Code int Text string @@ -265,6 +267,14 @@ type GetLastModified struct { LastModified Time `xml:",chardata"` } +var ( + ResourceTypeName = xml.Name{"DAV:", "resourcetype"} + GetContentLengthName = xml.Name{"DAV:", "getcontentlength"} + GetContentTypeName = xml.Name{"DAV:", "getcontenttype"} + GetLastModifiedName = xml.Name{"DAV:", "getlastmodified"} + GetETagName = xml.Name{"DAV:", "getetag"} +) + // https://tools.ietf.org/html/rfc4918#section-14.5 type Error struct { XMLName xml.Name `xml:"DAV: error"` diff --git a/server.go b/server.go index ab60026..c3f5517 100644 --- a/server.go +++ b/server.go @@ -137,7 +137,7 @@ func (b *backend) propfind(propfind *internal.Propfind, name string, fi os.FileI func (b *backend) propfindFile(propfind *internal.Propfind, name string, fi os.FileInfo) (*internal.Response, error) { props := make(map[xml.Name]internal.PropfindFunc) - props[xml.Name{"DAV:", "resourcetype"}] = func(*internal.RawXMLValue) (interface{}, error) { + props[internal.ResourceTypeName] = func(*internal.RawXMLValue) (interface{}, error) { var types []xml.Name if fi.IsDir() { types = append(types, internal.CollectionName) @@ -146,10 +146,10 @@ func (b *backend) propfindFile(propfind *internal.Propfind, name string, fi os.F } if !fi.IsDir() { - props[xml.Name{"DAV:", "getcontentlength"}] = func(*internal.RawXMLValue) (interface{}, error) { + props[internal.GetContentLengthName] = func(*internal.RawXMLValue) (interface{}, error) { return &internal.GetContentLength{Length: fi.Size()}, nil } - props[xml.Name{"DAV:", "getcontenttype"}] = func(*internal.RawXMLValue) (interface{}, error) { + props[internal.GetContentTypeName] = func(*internal.RawXMLValue) (interface{}, error) { t := mime.TypeByExtension(path.Ext(name)) if t == "" { // TODO: use http.DetectContentType @@ -157,7 +157,7 @@ func (b *backend) propfindFile(propfind *internal.Propfind, name string, fi os.F } return &internal.GetContentType{Type: t}, nil } - props[xml.Name{"DAV:", "getlastmodified"}] = func(*internal.RawXMLValue) (interface{}, error) { + props[internal.GetLastModifiedName] = func(*internal.RawXMLValue) (interface{}, error) { return &internal.GetLastModified{LastModified: internal.Time(fi.ModTime())}, nil } // TODO: getetag