# language: fr
Fonctionnalité: Gestion des sessions et tokens
  En tant qu'utilisateur connecté
  Je veux que mes sessions soient sécurisées et gérées automatiquement
  Afin de maintenir l'accès à l'application sans friction

  Contexte:
    Étant donné que l'API RoadWave est disponible
    Et que je suis connecté avec succès

  Scénario: Access token expire après 15 minutes
    Étant donné que j'ai reçu un access token
    Et que 15 minutes se sont écoulées
    Quand je fais une requête API avec cet access token
    Alors la requête échoue avec le code 401
    Et je vois le message "Token expiré"

  Scénario: Refresh automatique du token avec refresh token
    Étant donné que mon access token a expiré
    Et que mon refresh token est valide
    Quand l'application demande un nouveau access token
    Alors je reçois un nouvel access token valide pour 15 minutes
    Et je reçois un nouveau refresh token (rotation)
    Et l'ancien refresh token est invalidé

  Scénario: Refresh token expire après 30 jours d'inactivité
    Étant donné que je me suis connecté il y a 30 jours
    Et que je n'ai pas utilisé l'application depuis
    Quand j'essaie d'utiliser mon refresh token
    Alors la requête échoue
    Et je dois me reconnecter avec email/password

  Scénario: Prolongation automatique de la session si l'app est utilisée
    Étant donné que je me suis connecté il y a 25 jours
    Et que j'utilise l'application régulièrement
    Quand je fais une requête API
    Alors ma session est automatiquement prolongée
    Et mon refresh token reste valide

  Scénario: Détection de token replay attack
    Étant donné que j'ai rafraîchi mon token
    Et que j'ai reçu un nouveau refresh token
    Quand j'essaie de réutiliser l'ancien refresh token
    Alors la requête échoue
    Et je vois le message "Token invalide ou révoqué"
    Et toutes mes sessions sont révoquées par sécurité

  Scénario: Voir la liste des appareils connectés
    Étant donné que je suis connecté sur 3 appareils différents
    Quand je consulte la liste de mes appareils connectés
    Alors je vois 3 appareils avec les informations suivantes:
      | information        | exemple                    |
      | OS                 | iOS 17.1                   |
      | Navigateur         | Safari                     |
      | Dernière connexion | Il y a 2 heures            |
      | Localisation       | Paris, France (IP visible) |

  Scénario: Révoquer un appareil spécifique
    Étant donné que je suis connecté sur mon iPhone et mon iPad
    Quand je révoque la session de mon iPad depuis les paramètres
    Alors la session iPad est immédiatement déconnectée
    Et ma session iPhone reste active

  Scénario: Déconnecter tous les appareils sauf celui en cours
    Étant donné que je suis connecté sur 4 appareils
    Quand je clique sur "Déconnecter tous les appareils"
    Alors les 3 autres appareils sont déconnectés
    Et seul l'appareil actuel reste connecté

  Scénario: Alerte de connexion depuis nouveau device
    Étant donné que je me suis toujours connecté depuis Paris
    Quand je me connecte depuis un nouvel appareil à Lyon
    Alors je reçois une notification push sur mes autres appareils
    Et je reçois un email avec:
      | sujet          | Nouvelle connexion détectée      |
      | localisation   | Lyon, France                     |
      | appareil       | Android 14 - Chrome              |
      | action         | Lien pour révoquer la session    |

  Scénario: Alerte de connexion suspecte depuis pays différent
    Étant donné que je me suis toujours connecté depuis la France
    Quand je me connecte depuis un appareil aux États-Unis
    Alors je reçois une notification push immédiate
    Et je reçois un email d'alerte de sécurité
    Et la nouvelle session nécessite une validation 2FA même si désactivée

  Scénario: Déconnexion après 30 jours d'inactivité totale
    Étant donné que je ne me suis pas connecté depuis 30 jours
    Quand j'ouvre l'application
    Alors je suis automatiquement déconnecté
    Et je dois me reconnecter avec email/password
    Et je vois le message "Session expirée après 30 jours d'inactivité"

  Scénario: Sessions multiples simultanées autorisées
    Étant donné que je suis connecté sur:
      | appareil          |
      | iPhone            |
      | iPad              |
      | PC Windows (Web)  |
    Quand je fais des actions sur les 3 appareils simultanément
    Alors toutes les sessions fonctionnent sans conflit
    Et chaque appareil maintient sa propre session

  Scénario: Validation de JWT via Zitadel
    Étant donné que j'ai reçu un access token JWT
    Quand l'API RoadWave valide le token
    Alors la validation est faite localement avec la clé publique Zitadel
    Et aucune requête externe n'est effectuée (performance)
    Et le token contient les claims suivants:
      | claim | valeur_exemple         |
      | sub   | user-id-123            |
      | email | user@test.fr           |
      | exp   | timestamp + 15 minutes |
      | iss   | zitadel.roadwave.com   |
