From 411c407a40c274161dc46b818ed87f2fca160296 Mon Sep 17 00:00:00 2001 From: Vincent Guillet Date: Fri, 28 Nov 2025 18:47:15 +0100 Subject: [PATCH] Refactor AuthController to support both POST and GET methods for refresh token --- .../api/controller/auth/AuthController.java | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/api/src/main/java/fr/gameovergne/api/controller/auth/AuthController.java b/api/src/main/java/fr/gameovergne/api/controller/auth/AuthController.java index 56bfb0a..123cd72 100644 --- a/api/src/main/java/fr/gameovergne/api/controller/auth/AuthController.java +++ b/api/src/main/java/fr/gameovergne/api/controller/auth/AuthController.java @@ -46,7 +46,7 @@ public class AuthController { .httpOnly(true) .secure(false) // true en prod .path("/") - .maxAge(0) // Expire immédiatement + .maxAge(0) // expire immédiatement .sameSite("Lax") .build(); response.addHeader(HttpHeaders.SET_COOKIE, cookie.toString()); @@ -65,8 +65,19 @@ public class AuthController { .orElse(ResponseEntity.notFound().build()); } + // --------- REFRESH TOKEN : accepte POST et GET --------- + @PostMapping("/refresh") - public ResponseEntity refresh(HttpServletRequest request, HttpServletResponse response) { + public ResponseEntity refreshPost(HttpServletRequest request, HttpServletResponse response) { + return handleRefresh(request, response); + } + + @GetMapping("/refresh") + public ResponseEntity refreshGet(HttpServletRequest request, HttpServletResponse response) { + return handleRefresh(request, response); + } + + private ResponseEntity handleRefresh(HttpServletRequest request, HttpServletResponse response) { String refreshToken = null; if (request.getCookies() != null) { refreshToken = Arrays.stream(request.getCookies()) @@ -75,17 +86,20 @@ public class AuthController { .map(Cookie::getValue) .orElse(null); } + if (refreshToken == null) { - // Pas de cookie -> pas d'erreur réseau + // Pas de cookie -> on ne casse pas le front, juste 204 return ResponseEntity.noContent().build(); } return authService.refresh(refreshToken) .map(authResponse -> createAuthResponse(authResponse, response)) - // Token inconnu/expiré -> pas d'erreur réseau non plus + // Token inconnu/expiré -> 204 aussi, pas d'erreur réseau .orElse(ResponseEntity.noContent().build()); } + // --------- Utilitaire pour poser le cookie + réponse --------- + private ResponseEntity createAuthResponse(AuthResponse authResponse, HttpServletResponse response) { ResponseCookie cookie = ResponseCookie.from("refreshToken", authResponse.refreshToken()) .httpOnly(true)