# 🧪 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**.