# language: fr

@api @authentication @2fa @security @mvp
Fonctionnalité: Appareils de confiance et authentification à deux facteurs

  En tant qu'utilisateur soucieux de la sécurité
  Je veux gérer mes appareils de confiance et activer l'authentification à deux facteurs
  Afin de protéger mon compte contre les accès non autorisés

  Contexte:
    Étant donné que le système supporte les méthodes 2FA suivantes:
      | Méthode              | Disponibilité | Recommandée |
      | Application TOTP     | Oui           | Oui         |
      | SMS                  | Oui           | Non         |
      | Email                | Oui           | Non         |
      | Clés de sécurité USB | Phase 2       | Oui         |

  Scénario: Activation de l'authentification à deux facteurs par TOTP
    Étant donné un utilisateur "alice@roadwave.fr" sans 2FA activé
    Quand l'utilisateur accède à "Mon compte > Sécurité > Authentification à deux facteurs"
    Et clique sur "Activer l'authentification à deux facteurs"
    Alors le système génère un QR code avec secret TOTP
    Et affiche le secret en texte clair pour saisie manuelle
    Et affiche les instructions: "Scannez ce QR code avec Google Authenticator, Authy ou Microsoft Authenticator"
    Et l'utilisateur scanne le QR code avec son application TOTP
    Et saisit le code à 6 chiffres généré par l'application
    Alors le 2FA est activé
    Et 10 codes de récupération à usage unique sont générés
    Et les codes de récupération sont affichés avec avertissement: "Conservez ces codes en lieu sûr"
    Et un événement "2FA_ENABLED" est enregistré
    Et un email de confirmation est envoyé
    Et la métrique "auth.2fa.enabled" est incrémentée

  Scénario: Connexion avec 2FA depuis un nouvel appareil
    Étant donné un utilisateur "bob@roadwave.fr" avec 2FA activé
    Et aucun appareil de confiance enregistré
    Quand l'utilisateur se connecte depuis un iPhone avec email/mot de passe corrects
    Alors une page de vérification 2FA s'affiche
    Et l'utilisateur saisit le code à 6 chiffres de son application TOTP
    Et coche l'option "Faire confiance à cet appareil pour 30 jours"
    Alors la connexion est réussie
    Et l'iPhone est enregistré comme appareil de confiance
    Et un token d'appareil de confiance est stocké localement (durée: 30 jours)
    Et un événement "2FA_SUCCESS_NEW_TRUSTED_DEVICE" est enregistré
    Et un email est envoyé: "Nouvel appareil de confiance ajouté: iPhone"
    Et la métrique "auth.2fa.trusted_device.added" est incrémentée

  Scénario: Connexion depuis un appareil de confiance existant
    Étant donné un utilisateur "charlie@roadwave.fr" avec 2FA activé
    Et un iPhone enregistré comme appareil de confiance il y a 10 jours
    Quand l'utilisateur se connecte depuis cet iPhone avec email/mot de passe corrects
    Alors la connexion est réussie immédiatement sans demander le code 2FA
    Et un événement "LOGIN_TRUSTED_DEVICE" est enregistré
    Et la date de dernière utilisation de l'appareil de confiance est mise à jour
    Et la métrique "auth.2fa.trusted_device.used" est incrémentée

  Scénario: Expiration automatique d'un appareil de confiance après 30 jours
    Étant donné un utilisateur "david@roadwave.fr" avec 2FA activé
    Et un iPad enregistré comme appareil de confiance il y a 31 jours
    Quand l'utilisateur se connecte depuis cet iPad avec email/mot de passe corrects
    Alors une page de vérification 2FA s'affiche
    Et l'utilisateur doit saisir le code TOTP
    Et un message s'affiche: "Votre appareil de confiance a expiré après 30 jours. Veuillez vous authentifier à nouveau."
    Et l'ancien token d'appareil de confiance est révoqué
    Et un événement "TRUSTED_DEVICE_EXPIRED" est enregistré
    Et la métrique "auth.2fa.trusted_device.expired" est incrémentée

  Scénario: Gestion de la liste des appareils de confiance
    Étant donné un utilisateur "eve@roadwave.fr" avec 2FA activé
    Et 3 appareils de confiance enregistrés
    Quand l'utilisateur accède à "Mon compte > Sécurité > Appareils de confiance"
    Alors l'utilisateur voit la liste suivante:
      | Appareil       | Ajouté le      | Dernière utilisation | Expire le      | Actions         |
      | iPhone 14 Pro  | 2026-01-15     | Il y a 2 heures      | 2026-02-14     | [Révoquer]      |
      | iPad Air       | 2026-01-10     | Il y a 5 jours       | 2026-02-09     | [Révoquer]      |
      | MacBook Pro    | 2026-01-05     | Il y a 10 jours      | 2026-02-04     | [Révoquer]      |
    Et un bouton "Révoquer tous les appareils de confiance" est disponible
    Et un compteur affiche "3 appareils de confiance actifs"

  Scénario: Révocation manuelle d'un appareil de confiance
    Étant donné un utilisateur "frank@roadwave.fr" avec 2FA activé
    Et un MacBook Pro enregistré comme appareil de confiance
    Quand l'utilisateur clique sur "Révoquer" pour le MacBook Pro
    Alors l'appareil de confiance est immédiatement révoqué
    Et le token d'appareil de confiance est invalidé
    Et un événement "TRUSTED_DEVICE_REVOKED_MANUAL" est enregistré
    Et un email est envoyé: "Vous avez révoqué l'appareil de confiance: MacBook Pro"
    Et lors de la prochaine connexion, le code 2FA sera demandé
    Et la métrique "auth.2fa.trusted_device.revoked" est incrémentée

  Scénario: Utilisation d'un code de récupération en cas de perte de l'application TOTP
    Étant donné un utilisateur "grace@roadwave.fr" avec 2FA activé
    Et l'utilisateur a perdu l'accès à son application TOTP
    Et il possède ses codes de récupération
    Quand l'utilisateur se connecte avec email/mot de passe corrects
    Et clique sur "Utiliser un code de récupération"
    Et saisit l'un des 10 codes de récupération
    Alors la connexion est réussie
    Et le code de récupération utilisé est marqué comme consommé
    Et il reste 9 codes de récupération disponibles
    Et un événement "2FA_RECOVERY_CODE_USED" est enregistré
    Et un email d'alerte est envoyé: "Un code de récupération a été utilisé. Il vous reste 9 codes."
    Et l'utilisateur est invité à reconfigurer son 2FA
    Et la métrique "auth.2fa.recovery_code.used" est incrémentée

  Scénario: Régénération des codes de récupération
    Étant donné un utilisateur "henry@roadwave.fr" avec 2FA activé
    Et 3 codes de récupération ont été utilisés
    Quand l'utilisateur accède à "Mon compte > Sécurité > Codes de récupération"
    Et clique sur "Régénérer les codes de récupération"
    Alors un message d'avertissement s'affiche: "Les anciens codes seront invalidés. Êtes-vous sûr ?"
    Et après confirmation, 10 nouveaux codes de récupération sont générés
    Et les anciens codes sont invalidés immédiatement
    Et les nouveaux codes sont affichés une seule fois
    Et un événement "2FA_RECOVERY_CODES_REGENERATED" est enregistré
    Et un email est envoyé avec les nouveaux codes (chiffrés)
    Et la métrique "auth.2fa.recovery_codes.regenerated" est incrémentée

  Scénario: Désactivation du 2FA avec vérification renforcée
    Étant donné un utilisateur "iris@roadwave.fr" avec 2FA activé
    Quand l'utilisateur accède à "Mon compte > Sécurité > Authentification à deux facteurs"
    Et clique sur "Désactiver l'authentification à deux facteurs"
    Alors un message d'avertissement s'affiche: "Cela réduira la sécurité de votre compte"
    Et l'utilisateur doit saisir son mot de passe actuel
    Et l'utilisateur doit saisir un code 2FA valide
    Et l'utilisateur doit confirmer par email via un lien sécurisé
    Alors le 2FA est désactivé
    Et tous les appareils de confiance sont révoqués
    Et tous les codes de récupération sont invalidés
    Et un événement "2FA_DISABLED" est enregistré
    Et un email de confirmation est envoyé
    Et la métrique "auth.2fa.disabled" est incrémentée

  Scénario: Authentification 2FA par SMS en méthode de secours
    Étant donné un utilisateur "jack@roadwave.fr" avec 2FA par TOTP activé
    Et l'utilisateur a également configuré un numéro de téléphone de secours
    Quand l'utilisateur se connecte et clique sur "Recevoir un code par SMS"
    Alors un code à 6 chiffres est envoyé au numéro +33612345678
    Et l'utilisateur saisit le code reçu par SMS
    Alors la connexion est réussie
    Et un événement "2FA_SMS_FALLBACK_USED" est enregistré
    Et un email d'alerte est envoyé: "Vous avez utilisé la méthode SMS de secours"
    Et la métrique "auth.2fa.sms.used" est incrémentée

  Scénario: Limitation des tentatives de codes 2FA
    Étant donné un utilisateur "kate@roadwave.fr" avec 2FA activé
    Quand l'utilisateur se connecte avec email/mot de passe corrects
    Et saisit 5 codes 2FA incorrects consécutivement
    Alors le compte est temporairement bloqué pour 15 minutes
    Et un message s'affiche: "Trop de tentatives échouées. Veuillez réessayer dans 15 minutes."
    Et un email d'alerte est envoyé: "Multiples tentatives échouées de codes 2FA détectées"
    Et un événement "2FA_TOO_MANY_ATTEMPTS" est enregistré avec niveau "HIGH"
    Et la métrique "auth.2fa.blocked.too_many_attempts" est incrémentée

  Scénario: Détection de connexion suspecte malgré 2FA valide
    Étant donné un utilisateur "luke@roadwave.fr" avec 2FA activé
    Et toutes ses connexions habituelles sont depuis la France
    Quand l'utilisateur se connecte avec email/mot de passe corrects depuis la Russie
    Et saisit un code 2FA valide
    Alors la connexion est réussie mais marquée comme suspecte
    Et l'utilisateur reçoit immédiatement un email: "Connexion inhabituelle depuis Russie"
    Et une notification push est envoyée sur tous les appareils de confiance
    Et l'accès aux fonctionnalités sensibles (paiement, changement de mot de passe) est temporairement bloqué
    Et l'utilisateur doit confirmer son identité par email avant accès complet
    Et un événement "2FA_SUSPICIOUS_LOCATION" est enregistré avec niveau "HIGH"
    Et la métrique "auth.2fa.suspicious_login" est incrémentée

  Scénario: Révocation de tous les appareils de confiance en cas de compromission
    Étant donné un utilisateur "mary@roadwave.fr" avec 2FA activé
    Et 5 appareils de confiance enregistrés
    Et l'utilisateur suspecte une compromission de son compte
    Quand l'utilisateur clique sur "Révoquer tous les appareils de confiance"
    Alors tous les appareils de confiance sont immédiatement révoqués
    Et tous les tokens d'appareils de confiance sont invalidés
    Et toutes les sessions actives sont fermées (sauf la session actuelle)
    Et un événement "ALL_TRUSTED_DEVICES_REVOKED" est enregistré avec niveau "HIGH"
    Et un email de confirmation est envoyé
    Et l'utilisateur devra saisir un code 2FA à chaque nouvelle connexion
    Et la métrique "auth.2fa.trusted_device.bulk_revoked" est incrémentée

  Scénario: Métriques de sécurité pour le 2FA
    Étant donné que le système gère 50 000 utilisateurs avec 2FA activé
    Quand les métriques de sécurité sont collectées
    Alors les indicateurs suivants sont disponibles:
      | Métrique                                  | Valeur cible |
      | Pourcentage d'utilisateurs avec 2FA       | > 60%        |
      | Taux de succès de validation 2FA          | > 98%        |
      | Temps moyen de saisie du code 2FA         | < 15s        |
      | Nombre d'appareils de confiance par user  | Moyenne: 2.5 |
      | Taux d'utilisation des codes de récup.    | < 0.5%       |
    Et les métriques sont exportées vers le système de monitoring
    Et des alertes sont déclenchées si le taux de succès < 95%

  Scénario: Badge de sécurité pour utilisateurs avec 2FA activé
    Étant donné un utilisateur "nathan@roadwave.fr" avec 2FA activé depuis 30 jours
    Quand l'utilisateur consulte son profil public
    Alors un badge "Compte sécurisé" s'affiche sur son profil
    Et le badge indique: "Cet utilisateur a activé l'authentification à deux facteurs"
    Et le badge améliore la visibilité et la crédibilité du créateur de contenu
    Et la métrique "profile.badge.2fa_secured" est visible
