mirror of
https://github.com/nkanaev/yarr.git
synced 2025-11-05 09:10:38 +00:00
44 lines
769 B
Go
44 lines
769 B
Go
package gzip
|
|
|
|
import (
|
|
"compress/gzip"
|
|
"net/http"
|
|
"strings"
|
|
|
|
"github.com/nkanaev/yarr/src/server/router"
|
|
)
|
|
|
|
type gzipResponseWriter struct {
|
|
http.ResponseWriter
|
|
|
|
out *gzip.Writer
|
|
src http.ResponseWriter
|
|
}
|
|
|
|
func (rw *gzipResponseWriter) Header() http.Header {
|
|
return rw.src.Header()
|
|
}
|
|
|
|
func (rw *gzipResponseWriter) Write(x []byte) (int, error) {
|
|
return rw.out.Write(x)
|
|
}
|
|
|
|
func (rw *gzipResponseWriter) WriteHeader(statusCode int) {
|
|
rw.src.WriteHeader(statusCode)
|
|
}
|
|
|
|
func Middleware(c *router.Context) {
|
|
if !strings.Contains(c.Req.Header.Get("Accept-Encoding"), "gzip") {
|
|
c.Next()
|
|
return
|
|
}
|
|
|
|
gz := &gzipResponseWriter{out: gzip.NewWriter(c.Out), src: c.Out}
|
|
defer gz.out.Close()
|
|
|
|
c.Out.Header().Set("Content-Encoding", "gzip")
|
|
c.Out = gz
|
|
|
|
c.Next()
|
|
}
|