1.5 KiB
1.5 KiB
Architect — CLUB-004
Objetivo
Permitir que un socio anónimo recupere su membresía en un dispositivo nuevo usando códigos de recuperación.
Diseño
Flujo
- Alta: al unirse al Club se generan 3 códigos (mostrados una sola vez).
- Generar más:
POST /club/recovery-codes/generate(autenticado con device token o cuenta). - Listar:
GET /club/recovery-codesdevuelve códigos activos (fingerprints, nunca plaintext). - Recuperar:
POST /club/recoveracepta{ code, newDeviceToken }→ consume código + vincula nuevo dispositivo.
Formato de código
XXXX-XXXX-XXXX-XXXX-XXXX-XXXX (6 grupos de 4 chars alfanuméricos, sin I,O,0,1 para legibilidad).
~44 bits de entropía (~10⁹⁶ combinaciones).
Almacenamiento
code_hash = SHA-256(plaintext)— para verificacióncode_fingerprint = SHA-256(UPPER(plaintext))[0:16]— para lookups rápidos y dedupexpires_at = now() + 30 díasused_at = NULLinitially
Seguridad
- Código hasheado, nunca se guarda plaintext
FOR UPDATEen la misma transacción para evitar race conditions- Valida que no esté usado ni caducado antes de vincular
Endpoints nuevos
| Método | Ruta | Auth | Descripción |
|---|---|---|---|
| POST | /club/recovery-codes/generate |
device token o sesión | Generar códigos |
| GET | /club/recovery-codes |
device token o sesión | Listar códigos activos |
| POST | /club/recover |
ninguno (código + token) | Recuperar con código |