Skip to content

Feature/backend/login logout refresh token usecases#117

Merged
Devmodjo merged 6 commits into
Kether-Labs:developfrom
SonnyHardy:feature/backend/login-logout-refreshToken-usecases
Apr 21, 2026
Merged

Feature/backend/login logout refresh token usecases#117
Devmodjo merged 6 commits into
Kether-Labs:developfrom
SonnyHardy:feature/backend/login-logout-refreshToken-usecases

Conversation

@SonnyHardy

Copy link
Copy Markdown
Contributor

Issue liée

Closes #72


Partie concernée

🟦 Backend uniquement — API / base de données / scheduler

Module concerné

Authentification — login / register / sessions

Le problème à résoudre

Implémenter les 3 use cases de session : connexion avec JWT, rotation du refresh token,
déconnexion

La solution proposée

  • LoginUseCase : charger par email, vérifier status=ACTIVE, BCrypt compare
  • LoginUseCase : générer Access Token JWT RS256 (sub=userId, exp=+15min, jti=UUID)
  • LoginUseCase : générer Refresh Token opaque (UUID sécurisé), hasher, persister TTL 7j
  • LoginUseCase : UPDATE last_login_at, retourner tokens
  • RefreshTokenUseCase : charger token, vérifier TTL + revoked, rotation (invalider ancien, créer
    nouveau)
  • LogoutUseCase : blacklister jti dans Redis (TTL résiduel), révoquer Refresh Token
  • InvalidCredentialsException : message identique email inconnu / MDP faux (anti-énumération)
  • Tests unitaires

Type de changement

  • feat — Nouvelle fonctionnalité
  • fix — Correction de bug
  • docs — Documentation uniquement
  • test — Ajout ou modification de tests
  • refactor — Refactoring sans changement de comportement
  • chore — Maintenance, CI/CD, dépendances
  • breaking change — Modifie l'API publique ou un contrat frontend ↔ backend

Comment tester

🟦 Backend

cd backend
mvn test
mvn verify

Checklist

🟦 Backend — à cocher si la PR touche au backend

  • mvn test passe sans erreur
  • mvn verify passe sans erreur (couverture JaCoCo)
  • La couverture de code ne régresse pas (> 80% sur les services)
  • Tous les endpoints sont correctement typés et validés (@Valid)
  • Les erreurs retournent les bons codes HTTP
  • Aucune credential ou secret dans le code — uniquement dans .env
  • La logique métier est dans les services — pas dans les controllers

📝 Documentation

  • J'ai mis à jour la documentation si nécessaire
  • Si un nouvel endpoint est créé — il est documenté dans docs/api-reference.md
  • Si une variable d'environnement est ajoutée — elle est dans .env.example

🔀 Git

  • Ma branche est à jour avec develop — pas de conflits
  • Mes commits suivent la convention type(frontend|backend): description
  • Il n'y a pas de commits de debug ou temporaires (console.log, System.out.println)
  • Ma PR cible develop et non main

Notes pour le reviewer

  • J'ai juste fait des tests unitaires, pas de test d'integration
  • J'ai ajusté RegisterUseCase pour qu'il utilise le PasswordEncoderPort
  • Le LogoutUseCase ne révoque que le Refresh Token de la session courante et non toutes sessions actives de l'utilisateur
  • Au niveau de l'interface JwtTokenPort j'ai ajouté la methode getRemainingTtlSeconds qui permet de retourner le temps résiduel d'un token en secondes

@Devmodjo
Devmodjo self-requested a review April 20, 2026 15:32

@Devmodjo Devmodjo left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok c'est bon

@Devmodjo
Devmodjo merged commit 86ea013 into Kether-Labs:develop Apr 21, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants