146 lines
2.7 KiB
Markdown
146 lines
2.7 KiB
Markdown
# LinkedSign Backend - Resumen Actual
|
|
|
|
Resumen corto del estado actual del backend que usan la web y la app Android.
|
|
|
|
## Módulos activos
|
|
|
|
- `auth`
|
|
- `users`
|
|
- `documents`
|
|
- `certificates`
|
|
- `signatures`
|
|
- `mail`
|
|
- `audit`
|
|
- `health`
|
|
|
|
## Seguridad aplicada
|
|
|
|
- `helmet`
|
|
- `cors` restringido
|
|
- rate limit en login
|
|
- JWT access + refresh
|
|
- contraseñas con `bcrypt`
|
|
- validación fuerte de contraseña
|
|
- validación de PDF
|
|
- control de acceso por usuario autenticado
|
|
- auditoría de login, documentos, certificados y firmas
|
|
|
|
## Autenticación
|
|
|
|
- registro con correo + contraseña
|
|
- validación del correo por enlace
|
|
- reenvío automático del correo si el usuario intenta entrar sin validar
|
|
- `GET /auth/me`
|
|
- logout y refresh token
|
|
- cambio de contraseña con confirmación por correo
|
|
|
|
## Documentos
|
|
|
|
- subida de PDF original
|
|
- listado
|
|
- descarga
|
|
- eliminación
|
|
- cálculo de hash SHA-256 del documento
|
|
|
|
Ruta de almacenamiento:
|
|
|
|
```text
|
|
/storage/documentos/YYYY/MM/
|
|
```
|
|
|
|
## Certificados
|
|
|
|
- subida de `.p12` / `.pfx`
|
|
- lectura de sujeto, emisor y vigencia
|
|
- detección de cantidad de certificados embebidos
|
|
- indicador de cadena embebida
|
|
- listado y eliminación
|
|
|
|
Ruta de almacenamiento:
|
|
|
|
```text
|
|
/backend/storage/certificates/users/{userId}
|
|
```
|
|
|
|
## Firmas
|
|
|
|
- firmado de PDF con certificado del usuario
|
|
- estilos visuales:
|
|
- `classic`
|
|
- `qr`
|
|
- `professional`
|
|
- `image`
|
|
- QR configurable:
|
|
- izquierda / derecha
|
|
- borde / sin borde
|
|
- fondo suave / transparente
|
|
- nombre del firmado:
|
|
- `nombreOriginal_yyyymmddhhmm.pdf`
|
|
- listado de documentos firmados
|
|
- descarga del firmado
|
|
- verificación pública por QR
|
|
|
|
## Verificación QR
|
|
|
|
Cada firma puede generar:
|
|
|
|
- `verificationCode`
|
|
- `verificationUrl`
|
|
|
|
El QR apunta a la verificación pública de LinkedSign y muestra:
|
|
|
|
- estado de validez interna
|
|
- firmante
|
|
- emisor del certificado
|
|
- documento
|
|
- fecha de firma
|
|
- razón y ubicación
|
|
- hash de integridad
|
|
|
|
## Preferencias visuales
|
|
|
|
Se guardan por usuario:
|
|
|
|
- `signatureStyle`
|
|
- `qrPosition`
|
|
- `qrBackground`
|
|
- `qrBorder`
|
|
- `signatureImageBase64`
|
|
|
|
Persistencia actual:
|
|
|
|
```text
|
|
backend/storage/preferences/signature-styles.json
|
|
```
|
|
|
|
## Auditoría
|
|
|
|
Eventos almacenados en:
|
|
|
|
```text
|
|
backend/logs/audit.log
|
|
```
|
|
|
|
Se registran, entre otros:
|
|
|
|
- `USER_REGISTERED`
|
|
- `LOGIN_SUCCESS`
|
|
- `LOGIN_FAILED`
|
|
- `VERIFICATION_EMAIL_RESENT`
|
|
- `PASSWORD_CHANGE_REQUESTED`
|
|
- `PASSWORD_CHANGED`
|
|
- `DOCUMENT_UPLOAD`
|
|
- `DOCUMENT_DELETE`
|
|
- `CERTIFICATE_UPLOAD`
|
|
- `CERTIFICATE_DELETE`
|
|
- `DOCUMENT_SIGNED`
|
|
|
|
## Integración con Android
|
|
|
|
La app móvil en [android/README.md](/home/mgonzalez/desarrollo/react/linkedsign/android/README.md):
|
|
|
|
- usa esta misma API
|
|
- comparte autenticación con la web
|
|
- guarda sesión en el dispositivo
|
|
- sincroniza documentos, certificados y firmados bajo petición del usuario
|