From 8187cbf8c66eafeb52a563a9af953617ad05b07e Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Tue, 3 May 2022 18:15:11 +0200 Subject: [PATCH] webdav: add Client.FindPrincipal --- client.go | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/client.go b/client.go index ad0a748..8f5e5df 100644 --- a/client.go +++ b/client.go @@ -66,6 +66,41 @@ func (c *Client) FindCurrentUserPrincipal() (string, error) { return prop.Href.Path, nil } +func (c *Client) FindPrincipal(path string) (*Principal, error) { + propfind := internal.NewPropNamePropfind( + internal.ResourceTypeName, + internal.DisplayNameName, + principalURLName, + ) + resp, err := c.ic.PropfindFlat(path, propfind) + if err != nil { + return nil, err + } + + var resType internal.ResourceType + if err := resp.DecodeProp(&resType); err != nil { + return nil, err + } + if !resType.Is(principalName) { + return nil, fmt.Errorf("%q is not a principal resource", path) + } + + var dispName internal.DisplayName + if err := resp.DecodeProp(&dispName); err != nil { + return nil, err + } + + var principalURL principalURL + if err := resp.DecodeProp(&principalURL); err != nil { + return nil, err + } + + return &Principal{ + Path: principalURL.Href.Path, + Name: dispName.Name, + }, nil +} + var fileInfoPropfind = internal.NewPropNamePropfind( internal.ResourceTypeName, internal.GetContentLengthName,