feat(api): monta los endpoints VCard en /api/v2 con scope propio
La integración VCard vivía solo en /api/v1, que autentica por cookie de sesión: obliga a manejar cookie jar, no permite allowlist por IP y no se puede revocar sin tocar la contraseña del usuario (ver docs/api-v1-contrato.md, punto 7). Ahora los mismos controladores están también bajo /api/v2/vcard/* con Bearer + IP + scope, que es lo que administra la pantalla /app/api-keys. El scope "vcard" acota la llave a estos 12 endpoints: sin él, esa integración tendría acceso a los otros ~300 de v2. /api/v1 se mantiene intacto — esto es un camino nuevo, no un reemplazo forzado, así que lo que ya está instalado sigue andando mientras migran. Se agregan dos chequeos porque el compilador no ve ninguno de los dos errores: que las 12 rutas queden registradas con su método y path (un typo se descubriría recién con un 404 del lado del integrador), y que todas figuren en el spec de /api/v2, que se mantiene a mano y se desincroniza en silencio. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
ff4237eced
commit
2e3be1ca92
@@ -3,6 +3,7 @@ package routes
|
||||
import (
|
||||
"github.com/gofiber/fiber/v2"
|
||||
"github.com/sujit-baniya/fiber-boilerplate/rest/controllers"
|
||||
apiControllers "github.com/sujit-baniya/fiber-boilerplate/rest/controllers/api"
|
||||
"github.com/sujit-baniya/fiber-boilerplate/rest/middlewares"
|
||||
)
|
||||
|
||||
@@ -377,6 +378,33 @@ func AdminApiRoutes(api fiber.Router) {
|
||||
qr.Get("/history", controllers.GetHistory)
|
||||
qr.Get("/columns", controllers.GetTableColumnsHandler)
|
||||
|
||||
// ─── VCard: QR, VCF y cobros ─────────────────────────────────────────────
|
||||
// Los mismos controladores que /api/v1, montados acá para que una
|
||||
// integración externa pueda autenticarse con Bearer + IP en vez de la
|
||||
// cookie de sesión (ver docs/api-v1-contrato.md, punto 7).
|
||||
//
|
||||
// El scope "vcard" acota la llave a esto y nada más: sin él, la
|
||||
// integración de VCard tendría acceso a los otros 300 endpoints de v2.
|
||||
//
|
||||
// /api/v1 se mantiene funcionando tal cual para no romper lo que ya está
|
||||
// instalado; esto es el camino nuevo, no un reemplazo forzado.
|
||||
vcard := h.Group("/vcard", middlewares.RequireScope("vcard"))
|
||||
vcard.Post("/qr-tmp", apiControllers.CreateQrTmp)
|
||||
vcard.Post("/qr", apiControllers.CreateQr) // responde image/webp, no JSON
|
||||
vcard.Post("/qr-url", apiControllers.CreateUrlQr)
|
||||
vcard.Post("/vcf", apiControllers.CreateVcf)
|
||||
|
||||
// dLocal y Rapyd bajo el mismo scope: son las operaciones de cobro que
|
||||
// acompañan a la VCard, y quien integra una necesita la otra.
|
||||
vcard.Post("/dlocal/planes", apiControllers.CreatePlan)
|
||||
vcard.Get("/dlocal/planes", apiControllers.SeePlanes)
|
||||
vcard.Get("/dlocal/planes/:planID", apiControllers.SeePlan)
|
||||
vcard.Patch("/dlocal/planes/:planID", apiControllers.UpdatedPlan)
|
||||
vcard.Patch("/dlocal/planes/:planId/suscripciones/:subscriptionId/desactivar", apiControllers.DeactivatePlan)
|
||||
vcard.Get("/dlocal/suscripciones/:subscriptionId/ejecuciones/:invoiceId", apiControllers.SeeSubscription)
|
||||
vcard.Post("/dlocal/pagos", apiControllers.CreatePago)
|
||||
vcard.Post("/rapyd/wallets", apiControllers.MakeWallet)
|
||||
|
||||
// ─── Hostinger ───────────────────────────────────────────────────────────
|
||||
h.Get("/hostinger/vps", controllers.GetHostingerVPS)
|
||||
h.Get("/hostinger/domains", controllers.GetHostingerDomains)
|
||||
|
||||
Reference in New Issue
Block a user