mirror of
https://github.com/1f349/go-webdav.git
synced 2024-12-22 00:04:19 +00:00
client: support redirects in PropfindFlat()
One common method for CalDAV or CardDAV clients to find the current user principal URL is to request the `/.well-known` URL (see [RFC 6764, section 6][1]), expecting a redirect. Such URL is for example a valid result of the discovery phase described in that RFC. The expectation is that a client, given such URL, is able to find the principal URL by following a redirect when sending a PROPFIND request. This change makes `PropfindFlat()` (and, by extension, `FindCurrentUserPrincipal()`) handle such a redirect and correctly return the requested properties, even if their HREF is different from the original request path. [1]: https://datatracker.ietf.org/doc/html/rfc6764#section-6
This commit is contained in:
parent
13fa812f94
commit
03633121d9
@ -149,7 +149,11 @@ func (c *Client) PropfindFlat(path string, propfind *Propfind) (*Response, error
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ms.Get(c.ResolveHref(path).Path)
|
||||
// If the client followed a redirect, the Href might be different from the request path
|
||||
if len(ms.Responses) != 1 {
|
||||
return nil, fmt.Errorf("PROPFIND with Depth: 0 returned %d responses", len(ms.Responses))
|
||||
}
|
||||
return &ms.Responses[0], nil
|
||||
}
|
||||
|
||||
func parseCommaSeparatedSet(values []string, upper bool) map[string]bool {
|
||||
|
Loading…
Reference in New Issue
Block a user