Initial LinkedSign platform
This commit is contained in:
@@ -0,0 +1,145 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user