package middleware import ( "strconv" "github.com/gofiber/fiber/v2" "github.com/gofiber/storage/redis/v3" ) func AuthMiddleware(redisClient *redis.Storage) fiber.Handler { return func(c *fiber.Ctx) error { token := c.Get("Authorization") if token == "" { return c.Status(fiber.StatusUnauthorized).JSON(fiber.Map{"error": "Missing authorization token"}) } userIDBytes, err := redisClient.Get(token) if err != nil { return c.Status(fiber.StatusUnauthorized).JSON(fiber.Map{"error": "Invalid or expired token"}) } userIDStr := string(userIDBytes) userID, err := strconv.ParseUint(userIDStr, 10, 64) if err != nil { return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": "Invalid user ID format"}) } c.Locals("user_id", uint(userID)) return c.Next() } }