From 7feec60d6ec8b2bb5eaa34dc59c15de38a647e12 Mon Sep 17 00:00:00 2001 From: Bobby Date: Fri, 18 Jul 2025 18:37:28 +0530 Subject: better error handlers --- controllers/errors.go | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 controllers/errors.go (limited to 'controllers/errors.go') diff --git a/controllers/errors.go b/controllers/errors.go new file mode 100644 index 0000000..472a5a8 --- /dev/null +++ b/controllers/errors.go @@ -0,0 +1,61 @@ +package controllers + +import ( + "errors" + "imageboard/config" + "imageboard/utils/shortcuts" + "strings" + + "github.com/gofiber/fiber/v2" +) + +type TemplateError struct { + Template string + ErrorMessage string + StatusCode int +} + +func TemplateErrorController(ctx *fiber.Ctx, err TemplateError, bind fiber.Map) error { + bind["Error"] = err.ErrorMessage + return shortcuts.RenderWithStatus(ctx, err.Template, bind, err.StatusCode) +} + +func GenericErrorController(ctx *fiber.Ctx, title string, err error, statusCode int) error { + ctx.Locals("Title", title) + + if strings.HasSuffix(ctx.Path(), ".json") { + return ctx.Status(statusCode).JSON(fiber.Map{ + "error": err.Error(), + }) + } + + if len(ctx.Path()) > 1 && strings.Contains(ctx.Path()[1:], ".") && !strings.HasSuffix(ctx.Path(), ".html") { + return ctx.SendStatus(statusCode) + } + + return shortcuts.RenderWithStatus(ctx, config.TEMPLATE_ERROR, fiber.Map{ + "Title": title, + "Error": err.Error(), + }, statusCode) +} + +func NotFoundController(ctx *fiber.Ctx) error { + error := errors.New("The page you are looking for does not exist.") + return GenericErrorController(ctx, "Page Not Found", error, fiber.StatusNotFound) +} + +func InternalServerErrorController(ctx *fiber.Ctx, err error) error { + return GenericErrorController(ctx, "Internal Server Error", err, fiber.StatusInternalServerError) +} + +func BadRequestController(ctx *fiber.Ctx, err error) error { + return GenericErrorController(ctx, "Bad Request", err, fiber.StatusBadRequest) +} + +func UnauthorizedController(ctx *fiber.Ctx, err error) error { + return GenericErrorController(ctx, "Unauthorized", err, fiber.StatusUnauthorized) +} + +func ForbiddenController(ctx *fiber.Ctx, err error) error { + return GenericErrorController(ctx, "Forbidden", err, fiber.StatusForbidden) +} -- cgit v1.2.3