package router

import (
	"github.com/casdoor/casdoor-go-sdk/casdoorsdk"
	"github.com/gofiber/fiber/v2"
	"github.com/rs/zerolog/log"
)

var userClaimsKey = struct{}{}

func JWTRequired(c *fiber.Ctx) error {
	jwt := c.Get("Authorization")
	if jwt == "" {
		return fiber.ErrUnauthorized
	}
	claims, err := casdoorsdk.ParseJwtToken(jwt)
	if err != nil {
		log.Ctx(c.UserContext()).Error().Err(err).Msg("Unauthorized user")
		return fiber.ErrUnauthorized
	}
	c.Locals(userClaimsKey, claims)
	return nil
}