package middlewares import ( "backend/pkg/jwt" "strings" "github.com/gofiber/fiber/v2" ) const userClaimsKey = "User-Claims" func JWTAuthMiddleware(secret []byte) fiber.Handler { return func(c *fiber.Ctx) error { authHeader := c.Get("Authorization") if authHeader == "" || !strings.HasPrefix(authHeader, "Bearer ") { return c.Status(fiber.StatusUnauthorized).JSON(fiber.Map{ "error": "missing or invalid Authorization header", }) } tokenString := strings.TrimPrefix(authHeader, "Bearer ") claims, err := jwt.ParseToken(tokenString, secret) if err != nil || claims == nil { return c.Status(fiber.StatusUnauthorized).JSON(fiber.Map{ "error": "invalid or expired token", }) } c.Locals(userClaimsKey, claims) return c.Next() } } func GetUserClaims(c *fiber.Ctx) *jwt.UserClaims { claims, _ := c.Locals(userClaimsKey).(*jwt.UserClaims) return claims }