diff --git a/.gitignore b/.gitignore index a1338d6..59f1f3e 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,4 @@ # Project-local glide cache, RE: https://github.com/Masterminds/glide/issues/736 .glide/ +.idea/ diff --git a/carddav/server.go b/carddav/server.go index 915c49e..b4821c7 100644 --- a/carddav/server.go +++ b/carddav/server.go @@ -524,6 +524,9 @@ func (b *backend) propFindAddressBook(ctx context.Context, propfind *internal.Pr return &maxResourceSize{Size: ab.MaxResourceSize}, nil } } + props[internal.CurrentUserPrivilegeSetName] = func(*internal.RawXMLValue) (interface{}, error) { + return &internal.CurrentUserPrivilegeSet{Privilege: internal.NewAllPrivileges()}, nil + } return internal.NewPropFindResponse(ab.Path, propfind, props) } diff --git a/internal/elements.go b/internal/elements.go index db7d960..f380573 100644 --- a/internal/elements.go +++ b/internal/elements.go @@ -22,6 +22,8 @@ var ( GetETagName = xml.Name{Namespace, "getetag"} CurrentUserPrincipalName = xml.Name{Namespace, "current-user-principal"} + + CurrentUserPrivilegeSetName = xml.Name{Namespace, "current-user-privilege-set"} ) type Status struct { @@ -417,6 +419,30 @@ type CurrentUserPrincipal struct { Unauthenticated *struct{} `xml:"unauthenticated,omitempty"` } +type CurrentUserPrivilegeSet struct { + XMLName xml.Name `xml:"DAV: current-user-privilege-set"` + Privilege []Privilege `xml:"privilege"` +} + +type Privilege struct { + XMLName xml.Name `xml:"DAV: privilege"` + Read *struct{} `xml:"DAV: read,omitempty"` + All *struct{} `xml:"DAV: all,omitempty"` + Write *struct{} `xml:"DAV: write,omitempty"` + WriteProperties *struct{} `xml:"DAV: write-properties,omitempty"` + WriteContent *struct{} `xml:"DAV: write-content,omitempty"` +} + +func NewAllPrivileges() []Privilege { + return []Privilege{ + {Read: &struct{}{}}, + {All: &struct{}{}}, + {Write: &struct{}{}}, + {WriteProperties: &struct{}{}}, + {WriteContent: &struct{}{}}, + } +} + // https://tools.ietf.org/html/rfc4918#section-14.19 type PropertyUpdate struct { XMLName xml.Name `xml:"DAV: propertyupdate"`