diff --git a/internal/app/middleware/swagger.go b/internal/app/middleware/swagger.go index fa32ec5..dbc1785 100644 --- a/internal/app/middleware/swagger.go +++ b/internal/app/middleware/swagger.go @@ -22,50 +22,46 @@ func SwaggerHandler() gin.HandlerFunc { c.Request.URL.Path = relPath } + isCSS := strings.HasSuffix(relPath, "swagger-ui.css") + + if isCSS { + crw := &captureResponseWriter{ + ginWriter: c.Writer, + code: 200, + } + c.Writer = crw + + swaggerFiles.Handler.ServeHTTP(crw, c.Request) + + c.Writer = crw.ginWriter + + if crw.code == 200 && crw.buf.Len() > 0 { + body := append(crw.buf.Bytes(), []byte(brandingCSS)...) + c.Header("Content-Length", strconv.Itoa(len(body))) + c.Header("Content-Type", "text/css; charset=utf-8") + c.Writer.WriteHeader(crw.code) + c.Writer.Write(body) + c.Request.URL.Path = rawPath + return + } + + if crw.buf.Len() > 0 { + c.Writer.WriteHeader(crw.code) + c.Writer.Write(crw.buf.Bytes()) + c.Request.URL.Path = rawPath + return + } + + c.Writer.WriteHeader(crw.code) + c.Request.URL.Path = rawPath + return + } + swaggerFiles.Handler.ServeHTTP(c.Writer, c.Request) - c.Request.URL.Path = rawPath } } -func SwaggerCSSBranding() gin.HandlerFunc { - return func(c *gin.Context) { - if !strings.HasSuffix(c.Request.URL.Path, "swagger-ui.css") { - c.Next() - return - } - - underlying := c.Writer - crw := &captureResponseWriter{ - ginWriter: underlying, - code: 200, - } - c.Writer = crw - - c.Next() - - c.Writer = underlying - - if crw.code == 200 && crw.buf.Len() > 0 { - body := append(crw.buf.Bytes(), []byte(brandingCSS)...) - h := underlying.Header() - h.Set("Content-Length", strconv.Itoa(len(body))) - h.Set("Content-Type", "text/css; charset=utf-8") - underlying.WriteHeader(crw.code) - underlying.Write(body) - return - } - - if crw.buf.Len() > 0 { - underlying.WriteHeader(crw.code) - underlying.Write(crw.buf.Bytes()) - return - } - - underlying.WriteHeader(crw.code) - } -} - type captureResponseWriter struct { ginWriter gin.ResponseWriter code int