From ad415bee8c360a286dd3365366e1524fad457f1e Mon Sep 17 00:00:00 2001 From: joncrangle <94425204+joncrangle@users.noreply.github.com> Date: Wed, 13 Dec 2023 00:04:19 -0500 Subject: [PATCH] Add error page when accept header is text/html --- .github/workflows/build-css.yaml | 1 + cmd/main.go | 1 + handlers/error_page.go | 33 +++++ handlers/error_page.html | 238 +++++++++++++++++++++++++++++++ proxychain/proxychain.go | 9 +- 5 files changed, 278 insertions(+), 4 deletions(-) create mode 100644 handlers/error_page.go create mode 100644 handlers/error_page.html diff --git a/.github/workflows/build-css.yaml b/.github/workflows/build-css.yaml index 4e566e9..5ad392d 100644 --- a/.github/workflows/build-css.yaml +++ b/.github/workflows/build-css.yaml @@ -3,6 +3,7 @@ name: Build Tailwind CSS on: push: paths: + - "handlers/error_page.html" - "handlers/form.html" - "handlers/playground.html" - "proxychain/responsemodifiers/vendor/generate_readable_outline.html" diff --git a/cmd/main.go b/cmd/main.go index a20841e..08aa78a 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -139,6 +139,7 @@ func main() { app.Use(handlers.Auth()) app.Use(handlers.Favicon()) + app.Use(handlers.RenderErrorPage()) if os.Getenv("NOLOGS") != "true" { app.Use(func(c *fiber.Ctx) error { diff --git a/handlers/error_page.go b/handlers/error_page.go new file mode 100644 index 0000000..28d587b --- /dev/null +++ b/handlers/error_page.go @@ -0,0 +1,33 @@ +package handlers + +import ( + "bytes" + "embed" + "fmt" + "html/template" + "strings" + + "github.com/gofiber/fiber/v2" +) + +//go:embed error_page.html +var errorHTML embed.FS + +func RenderErrorPage() fiber.Handler { + f := "error_page.html" + tmpl, err := template.ParseFS(errorHTML, f) + if err != nil { + panic(fmt.Errorf("RenderErrorPage Error: %s not found", f)) + } + return func(c *fiber.Ctx) error { + if err := c.Next(); err != nil { + if strings.Contains(c.Get("Accept"), "text/html") { + c.Set("Content-Type", "text/html") + tmpl.Execute(c.Response().BodyWriter(), err.Error()) + return nil + } + return c.SendStream(bytes.NewBufferString(err.Error())) + } + return err + } +} diff --git a/handlers/error_page.html b/handlers/error_page.html new file mode 100644 index 0000000..e532b9e --- /dev/null +++ b/handlers/error_page.html @@ -0,0 +1,238 @@ + + +
+ + + + + + {{.}}
+