fix(api-keys): no se podía asignar el scope vcard

La pantalla lo ofrecía y las rutas de /api/v2/vcard lo exigen, pero la lista de
scopes válidos del backend nunca lo incluyó: crear la llave devolvía "scope
inválido: vcard" y la integración de vCard no tenía forma de autenticarse.

La lista estaba escrita dos veces —una en Go y otra en el HTML— y se
desincronizaron. Ahora la vista la pide al backend, así que no puede volver a
ofrecer algo que el backend rechace, y un test fija que todo scope exigido por
las rutas se pueda asignar.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Lizandro Guarnizo
2026-08-17 20:49:07 -05:00
co-authored by Claude Opus 5
parent 4135850e5b
commit dda5898c0d
4 changed files with 43 additions and 2 deletions
@@ -2,6 +2,7 @@ package controllers
import (
"math"
"sort"
"strconv"
"strings"
@@ -17,6 +18,20 @@ var scopesValidos = map[string]bool{
"query_runner": true,
"usuarios": true,
"pasarelas": true,
"vcard": true,
}
// ScopesDisponibles devuelve la lista para que la vista la muestre en vez de
// tener su propia copia: la copia de la vista ya ofreció "vcard" cuando el
// backend todavía lo rechazaba.
// GET /app/api-keys/scopes
func ScopesDisponibles(c *fiber.Ctx) error {
lista := make([]string, 0, len(scopesValidos))
for s := range scopesValidos {
lista = append(lista, s)
}
sort.Strings(lista)
return c.JSON(lista)
}
// ApiKeysIndex renderiza el panel de administración de API keys.