This is an automated email from the ASF dual-hosted git repository.

fmariani pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-spring-boot.git

commit 83370ee2560183cceb9e8ff84db6d8e96012e0c9
Author: Nikita Konovalov <nkono...@redhat.com>
AuthorDate: Wed Jan 15 17:17:56 2025 +0100

    CSB-5888: implemented cookie handler for Spring Boot HTTP platform
---
 .../springboot/SpringBootPlatformHttpConsumer.java | 64 ++++++++++++++++++++--
 .../SpringBootPlatformHttpCertificationTest.java   |  7 ++-
 2 files changed, 65 insertions(+), 6 deletions(-)

diff --git 
a/components-starter/camel-platform-http-starter/src/main/java/org/apache/camel/component/platform/http/springboot/SpringBootPlatformHttpConsumer.java
 
b/components-starter/camel-platform-http-starter/src/main/java/org/apache/camel/component/platform/http/springboot/SpringBootPlatformHttpConsumer.java
index d5e5909c3bb..285926cdfd3 100644
--- 
a/components-starter/camel-platform-http-starter/src/main/java/org/apache/camel/component/platform/http/springboot/SpringBootPlatformHttpConsumer.java
+++ 
b/components-starter/camel-platform-http-starter/src/main/java/org/apache/camel/component/platform/http/springboot/SpringBootPlatformHttpConsumer.java
@@ -16,15 +16,23 @@
  */
 package org.apache.camel.component.platform.http.springboot;
 
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.Executor;
+import java.util.concurrent.Executors;
+
 import jakarta.servlet.ServletException;
+import jakarta.servlet.http.Cookie;
 import jakarta.servlet.http.HttpServletRequest;
 import jakarta.servlet.http.HttpServletResponse;
+
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePattern;
 import org.apache.camel.Processor;
 import org.apache.camel.Suspendable;
 import org.apache.camel.SuspendableService;
 import org.apache.camel.component.platform.http.PlatformHttpEndpoint;
+import org.apache.camel.component.platform.http.cookie.CookieConfiguration;
+import org.apache.camel.component.platform.http.cookie.CookieHandler;
 import org.apache.camel.component.platform.http.spi.PlatformHttpConsumer;
 import org.apache.camel.http.common.HttpBinding;
 import org.apache.camel.http.common.HttpHelper;
@@ -33,10 +41,6 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.web.bind.annotation.ResponseBody;
 
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.Executor;
-import java.util.concurrent.Executors;
-
 public class SpringBootPlatformHttpConsumer extends DefaultConsumer implements 
PlatformHttpConsumer, Suspendable, SuspendableService {
 
     private static final Logger LOG = 
LoggerFactory.getLogger(SpringBootPlatformHttpConsumer.class);
@@ -44,6 +48,7 @@ public class SpringBootPlatformHttpConsumer extends 
DefaultConsumer implements P
     private HttpBinding binding;
     private final boolean handleWriteResponseError;
     private Executor executor;
+    private CookieConfiguration cookieConfiguration;
 
     public SpringBootPlatformHttpConsumer(PlatformHttpEndpoint endpoint, 
Processor processor) {
         super(endpoint, processor);
@@ -115,6 +120,10 @@ public class SpringBootPlatformHttpConsumer extends 
DefaultConsumer implements P
         if (contextPath != null && httpPath.startsWith(contextPath)) {
             exchange.getIn().setHeader(Exchange.HTTP_PATH, 
httpPath.substring(contextPath.length()));
         }
+        if (getEndpoint().isUseCookieHandler()) {
+            cookieConfiguration = getEndpoint().getCookieConfiguration();
+            exchange.setProperty(Exchange.COOKIE_HANDLER, new 
SpringBootCookieHandler(request, response));
+        }
 
         // we want to handle the UoW
         try {
@@ -173,4 +182,51 @@ public class SpringBootPlatformHttpConsumer extends 
DefaultConsumer implements P
         }
     }
 
+    class SpringBootCookieHandler implements CookieHandler {
+
+        private final HttpServletRequest request;
+        private final HttpServletResponse response;
+
+        public SpringBootCookieHandler(HttpServletRequest request, 
HttpServletResponse response) {
+            this.request = request;
+            this.response = response;
+        }
+
+        @Override
+        public void addCookie(String cookieName, String cookieValue) {
+            Cookie cookie = new Cookie(cookieName, cookieValue);
+            cookie.setPath(cookieConfiguration.getCookiePath());
+            cookie.setDomain(cookieConfiguration.getCookieDomain());
+            cookie.setSecure(cookieConfiguration.isCookieSecure());
+            cookie.setHttpOnly(cookieConfiguration.isCookieHttpOnly());
+            cookie.setAttribute("SameSite", 
cookieConfiguration.getCookieSameSite().getValue());
+            if (cookieConfiguration.getCookieMaxAge() != null) {
+                
cookie.setMaxAge(Math.toIntExact(cookieConfiguration.getCookieMaxAge()));
+            }
+            response.addCookie(cookie);
+        }
+
+        @Override
+        public String removeCookie(String cookieName) {
+            Cookie cookieToRemove = new Cookie(cookieName, null);
+            cookieToRemove.setPath(cookieConfiguration.getCookiePath());
+            // set max age to 0 to delete the cookie
+            cookieToRemove.setMaxAge(0);
+            response.addCookie(cookieToRemove);
+            return cookieName;
+        }
+
+        @Override
+        public String getCookieValue(String cookieName) {
+            Cookie[] cookie = request.getCookies();
+            for (Cookie c : cookie) {
+                if (c.getName().equals(cookieName)) {
+                    return c.getValue();
+                }
+            }
+            return null;
+        }
+    }
 }
+
+
diff --git 
a/components-starter/camel-platform-http-starter/src/test/java/org/apache/camel/component/platform/http/springboot/SpringBootPlatformHttpCertificationTest.java
 
b/components-starter/camel-platform-http-starter/src/test/java/org/apache/camel/component/platform/http/springboot/SpringBootPlatformHttpCertificationTest.java
index 39c9305bc6b..44e87f60632 100644
--- 
a/components-starter/camel-platform-http-starter/src/test/java/org/apache/camel/component/platform/http/springboot/SpringBootPlatformHttpCertificationTest.java
+++ 
b/components-starter/camel-platform-http-starter/src/test/java/org/apache/camel/component/platform/http/springboot/SpringBootPlatformHttpCertificationTest.java
@@ -42,6 +42,10 @@ import 
org.springframework.boot.test.web.server.LocalServerPort;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.test.annotation.DirtiesContext;
+import 
org.apache.camel.component.platform.http.springboot.SpringBootPlatformHttpConsumer;
+import org.springframework.web.bind.annotation.CookieValue;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
 
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
@@ -64,7 +68,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
 @CamelSpringBootTest
 @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, 
classes = { CamelAutoConfiguration.class,
         SpringBootPlatformHttpCertificationTest.class, 
SpringBootPlatformHttpCertificationTest.TestConfiguration.class,
-        PlatformHttpComponentAutoConfiguration.class, 
SpringBootPlatformHttpAutoConfiguration.class, })
+        PlatformHttpComponentAutoConfiguration.class, 
SpringBootPlatformHttpAutoConfiguration.class})
 public class SpringBootPlatformHttpCertificationTest extends PlatformHttpBase {
 
     private static final String postRouteId = 
"SpringBootPlatformHttpRestDSLTest_mypost";
@@ -373,7 +377,6 @@ public class SpringBootPlatformHttpCertificationTest 
extends PlatformHttpBase {
     }
 
     @Test
-    @Disabled("Test is failing, work in progress")
     public void testAddCookie() throws Exception {
         given()
                 .when()

Reply via email to