From 3857990bb9f705ed06f8ac2a18ba7d4a732f4274 Mon Sep 17 00:00:00 2001 From: Stefan Majewsky Date: Mon, 24 Feb 2020 16:05:42 +0100 Subject: guard against Swift sending 100 status too early --- gopherschwift/package.go | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/gopherschwift/package.go b/gopherschwift/package.go index 3889735..1d0d724 100644 --- a/gopherschwift/package.go +++ b/gopherschwift/package.go @@ -120,6 +120,20 @@ func (g *backend) do(req *http.Request, afterReauth bool) (*http.Response, error if err != nil { return nil, err } + + //Swift is stupid: Even though we send `Expect: 100-continue`, it doesn't + //help. Swift will right away answer `100 Continue` and ONLY THEN actually + //check the token (at least in our prod setup). + // + //To increase the chance that this does not completely break this request, + //reset the reader if it implements Seek(). + if seekableReqBody, ok := req.Body.(io.Seeker); ok { + _, err := seekableReqBody.Seek(0, io.SeekStart) + if err != nil { + return nil, err + } + } + //restart request with new token return g.do(req, true) } -- cgit v1.2.3