diff --git a/handlers/error_page.go b/handlers/error_page.go
index 9c3b083..8dec116 100644
--- a/handlers/error_page.go
+++ b/handlers/error_page.go
@@ -2,10 +2,14 @@ package handlers
import (
"embed"
+ "encoding/json"
"fmt"
"html/template"
+ "io"
+ "net/http"
"strings"
+ "github.com/everywall/ladder/proxychain/responsemodifiers/api"
"github.com/gofiber/fiber/v2"
)
@@ -20,12 +24,35 @@ func RenderErrorPage() fiber.Handler {
}
return func(c *fiber.Ctx) error {
if err := c.Next(); err != nil {
+ c.Response().SetStatusCode(500)
+
+ errReader := api.CreateAPIErrReader(err)
+ errMessageBytes, err := io.ReadAll(errReader)
+ if err != nil {
+ return err
+ }
+
+ var errMsg api.Error
+ if err := json.Unmarshal(errMessageBytes, &errMsg); err != nil {
+ return err
+ }
+
+ if strings.Contains(c.Get("Accept"), "text/plain") {
+ c.Set("Content-Type", "text/plain")
+ return c.SendString(errMsg.Error.Message)
+ }
if strings.Contains(c.Get("Accept"), "text/html") {
c.Set("Content-Type", "text/html")
- tmpl.Execute(c.Response().BodyWriter(), err.Error())
+ tmpl.Execute(c.Response().BodyWriter(), fiber.Map{
+ "Status": http.StatusText(c.Response().StatusCode()) + ": " + fmt.Sprint(c.Response().StatusCode()),
+ "Message": errMsg.Error.Message,
+ "Type": errMsg.Error.Type,
+ "Cause": errMsg.Error.Cause,
+ })
return nil
}
- return c.SendString(err.Error())
+ c.Set("Content-Type", "text/json")
+ return c.JSON(errMsg)
}
return err
}
diff --git a/handlers/error_page.html b/handlers/error_page.html
index e532b9e..c4e5021 100644
--- a/handlers/error_page.html
+++ b/handlers/error_page.html
@@ -214,7 +214,14 @@
Error
-
{{.}}
+
+ {{.Status}}
+ {{.Message}}
+ Type: {{.Type}}
+ Cause: {{.Cause}}
+