Plataforma técnica · Sevastopol
Settings en Sevastopol
Islands Configuracion 2fa
Propósito
Section titled “Propósito”TwoFactorSetupIsland es la única island del dominio settings. Vive en la página /settings (pages/settings.astro) y gestiona el segundo factor de autenticación del usuario autenticado — no del tenant ni del período.
Cubre tres acciones independientes:
- Iniciar setup — generar QR + backup codes.
- Confirmar — habilitar el factor con un código TOTP.
- Desactivar — apagar el factor.
No usa useActiveTenant ni useActivePeriod — el segundo factor pertenece al usuario, no a la sesión contable.
Decisiones de UX
Section titled “Decisiones de UX”| Decisión | Motivo |
|---|---|
| Tres acciones en una sola página | Setup / enable / disable forman un único flujo de configuración. Compartir layout permite mostrar siempre el estado actual sin navegar. |
| Status note como hilo conductor | Un solo bloque cambia con cada acción (“Inicia el setup…”, “QR generado…”, “2FA quedó habilitado…”, “2FA fue desactivado…”). Reduce ruido visual vs. múltiples banners. |
| QR + secret manual juntos | El QR se renderiza inline; el secret aparece como fallback para apps que no leen QR. Ambos copiables al clipboard. |
| Backup codes ocultos por default | Toggle “Revelar / Ocultar” antes de mostrar. Evita captura accidental en pantalla compartida. |
| Botón principal con label dinámico | ”Generar QR” → “Generando…” → “Regenerar setup”. El operador entiende qué hace sin texto adicional. |
| Panel destructivo en rojo | El recuadro de “Desactivar 2FA” usa bg-red-500/5 + workspaceDangerButtonClass para marcar visualmente la severidad. |
pushToast vía CustomEvent("toast:push") global | La island no envuelve ToastProvider propio — usa el bus de eventos del shell. Patrón distinto al resto de islands. |
Estados
Section titled “Estados”| Estado | Indicador | Acciones disponibles |
|---|---|---|
| Sin setup iniciado | Pill ámbar “Pendiente”. | Solo iniciar setup. |
| Setup generado, sin confirmar | Pill ámbar “Pendiente” + QR visible. | Confirmar, regenerar setup. |
2FA activo | Pill verde “2FA activo”. | Mostrar backup codes (si recién enabled), desactivar. |
Hooks compartidos
Section titled “Hooks compartidos”Ninguno. La island no usa useActiveTenant ni useActivePeriod — el 2FA es per-usuario y se identifica por la sesión autenticada.
Lenguaje compartido
Section titled “Lenguaje compartido”Usa los tokens de WorkspaceTheme directamente (sin alias):
| Componente | Uso |
|---|---|
workspacePrimaryButtonClass | Botones de acción (Iniciar setup, Confirmar). |
workspaceSecondaryButtonClass | Copiar / Revelar / Ocultar. |
workspaceDangerButtonClass | Desactivar 2FA. |
Toast bus
Section titled “Toast bus”pushToast(message, kind) despacha CustomEvent("toast:push") al window. El shell de la página lo escucha y renderiza. Sin ToastProvider envolvente — patrón distinto del resto de islands del sistema.
Backend de referencia
Section titled “Backend de referencia”El backend de 2FA es responsabilidad del Orchestrator (proxiado vía /api/auth/2fa/*). La política completa, contratos de endpoint y reglas de rotación de backup codes viven en docs internas — fuera de este sitio público.
Relación con otros dominios
Section titled “Relación con otros dominios”- Auth del Orchestrator emite los códigos y valida en login.
- Seguridad (sección hermana) documenta la política pública del segundo factor.
- Command (Sessions) puede invalidar sesiones de un usuario tras enable/disable según política.
Estas relaciones se documentan en cada destino, no aquí.