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 @@ + + + + + + + + + ladder | error + + + +
+
+ + +
+ +
+
+ +
+

Error

+
+ {{.}} +
+ + +
+ + diff --git a/proxychain/proxychain.go b/proxychain/proxychain.go index e38ebaf..d90e7ce 100644 --- a/proxychain/proxychain.go +++ b/proxychain/proxychain.go @@ -3,14 +3,15 @@ package proxychain import ( "errors" "fmt" - http "github.com/bogdanfinn/fhttp" - tls_client "github.com/bogdanfinn/tls-client" - profiles "github.com/bogdanfinn/tls-client/profiles" "io" "log" "net/url" "strings" + http "github.com/bogdanfinn/fhttp" + tls_client "github.com/bogdanfinn/tls-client" + profiles "github.com/bogdanfinn/tls-client/profiles" + "github.com/gofiber/fiber/v2" ) @@ -398,7 +399,7 @@ func (chain *ProxyChain) abort(err error) error { } else { e = fmt.Errorf("ProxyChain error: '%s'", err.Error()) } - chain.Context.SendString(e.Error()) + // chain.Context.SendString(e.Error()) // <- RenderErrorPage middleware to render error log.Println(e.Error()) return e }