Skip to content

Commit f52a11b

Browse files
committed
Handle gzipped BitBucket responses
1 parent c1d0c79 commit f52a11b

File tree

1 file changed

+32
-6
lines changed

1 file changed

+32
-6
lines changed

api/bitbucket.go

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@ package api
22

33
import (
44
"bytes"
5+
"compress/gzip"
56
"context"
67
"encoding/json"
78
"errors"
9+
"io"
810
"io/ioutil"
911
"net/http"
1012
"net/http/httputil"
@@ -178,14 +180,26 @@ func rewriteBitBucketLink(link, endpointAPIURL, proxyAPIURL string) string {
178180
}
179181

180182
func rewriteLinksInBitBucketResponse(resp *http.Response, endpointAPIURL, proxyAPIURL string) error {
181-
body, err := ioutil.ReadAll(resp.Body)
183+
var bodyReader io.ReadCloser
184+
var err error
185+
switch resp.Header.Get("Content-Encoding") {
186+
case "gzip":
187+
bodyReader, err = gzip.NewReader(resp.Body)
188+
if err != nil {
189+
return nil
190+
}
191+
defer bodyReader.Close()
192+
default:
193+
bodyReader = resp.Body
194+
}
195+
body, err := ioutil.ReadAll(bodyReader)
182196
if err != nil {
183-
return err
197+
return nil
184198
}
185199

186200
var b map[string]interface{}
187201
if err := json.Unmarshal(body, &b); err != nil {
188-
return err
202+
return nil
189203
}
190204

191205
if next, ok := b["next"].(string); ok {
@@ -196,9 +210,21 @@ func rewriteLinksInBitBucketResponse(resp *http.Response, endpointAPIURL, proxyA
196210
b["previous"] = rewriteBitBucketLink(prev, endpointAPIURL, proxyAPIURL)
197211
}
198212

199-
newBody, err := json.Marshal(b)
200-
println(newBody)
201-
resp.Body = ioutil.NopCloser(bytes.NewReader(newBody))
213+
newBodyBytes, err := json.Marshal(b)
214+
215+
switch resp.Header.Get("Content-Encoding") {
216+
case "gzip":
217+
var compressedBody bytes.Buffer
218+
w := gzip.NewWriter(&compressedBody)
219+
defer w.Close()
220+
_, err = w.Write(newBodyBytes)
221+
if err != nil {
222+
return err
223+
}
224+
resp.Body = ioutil.NopCloser(&compressedBody)
225+
default:
226+
resp.Body = ioutil.NopCloser(bytes.NewReader(newBodyBytes))
227+
}
202228

203229
return nil
204230
}

0 commit comments

Comments
 (0)