aboutsummaryrefslogtreecommitdiff
path: root/controllers/errors.go
diff options
context:
space:
mode:
Diffstat (limited to 'controllers/errors.go')
-rw-r--r--controllers/errors.go61
1 files changed, 61 insertions, 0 deletions
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)
+}