From 2782bafcfdb69ef7b69a51a717a6bd35095e9369 Mon Sep 17 00:00:00 2001
From: Alex Scerba <alex@scerba.org>
Date: Fri, 27 Sep 2024 18:56:29 -0400
Subject: Add base files

---
 cmd/http/middle.go | 32 ++++++++++++++++++++++++++++++++
 1 file changed, 32 insertions(+)
 create mode 100644 cmd/http/middle.go

(limited to 'cmd/http/middle.go')

diff --git a/cmd/http/middle.go b/cmd/http/middle.go
new file mode 100644
index 0000000..29b49a6
--- /dev/null
+++ b/cmd/http/middle.go
@@ -0,0 +1,32 @@
+package main
+
+import (
+	"compress/gzip"
+	"io"
+	"net/http"
+	"strings"
+)
+
+type gzipResponseWriter struct {
+	io.Writer
+	http.ResponseWriter
+}
+
+func (grw gzipResponseWriter) Write(data []byte) (int, error) {
+	return grw.Writer.Write(data)
+}
+
+func gzipHandler(next http.Handler) http.Handler {
+	return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+		if !strings.Contains(r.Header.Get("Accept-Encoding"), "gzip") {
+			next.ServeHTTP(w, r)
+			return
+		}
+
+		w.Header().Set("Content-Encoding", "gzip")
+		gzipWriter := gzip.NewWriter(w)
+		defer gzipWriter.Close()
+		gzippedResponseWriter := gzipResponseWriter{Writer: gzipWriter, ResponseWriter: w}
+		next.ServeHTTP(gzippedResponseWriter, r)
+	})
+}
-- 
cgit v1.2.3