From 021a78fac79436de974b0ab776dd268c22250558 Mon Sep 17 00:00:00 2001 From: TakahashiNg <83152264+TakahashiNguyen@users.noreply.github.com> Date: Sun, 19 Apr 2026 03:59:42 +0000 Subject: [PATCH] fix: add logout protocol --- .../drinkool/controller/BaseController.java | 26 +++++++++++++++++++ .../controller/CustomerController.java | 2 +- .../controller/BaseControllerTest.java | 24 +++++++++++++++++ lib/src/main/java/com/drinkool/Url.java | 1 + 4 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 gateway-service/src/main/java/com/drinkool/controller/BaseController.java create mode 100644 gateway-service/src/test/java/com/drinkool/controller/BaseControllerTest.java diff --git a/gateway-service/src/main/java/com/drinkool/controller/BaseController.java b/gateway-service/src/main/java/com/drinkool/controller/BaseController.java new file mode 100644 index 0000000..c87ecb6 --- /dev/null +++ b/gateway-service/src/main/java/com/drinkool/controller/BaseController.java @@ -0,0 +1,26 @@ +package com.drinkool.controller; + +import com.drinkool.InternalValue; +import com.drinkool.Url; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.core.NewCookie; +import org.jboss.resteasy.reactive.RestResponse; + +public abstract class BaseController { + + @POST + @Path(Url.Logout) + public RestResponse logout() { + NewCookie cookie = new NewCookie.Builder(InternalValue.cookieName) + .secure(true) + .maxAge(0) + .path("/") + .httpOnly(true) + .build(); + + return RestResponse.ResponseBuilder.noContent() + .cookie(cookie) + .build(); + } +} diff --git a/gateway-service/src/main/java/com/drinkool/controller/CustomerController.java b/gateway-service/src/main/java/com/drinkool/controller/CustomerController.java index e064799..9562d81 100644 --- a/gateway-service/src/main/java/com/drinkool/controller/CustomerController.java +++ b/gateway-service/src/main/java/com/drinkool/controller/CustomerController.java @@ -11,7 +11,7 @@ import java.util.*; import org.eclipse.microprofile.rest.client.inject.RestClient; @Path("/api/" + Role.Customer) -public class CustomerController { +public class CustomerController extends BaseController { @Inject @RestClient diff --git a/gateway-service/src/test/java/com/drinkool/controller/BaseControllerTest.java b/gateway-service/src/test/java/com/drinkool/controller/BaseControllerTest.java new file mode 100644 index 0000000..df2fa07 --- /dev/null +++ b/gateway-service/src/test/java/com/drinkool/controller/BaseControllerTest.java @@ -0,0 +1,24 @@ +package com.drinkool.controller; + +import static io.restassured.RestAssured.*; +import static org.hamcrest.CoreMatchers.*; + +import com.drinkool.*; +import io.quarkus.test.junit.QuarkusTest; +import org.junit.jupiter.api.Test; + +@QuarkusTest +public class BaseControllerTest { + + @Test + public void testLogoutShouldClearCookie() { + given() + .when() + .post("/api/" + Role.Customer + Url.Logout) + .then() + .statusCode(204) + .header("Set-Cookie", containsString(InternalValue.cookieName)) + .header("Set-Cookie", containsString("Max-Age=0")) + .header("Set-Cookie", containsString("HttpOnly")); + } +} diff --git a/lib/src/main/java/com/drinkool/Url.java b/lib/src/main/java/com/drinkool/Url.java index 8aa4a01..e547d3c 100644 --- a/lib/src/main/java/com/drinkool/Url.java +++ b/lib/src/main/java/com/drinkool/Url.java @@ -8,4 +8,5 @@ public class Url { public static final String QuickLogin = "/quick_login"; public static final String SmsOtp = "/sms_otp"; public static final String Me = "/me"; + public static final String Logout = "/logout"; }