package server import ( "gitea.pena/PenaSide/verification/internal/models" "strings" "github.com/gofiber/fiber/v2" "gitea.pena/PenaSide/common/jwt_adapter" ) func LocalJwt() fiber.Handler { return func(c *fiber.Ctx) error { if c.Get("LocalUserID") != "" { c.Locals("userID", c.Get("LocalUserID")) } return c.Next() } } func Jwt() fiber.Handler { return func(c *fiber.Ctx) error { // check LocalJwt if c.Locals(models.UserCtxKey) != nil { return c.Next() } jwt, err := jwt_adapter.Decode(strings.ReplaceAll(c.Get(jwt_adapter.DefaultHeaderKey), "Bearer ", "")) if err != nil { return fiber.NewError(fiber.StatusUnauthorized, err.Error()) } err = jwt.Validate() if err != nil { return fiber.NewError(fiber.StatusUnauthorized, err.Error()) } if jwt.GetUserID() == "" { return fiber.NewError(fiber.StatusUnauthorized, "empty user") } c.Locals(models.UserCtxKey, jwt.GetUserID()) c.Locals(models.TokenCtxKey, c.Get(jwt_adapter.DefaultHeaderKey)) return c.Next() } }