247 lines
7.6 KiB
Markdown
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**.
|