espace-paie-odentas/TEST_COMPLETE_SIGNATURE.md

247 lines
7.6 KiB
Markdown

# 🧪 Test Complet Odentas Sign + Vérification + Ledger
## 📋 Prérequis
1. **Serveur Next.js lancé** : `npm run dev`
2. **Variables d'environnement** configurées dans `.env.local` :
```bash
AWS_ACCESS_KEY_ID=...
AWS_SECRET_ACCESS_KEY=...
AWS_REGION=eu-west-3
ODENTAS_SIGN_BUCKET=odentas-sign
AWS_LAMBDA_SIGN_FUNCTION=odentas-pades-sign
NEXT_PUBLIC_APP_URL=http://localhost:3000
```
3. **PDF de test** : `test-contrat.pdf` à la racine du projet
4. **Migration appliquée** : `20251029_add_signature_metadata_to_signers.sql`
## 🚀 Lancer le test
```bash
node test-odentas-sign-complete.js
```
## 📖 Ce que fait le script
### Étape 1 : Préparation (automatique)
- ✅ Upload du PDF vers S3 (`source/test/TEST-xxx.pdf`)
- ✅ Création de la demande de signature avec 2 signataires
### Étape 2 : Affichage des liens
Le script affiche les 2 liens de signature :
```
1. Employeur - Odentas Paie
http://localhost:3000/signer/[request-id]/[employeur-id]
2. Salarié - Renaud Breviere
http://localhost:3000/signer/[request-id]/[salarie-id]
```
### Étape 3 : Signature manuelle (VOUS)
#### 3.1. Ouvrir le premier lien (Employeur)
1. Le navigateur s'ouvre sur la page de vérification OTP
2. Cliquer sur "Envoyer le code"
3. **Récupérer le code OTP dans les logs du serveur** :
```
[OTP] 🔐 CODE OTP GÉNÉRÉ (MODE TEST): 123456
```
4. Entrer le code dans l'interface
5. Dessiner la signature
6. Valider
#### 3.2. Ouvrir le second lien (Salarié)
1. Même processus que l'employeur
2. Nouveau code OTP dans les logs
3. Signer et valider
### Étape 4 : Attente automatique
Le script vérifie toutes les 5 secondes si les 2 signatures sont complètes :
```
⏳ Signatures: 0/2
⏳ Signatures: 1/2
⏳ Signatures: 2/2
✅ Toutes les signatures sont complètes !
```
### Étape 5 : Scellement PAdES (automatique)
- 🔒 Appel de l'API `/api/odentas-sign/seal-document`
- 🔒 Invocation de la Lambda `odentas-pades-sign` 2 fois :
1. Signature Employeur avec `/Name="Odentas Paie"` et `/Reason="Signature employeur"`
2. Signature Salarié avec `/Name="Renaud Breviere"` et `/Reason="Signature salarié"`
- ✅ PDF final avec 2 signatures PAdES : `signed-pades/TEST-xxx-final.pdf`
### Étape 6 : Création de la preuve (automatique)
- 📜 Appel de l'API `/api/signatures/create-verification`
- 📜 Création du ledger immuable dans S3 Compliance Lock :
- **Bucket** : `odentas-signatures-ledger`
- **Clé** : `verifications/[verification-id].json`
- **Retention** : 10 ans (mode COMPLIANCE)
- 📄 Génération du PDF de preuve avec QR code
- ✅ Enregistrement dans Supabase `signature_verifications`
### Étape 7 : Résultats
```
🎉 TEST COMPLET RÉUSSI !
🔗 LIEN DE VÉRIFICATION PUBLIQUE:
http://localhost:3000/verify/[verification-id]
🔒 LEDGER IMMUABLE (S3 Compliance Lock):
Clé S3: verifications/abc-123.json
Verrouillé jusqu'au: 29/10/2035 14:30:00
Mode: COMPLIANCE (aucune suppression possible)
📄 PDF DE PREUVE:
https://odentas-sign.s3.eu-west-3.amazonaws.com/evidence/proofs/...
```
## 🔍 Vérifier les résultats
### 1. Page de vérification publique
Ouvrir le lien affiché : `http://localhost:3000/verify/[id]`
Vous devriez voir :
- ✅ Badge "Signature Électronique Valide"
- ✅ Badges de conformité (PAdES ETSI, RSA 2048, SHA-256)
- ✅ Informations du document
- ✅ Sceau électronique Odentas
- ✅ Horodatage
-**Section "Preuve Immuable"** avec :
- Statut du verrouillage (Actif)
- Intégrité vérifiée
- Date d'expiration (10 ans)
- Clé S3 du ledger
### 2. Dans Supabase
```sql
-- Voir la demande
SELECT * FROM sign_requests WHERE ref LIKE 'TEST-%' ORDER BY created_at DESC LIMIT 1;
-- Voir les signataires (avec les nouvelles colonnes)
SELECT
role,
name,
signature_name, -- ← Nouveau
signature_reason, -- ← Nouveau
signed_at
FROM signers
WHERE request_id = '[request_id]';
-- Voir la preuve de vérification
SELECT * FROM signature_verifications ORDER BY created_at DESC LIMIT 1;
-- Vérifier le ledger
SELECT
id,
s3_ledger_key,
s3_ledger_locked_until,
s3_ledger_integrity_verified
FROM signature_verifications
WHERE s3_ledger_key IS NOT NULL
ORDER BY created_at DESC LIMIT 1;
```
### 3. Dans S3
```bash
# Voir le PDF signé final
aws s3 ls s3://odentas-sign/signed-pades/ --recursive | grep TEST
# Voir le ledger immuable
aws s3 ls s3://odentas-signatures-ledger/verifications/ --recursive
# Télécharger le ledger pour inspection
aws s3 cp s3://odentas-signatures-ledger/verifications/[id].json ./ledger-test.json
# Vérifier l'Object Lock
aws s3api head-object \
--bucket odentas-signatures-ledger \
--key verifications/[id].json
```
### 4. Dans Adobe Acrobat
1. Télécharger le PDF signé final depuis S3
2. Ouvrir dans Adobe Acrobat Reader
3. Panneau "Signatures" (à gauche) :
```
✓ Odentas Media SAS
Nom: Odentas Paie ← signature_name
Raison: Signature employeur ← signature_reason
✓ Odentas Media SAS
Nom: Renaud Breviere ← signature_name
Raison: Signature salarié ← signature_reason
```
## 🐛 Dépannage
### Le code OTP n'apparaît pas dans les logs
- Vérifier que les emails sont en mode TEST (`paie@odentas.fr` ou `@example.com`)
- Regarder les logs du serveur Next.js dans le terminal
### Erreur "Lambda invocation failed"
- Vérifier que la Lambda `odentas-pades-sign` existe
- Vérifier que les credentials AWS sont corrects
- Vérifier que la Lambda accepte le paramètre `signatureMetadata`
### Erreur "S3 bucket not found"
- Le bucket `odentas-signatures-ledger` doit exister avec Object Lock activé
- Créer avec :
```bash
aws s3api create-bucket \
--bucket odentas-signatures-ledger \
--region eu-west-3 \
--create-bucket-configuration LocationConstraint=eu-west-3 \
--object-lock-enabled-for-bucket
```
### Le script reste bloqué sur "En attente des signatures"
- Ouvrir les liens de signature dans le navigateur
- Signer manuellement les deux parties
- Le script vérifie toutes les 5 secondes
## 📊 Données de test générées
Après le test, vous aurez :
- `test-complete-info.json` : Infos de la demande de signature
- Entrée dans `sign_requests` (ref: TEST-xxx)
- 2 entrées dans `signers` avec `signature_name` et `signature_reason`
- Entrée dans `sign_assets` (PDF scellé)
- Entrée dans `signature_verifications` (preuve publique)
- Ledger JSON dans S3 Compliance Lock (10 ans de retention)
## 🧹 Nettoyage
```sql
-- Supprimer les données de test
DELETE FROM signature_verifications WHERE document_name LIKE '%Test%';
DELETE FROM sign_requests WHERE ref LIKE 'TEST-%';
```
```bash
# Supprimer les fichiers S3 (attention : le ledger est IMMUTABLE !)
aws s3 rm s3://odentas-sign/source/test/ --recursive
aws s3 rm s3://odentas-sign/signed-pades/ --recursive --exclude "*" --include "TEST-*"
# Le ledger ne peut PAS être supprimé (Compliance Lock activé)
# Il expirera automatiquement après 10 ans
```
## ✅ Critères de succès
Le test est réussi si :
1. ✅ Les 2 liens de signature s'affichent
2. ✅ Les 2 signatures sont enregistrées
3. ✅ Le PDF est scellé avec 2 signatures PAdES
4. ✅ La preuve de vérification est créée
5. ✅ Le ledger S3 Compliance Lock est créé (vérifiable dans S3)
6. ✅ La page de vérification affiche correctement toutes les infos
7. ✅ Le PDF ouvert dans Adobe montre 2 signatures avec les bons noms
8. ✅ Le ledger est verrouillé pour 10 ans (mode COMPLIANCE)
---
**Note** : Ce test utilise des données réelles (vraie Lambda, vrai S3, vraie signature PAdES). Le ledger créé sera **réellement immutable pendant 10 ans**.