diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-12-17 14:59:07 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-12-17 14:59:07 +0300 |
commit | 8b573c94895dc0ac0e1d9d59cf3e8745e8b539ca (patch) | |
tree | 544930fb309b30317ae9797a9683768705d664c4 /workhorse/internal/upstream/handlers.go | |
parent | 4b1de649d0168371549608993deac953eb692019 (diff) |
Add latest changes from gitlab-org/gitlab@13-7-stable-eev13.7.0-rc42
Diffstat (limited to 'workhorse/internal/upstream/handlers.go')
-rw-r--r-- | workhorse/internal/upstream/handlers.go | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/workhorse/internal/upstream/handlers.go b/workhorse/internal/upstream/handlers.go new file mode 100644 index 00000000000..a6aa148a4ae --- /dev/null +++ b/workhorse/internal/upstream/handlers.go @@ -0,0 +1,39 @@ +package upstream + +import ( + "compress/gzip" + "fmt" + "io" + "net/http" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/helper" +) + +func contentEncodingHandler(h http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + var body io.ReadCloser + var err error + + // The client request body may have been gzipped. + contentEncoding := r.Header.Get("Content-Encoding") + switch contentEncoding { + case "": + body = r.Body + case "gzip": + body, err = gzip.NewReader(r.Body) + default: + err = fmt.Errorf("unsupported content encoding: %s", contentEncoding) + } + + if err != nil { + helper.Fail500(w, r, fmt.Errorf("contentEncodingHandler: %v", err)) + return + } + defer body.Close() + + r.Body = body + r.Header.Del("Content-Encoding") + + h.ServeHTTP(w, r) + }) +} |