From 931602e55d4d6667d21d3bd07435b9120d546dc1 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Tue, 14 Jan 2020 21:43:09 +0100 Subject: [PATCH] internal: add Client.PropfindFlat --- client.go | 14 +------------- internal/client.go | 25 +++++++++++++++++++++---- 2 files changed, 22 insertions(+), 17 deletions(-) diff --git a/client.go b/client.go index 0bcae6d..f2bd2b2 100644 --- a/client.go +++ b/client.go @@ -23,19 +23,7 @@ func (c *Client) FindCurrentUserPrincipal() (string, error) { name := xml.Name{"DAV:", "current-user-principal"} propfind := internal.NewPropPropfind(name) - req, err := c.c.NewXMLRequest("PROPFIND", "/", propfind) - if err != nil { - return "", err - } - - req.Header.Add("Depth", "0") - - ms, err := c.c.DoMultiStatus(req) - if err != nil { - return "", err - } - - resp, err := ms.Get("/") + resp, err := c.c.PropfindFlat("/", propfind) if err != nil { return "", err } diff --git a/internal/client.go b/internal/client.go index afd35c7..01cd1ee 100644 --- a/internal/client.go +++ b/internal/client.go @@ -27,24 +27,24 @@ func NewClient(c *http.Client, endpoint string) (*Client, error) { return &Client{c, u}, nil } -func (c *Client) NewRequest(method string, p string, body io.Reader) (*http.Request, error) { +func (c *Client) NewRequest(method string, href string, body io.Reader) (*http.Request, error) { u := url.URL{ Scheme: c.endpoint.Scheme, User: c.endpoint.User, Host: c.endpoint.Host, - Path: path.Join(c.endpoint.Path, p), + Path: path.Join(c.endpoint.Path, href), } return http.NewRequest(method, u.String(), body) } -func (c *Client) NewXMLRequest(method string, p string, v interface{}) (*http.Request, error) { +func (c *Client) NewXMLRequest(method string, href string, v interface{}) (*http.Request, error) { var buf bytes.Buffer buf.WriteString(xml.Header) if err := xml.NewEncoder(&buf).Encode(v); err != nil { return nil, err } - req, err := c.NewRequest(method, p, &buf) + req, err := c.NewRequest(method, href, &buf) if err != nil { return nil, err } @@ -79,3 +79,20 @@ func (c *Client) DoMultiStatus(req *http.Request) (*Multistatus, error) { return &ms, nil } + +// PropfindFlat performs a PROPFIND request with a zero depth. +func (c *Client) PropfindFlat(href string, propfind *Propfind) (*Response, error) { + req, err := c.NewXMLRequest("PROPFIND", href, propfind) + if err != nil { + return nil, err + } + + req.Header.Add("Depth", "0") + + ms, err := c.DoMultiStatus(req) + if err != nil { + return nil, err + } + + return ms.Get(href) +}