quick bugfix for issue #20 (#21)

issue title: "Can't upload file with content"
https://github.com/studio-b12/gowebdav/issues/20
This commit is contained in:
Vitalii 2018-07-08 15:25:00 +03:00 committed by Christoph Polcin
parent 008b27eb0f
commit f43a0a4cf8

View File

@ -10,10 +10,16 @@ import (
func (c *Client) req(method, path string, body io.Reader, intercept func(*http.Request)) (req *http.Response, err error) { func (c *Client) req(method, path string, body io.Reader, intercept func(*http.Request)) (req *http.Response, err error) {
// Tee the body, because if authorization fails we will need to read from it again. // Tee the body, because if authorization fails we will need to read from it again.
var r *http.Request
var ba bytes.Buffer var ba bytes.Buffer
bb := io.TeeReader(body, &ba) bb := io.TeeReader(body, &ba)
r, err := http.NewRequest(method, PathEscape(Join(c.root, path)), &ba) if body == nil {
r, err = http.NewRequest(method, PathEscape(Join(c.root, path)), nil)
} else {
r, err = http.NewRequest(method, PathEscape(Join(c.root, path)), bb)
}
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -40,7 +46,13 @@ func (c *Client) req(method, path string, body io.Reader, intercept func(*http.R
} else { } else {
return rs, newPathError("Authorize", c.root, rs.StatusCode) return rs, newPathError("Authorize", c.root, rs.StatusCode)
} }
return c.req(method, path, bb, intercept)
if body == nil {
return c.req(method, path, nil, intercept)
} else {
return c.req(method, path, &ba, intercept)
}
} else if rs.StatusCode == 401 { } else if rs.StatusCode == 401 {
return rs, newPathError("Authorize", c.root, rs.StatusCode) return rs, newPathError("Authorize", c.root, rs.StatusCode)
} }