diff --git a/client.go b/client.go index fc3a3d9..8709323 100644 --- a/client.go +++ b/client.go @@ -186,3 +186,21 @@ func (c *Client) Mkdir(name string) error { _, err = c.ic.Do(req) return err } + +func (c *Client) MoveAll(name, dest string, overwrite bool) error { + req, err := c.ic.NewRequest("MOVE", name, nil) + if err != nil { + return err + } + + dest, err = c.ic.ResolveHref(dest) + if err != nil { + return err + } + req.Header.Set("Destination", dest) + + req.Header.Set("Overwrite", internal.FormatOverwrite(overwrite)) + + _, err = c.ic.Do(req) + return err +} diff --git a/internal/client.go b/internal/client.go index 6ecb703..0d37428 100644 --- a/internal/client.go +++ b/internal/client.go @@ -33,10 +33,10 @@ func (c *Client) SetBasicAuth(username, password string) { c.password = password } -func (c *Client) NewRequest(method string, href string, body io.Reader) (*http.Request, error) { +func (c *Client) ResolveHref(href string) (string, error) { hrefURL, err := url.Parse(href) if err != nil { - return nil, fmt.Errorf("failed to parse request href %q: %v", href, err) + return "", fmt.Errorf("webdav: failed to parse href %q: %v", href, err) } u := url.URL{ @@ -46,7 +46,15 @@ func (c *Client) NewRequest(method string, href string, body io.Reader) (*http.R Path: path.Join(c.endpoint.Path, hrefURL.Path), RawQuery: hrefURL.RawQuery, } - return http.NewRequest(method, u.String(), body) + return u.String(), nil +} + +func (c *Client) NewRequest(method string, href string, body io.Reader) (*http.Request, error) { + href, err := c.ResolveHref(href) + if err != nil { + return nil, err + } + return http.NewRequest(method, href, body) } func (c *Client) NewXMLRequest(method string, href string, v interface{}) (*http.Request, error) {