package middleware import ( "strings" "server/internal/auth" "github.com/gofiber/fiber/v2" ) func RequireStaff() fiber.Handler { return func(c *fiber.Ctx) error { header := c.Get("Authorization") var token string if header != "" && strings.HasPrefix(header, "Bearer ") { token = strings.TrimSpace(strings.TrimPrefix(header, "Bearer ")) } else { token = c.Query("token") } if token == "" { return c.Status(fiber.StatusUnauthorized).JSON(fiber.Map{"error": "Unauthorized"}) } claims, err := auth.ParseToken(token) if err != nil { return c.Status(fiber.StatusUnauthorized).JSON(fiber.Map{"error": "Invalid or expired token"}) } c.Locals("staffId", claims.StaffID) c.Locals("staffEmail", claims.Email) return c.Next() } } func StaffIDFromCtx(c *fiber.Ctx) uint { if v, ok := c.Locals("staffId").(uint); ok { return v } return 0 }