diff --git a/pkg/gowebdav/client.go b/pkg/gowebdav/client.go index 1a25b76d..6e12289c 100644 --- a/pkg/gowebdav/client.go +++ b/pkg/gowebdav/client.go @@ -343,9 +343,9 @@ func (c *Client) Read(path string) ([]byte, error) { } func (c *Client) Link(path string) (string, http.Header, error) { - method := "HEAD" - url := PathEscape(Join(c.root, path)) - r, err := http.NewRequest(method, url, nil) + method := "GET" + u := PathEscape(Join(c.root, path)) + r, err := http.NewRequest(method, u, nil) if err != nil { return "", nil, newPathErrorErr("Link", path, err) @@ -366,31 +366,6 @@ func (c *Client) Link(path string) (string, http.Header, error) { if c.interceptor != nil { c.interceptor(method, r) } - - rs, err := c.c.Do(r) - if err != nil { - return "", nil, newPathErrorErr("Link", path, err) - } - - if rs.StatusCode == 401 { - wwwAuthenticateHeader := strings.ToLower(rs.Header.Get("Www-Authenticate")) - if strings.Contains(wwwAuthenticateHeader, "digest") { - c.authMutex.Lock() - c.auth = &DigestAuth{auth.User(), auth.Pass(), digestParts(rs)} - c.auth.Authorize(r, method, path) - c.authMutex.Unlock() - } else if strings.Contains(wwwAuthenticateHeader, "basic") { - c.authMutex.Lock() - c.auth = &BasicAuth{auth.User(), auth.Pass()} - c.auth.Authorize(r, method, path) - c.authMutex.Unlock() - } else { - return "", nil, newPathError("Authorize", c.root, rs.StatusCode) - } - } else if rs.StatusCode > 400 { - return "", nil, newPathError("Authorize", path, rs.StatusCode) - } - return r.URL.String(), r.Header, nil } diff --git a/server/common/proxy.go b/server/common/proxy.go index 2453c3b8..4086a049 100644 --- a/server/common/proxy.go +++ b/server/common/proxy.go @@ -16,7 +16,15 @@ import ( log "github.com/sirupsen/logrus" ) -var HttpClient = &http.Client{} +var HttpClient = &http.Client{ + CheckRedirect: func(req *http.Request, via []*http.Request) error { + if len(via) >= 10 { + return errors.New("stopped after 10 redirects") + } + req.Header.Del("Referer") + return nil + }, +} func Proxy(w http.ResponseWriter, r *http.Request, link *model.Link, file model.Obj) error { // read data with native