espace-paie-odentas/TEST_COMPLETE_SIGNATURE.md

7.6 KiB

🧪 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 :
    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

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

-- 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

# 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 :
    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

-- Supprimer les données de test
DELETE FROM signature_verifications WHERE document_name LIKE '%Test%';
DELETE FROM sign_requests WHERE ref LIKE 'TEST-%';
# 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.