From b989f1b82d81d122abd5d59f1dda70ebf788c386 Mon Sep 17 00:00:00 2001 From: rxdn <29165304+rxdn@users.noreply.github.com> Date: Tue, 12 Nov 2024 21:35:31 +0000 Subject: [PATCH] Fix duplicate responses --- app/http/middleware/errorhandler.go | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/app/http/middleware/errorhandler.go b/app/http/middleware/errorhandler.go index f34e960..caac822 100644 --- a/app/http/middleware/errorhandler.go +++ b/app/http/middleware/errorhandler.go @@ -1,6 +1,7 @@ package middleware import ( + "bytes" "errors" "github.com/TicketsBot/GoPanel/app" "github.com/gin-gonic/gin" @@ -10,7 +11,19 @@ type ErrorResponse struct { Error string `json:"error"` } +type copyWriter struct { + gin.ResponseWriter + buf *bytes.Buffer +} + +func (cw copyWriter) Write(b []byte) (int, error) { + return cw.buf.Write(b) +} + func ErrorHandler(c *gin.Context) { + cw := ©Writer{buf: &bytes.Buffer{}, ResponseWriter: c.Writer} + c.Writer = cw + c.Next() if len(c.Errors) > 0 { @@ -26,11 +39,17 @@ func ErrorHandler(c *gin.Context) { c.JSON(-1, ErrorResponse{ Error: message, }) + + return } - if c.Writer.Status() >= 500 && len(c.Errors) == 0 { + if c.Writer.Status() >= 500 { c.JSON(-1, ErrorResponse{ Error: "An internal server error occurred", }) + + return } + + c.Writer.Write(cw.buf.Bytes()) }