Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'workhorse/internal/upstream/handlers.go')
-rw-r--r--workhorse/internal/upstream/handlers.go39
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)
+ })
+}