| 1234567891011121314151617181920212223242526272829303132333435363738 |
- package middleware
- import (
- "compress/gzip"
- "github.com/andybalholm/brotli"
- "github.com/gin-gonic/gin"
- "io"
- "net/http"
- )
- func DecompressRequestMiddleware() gin.HandlerFunc {
- return func(c *gin.Context) {
- if c.Request.Body == nil || c.Request.Method == http.MethodGet {
- c.Next()
- return
- }
- switch c.GetHeader("Content-Encoding") {
- case "gzip":
- gzipReader, err := gzip.NewReader(c.Request.Body)
- if err != nil {
- c.AbortWithStatus(http.StatusBadRequest)
- return
- }
- defer gzipReader.Close()
- // Replace the request body with the decompressed data
- c.Request.Body = io.NopCloser(gzipReader)
- c.Request.Header.Del("Content-Encoding")
- case "br":
- reader := brotli.NewReader(c.Request.Body)
- c.Request.Body = io.NopCloser(reader)
- c.Request.Header.Del("Content-Encoding")
- }
- // Continue processing the request
- c.Next()
- }
- }
|