Skip to content

Plataforma técnica · Sevastopol

Settings en Sevastopol

Islands Configuracion 2fa

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.

DecisiónMotivo
Tres acciones en una sola páginaSetup / enable / disable forman un único flujo de configuración. Compartir layout permite mostrar siempre el estado actual sin navegar.
Status note como hilo conductorUn 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 juntosEl QR se renderiza inline; el secret aparece como fallback para apps que no leen QR. Ambos copiables al clipboard.
Backup codes ocultos por defaultToggle “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 rojoEl recuadro de “Desactivar 2FA” usa bg-red-500/5 + workspaceDangerButtonClass para marcar visualmente la severidad.
pushToast vía CustomEvent("toast:push") globalLa island no envuelve ToastProvider propio — usa el bus de eventos del shell. Patrón distinto al resto de islands.
EstadoIndicadorAcciones disponibles
Sin setup iniciadoPill ámbar “Pendiente”.Solo iniciar setup.
Setup generado, sin confirmarPill ámbar “Pendiente” + QR visible.Confirmar, regenerar setup.
2FA activoPill verde “2FA activo”.Mostrar backup codes (si recién enabled), desactivar.

Ninguno. La island no usa useActiveTenant ni useActivePeriod — el 2FA es per-usuario y se identifica por la sesión autenticada.

Usa los tokens de WorkspaceTheme directamente (sin alias):

ComponenteUso
workspacePrimaryButtonClassBotones de acción (Iniciar setup, Confirmar).
workspaceSecondaryButtonClassCopiar / Revelar / Ocultar.
workspaceDangerButtonClassDesactivar 2FA.

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.

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.

  • 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í.