package middlewares import ( "strings" "github.com/gofiber/fiber/v2" "github.com/sujit-baniya/fiber-boilerplate/pkg/models" ) // AuthServicioPago protege los endpoints públicos de la API de pagos externos // (/api/v1/pagos-externos/*). Es independiente de la sesión/JWT interna: el // caller es una aplicación de un tercero que solo tiene un token largo // (Bearer) y opcionalmente está restringido a una o varias IPs/CIDRs. Si pasa, // deja el *models.ServicioPagoExterno resuelto en Locals("servicio_pago"). func AuthServicioPago(c *fiber.Ctx) error { auth := c.Get("Authorization") token := strings.TrimSpace(strings.TrimPrefix(auth, "Bearer ")) if token == "" || token == auth { return c.Status(fiber.StatusUnauthorized).JSON(fiber.Map{"error": true, "message": "Falta el header Authorization: Bearer "}) } servicio, err := models.FindServicioPagoExternoActivoByToken(token) if err != nil { return c.Status(fiber.StatusUnauthorized).JSON(fiber.Map{"error": true, "message": "Token inválido o servicio inactivo"}) } if !servicio.IPPermitida(IPDelCliente(c)) { return c.Status(fiber.StatusForbidden).JSON(fiber.Map{"error": true, "message": "IP no autorizada para este servicio"}) } c.Locals("servicio_pago", servicio) return c.Next() }