55 lines
985 B
Go
55 lines
985 B
Go
package helpers
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
|
|
"github.com/gofiber/fiber/v2"
|
|
"github.com/gofiber/fiber/v2/log"
|
|
)
|
|
|
|
func FiberErrorHandler(c *fiber.Ctx, err error) error {
|
|
// Status code defaults to 500
|
|
code := fiber.StatusInternalServerError
|
|
|
|
// Retrieve the custom status code if it's a *fiber.Error
|
|
var e *fiber.Error
|
|
if errors.As(err, &e) {
|
|
code = e.Code
|
|
}
|
|
|
|
title := fmt.Sprintf("Erreur %d", code)
|
|
message := err.Error()
|
|
|
|
if code == 500 {
|
|
log := GetLogger()
|
|
log.Error(
|
|
err,
|
|
"url", c.OriginalURL(),
|
|
"method", c.Method(),
|
|
"code", code,
|
|
"ip", c.IP(),
|
|
)
|
|
|
|
message = "Une erreur est survenue, merci de prendre contact avec un administrateur."
|
|
}
|
|
|
|
// Send custom error page
|
|
err = c.Status(code).Render("error_page", fiber.Map{
|
|
"PageTitle": title,
|
|
"Code": code,
|
|
"Message": message,
|
|
})
|
|
|
|
if err != nil {
|
|
log.Error(err)
|
|
|
|
return c.Status(
|
|
fiber.StatusInternalServerError,
|
|
).SendString(
|
|
"Internal Server Error",
|
|
)
|
|
}
|
|
|
|
return nil
|
|
}
|