/* * Copyright (C) 2024 Jonni Liljamo <jonni@liljamo.com> * * This file is licensed under AGPL-3.0-or-later, see NOTICE and LICENSE for * more information. */ package middlewares import ( "net/http" "git.src.quest/~liljamo/felu/internal/db" "github.com/gin-gonic/gin" ) // AdminOnly returns a gin middleware for checking if a user is an admin. func AdminOnly() gin.HandlerFunc { return func(c *gin.Context) { userID, exists := c.Get("user_id") if exists { user, err := db.FetchUserWithID(userID.(string)) if err == nil { if user.IsAdmin { c.Next() } else { c.Redirect(http.StatusTemporaryRedirect, "/manage") c.Abort() } } else { c.String(http.StatusInternalServerError, "This should not be possible, but don't quote me on that, S01E02") c.Abort() } } else { c.String(http.StatusInternalServerError, "This should not be possible, but don't quote me on that, S01E01") c.Abort() } } }