Skip to content

Commit febcbfc

Browse files
authored
Merge branch 'main' into sean/jspecify
2 parents 649bbf4 + 6c6c812 commit febcbfc

File tree

7 files changed

+66
-21
lines changed

7 files changed

+66
-21
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,15 @@ Maven:
2020
<dependency>
2121
<groupId>org.asynchttpclient</groupId>
2222
<artifactId>async-http-client</artifactId>
23-
<version>3.0.0</version>
23+
<version>3.0.1</version>
2424
</dependency>
2525
</dependencies>
2626
```
2727

2828
Gradle:
2929
```groovy
3030
dependencies {
31-
implementation 'org.asynchttpclient:async-http-client:3.0.0'
31+
implementation 'org.asynchttpclient:async-http-client:3.0.1'
3232
}
3333
```
3434

client/pom.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
<parent>
2020
<groupId>org.asynchttpclient</groupId>
2121
<artifactId>async-http-client-project</artifactId>
22-
<version>3.0.0</version>
22+
<version>3.0.1</version>
2323
</parent>
2424

2525
<modelVersion>4.0.0</modelVersion>
@@ -31,8 +31,8 @@
3131
<javaModuleName>org.asynchttpclient.client</javaModuleName>
3232

3333
<jetty.version>11.0.24</jetty.version>
34-
<tomcat.version>10.1.30</tomcat.version>
35-
<commons-io.version>2.16.1</commons-io.version>
34+
<tomcat.version>10.1.34</tomcat.version>
35+
<commons-io.version>2.18.0</commons-io.version>
3636
<mockito.version>4.11.0</mockito.version>
3737
<hamcrest.version>3.0</hamcrest.version>
3838
<kerby.version>2.1.0</kerby.version>

client/src/main/java/org/asynchttpclient/DefaultAsyncHttpClient.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,7 @@ public <T> ListenableFuture<T> executeRequest(Request request, AsyncHandler<T> h
235235
if (!cookies.isEmpty()) {
236236
RequestBuilder requestBuilder = request.toBuilder();
237237
for (Cookie cookie : cookies) {
238-
requestBuilder.addOrReplaceCookie(cookie);
238+
requestBuilder.addCookieIfUnset(cookie);
239239
}
240240
request = requestBuilder.build();
241241
}

client/src/main/java/org/asynchttpclient/RequestBuilderBase.java

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -323,6 +323,21 @@ public T addCookie(Cookie cookie) {
323323
* @return this
324324
*/
325325
public T addOrReplaceCookie(Cookie cookie) {
326+
return maybeAddOrReplaceCookie(cookie, true);
327+
}
328+
329+
/**
330+
* Add a cookie based on its name, if it does not exist yet. Cookies that
331+
* are already set will be ignored.
332+
*
333+
* @param cookie the new cookie
334+
* @return this
335+
*/
336+
public T addCookieIfUnset(Cookie cookie) {
337+
return maybeAddOrReplaceCookie(cookie, false);
338+
}
339+
340+
private T maybeAddOrReplaceCookie(Cookie cookie, boolean allowReplace) {
326341
String cookieKey = cookie.name();
327342
boolean replace = false;
328343
int index = 0;
@@ -335,10 +350,10 @@ public T addOrReplaceCookie(Cookie cookie) {
335350

336351
index++;
337352
}
338-
if (replace) {
339-
cookies.set(index, cookie);
340-
} else {
353+
if (!replace) {
341354
cookies.add(cookie);
355+
} else if (allowReplace) {
356+
cookies.set(index, cookie);
342357
}
343358
return asDerivedType();
344359
}

client/src/main/java/org/asynchttpclient/netty/handler/intercept/Redirect30xInterceptor.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -142,11 +142,8 @@ public boolean exitAfterHandlingRedirect(Channel channel, NettyResponseFuture<?>
142142
CookieStore cookieStore = config.getCookieStore();
143143
if (cookieStore != null) {
144144
// Update request's cookies assuming that cookie store is already updated by Interceptors
145-
List<Cookie> cookies = cookieStore.get(newUri);
146-
if (!cookies.isEmpty()) {
147-
for (Cookie cookie : cookies) {
148-
requestBuilder.addOrReplaceCookie(cookie);
149-
}
145+
for (Cookie cookie : cookieStore.get(newUri)) {
146+
requestBuilder.addCookieIfUnset(cookie);
150147
}
151148
}
152149

client/src/test/java/org/asynchttpclient/RequestBuilderTest.java

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,40 @@ public void testAddOrReplaceCookies() {
166166
assertEquals(requestBuilder.cookies.size(), 2, "cookie size must be 2 after adding 1 more cookie i.e. cookie3");
167167
}
168168

169+
@RepeatedIfExceptionsTest(repeats = 5)
170+
public void testAddIfUnsetCookies() {
171+
RequestBuilder requestBuilder = new RequestBuilder();
172+
Cookie cookie = new DefaultCookie("name", "value");
173+
cookie.setDomain("google.com");
174+
cookie.setPath("/");
175+
cookie.setMaxAge(1000);
176+
cookie.setSecure(true);
177+
cookie.setHttpOnly(true);
178+
requestBuilder.addCookieIfUnset(cookie);
179+
assertEquals(requestBuilder.cookies.size(), 1, "cookies size should be 1 after adding one cookie");
180+
assertEquals(requestBuilder.cookies.get(0), cookie, "cookie does not match");
181+
182+
Cookie cookie2 = new DefaultCookie("name", "value");
183+
cookie2.setDomain("google2.com");
184+
cookie2.setPath("/path");
185+
cookie2.setMaxAge(1001);
186+
cookie2.setSecure(false);
187+
cookie2.setHttpOnly(false);
188+
189+
requestBuilder.addCookieIfUnset(cookie2);
190+
assertEquals(requestBuilder.cookies.size(), 1, "cookies size should remain 1 as we just ignored cookie2 because of a cookie with same name");
191+
assertEquals(requestBuilder.cookies.get(0), cookie, "cookie does not match");
192+
193+
Cookie cookie3 = new DefaultCookie("name2", "value");
194+
cookie3.setDomain("google.com");
195+
cookie3.setPath("/");
196+
cookie3.setMaxAge(1000);
197+
cookie3.setSecure(true);
198+
cookie3.setHttpOnly(true);
199+
requestBuilder.addCookieIfUnset(cookie3);
200+
assertEquals(requestBuilder.cookies.size(), 2, "cookie size must be 2 after adding 1 more cookie i.e. cookie3");
201+
}
202+
169203
@RepeatedIfExceptionsTest(repeats = 5)
170204
public void testSettingQueryParamsBeforeUrlShouldNotProduceNPE() {
171205
RequestBuilder requestBuilder = new RequestBuilder();

pom.xml

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020

2121
<groupId>org.asynchttpclient</groupId>
2222
<artifactId>async-http-client-project</artifactId>
23-
<version>3.0.0</version>
23+
<version>3.0.1</version>
2424
<packaging>pom</packaging>
2525

2626
<name>AHC/Project</name>
@@ -45,11 +45,11 @@
4545
<maven.compiler.target>11</maven.compiler.target>
4646
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
4747

48-
<netty.version>4.1.114.Final</netty.version>
48+
<netty.version>4.1.115.Final</netty.version>
4949
<netty.iouring>0.0.25.Final</netty.iouring>
50-
<brotli4j.version>1.17.0</brotli4j.version>
50+
<brotli4j.version>1.18.0</brotli4j.version>
5151
<slf4j.version>2.0.16</slf4j.version>
52-
<zstd-jni.version>1.5.6-7</zstd-jni.version>
52+
<zstd-jni.version>1.5.6-8</zstd-jni.version>
5353
<activation.version>2.0.1</activation.version>
5454
<logback.version>1.5.12</logback.version>
5555
<jetbrains-annotations.version>26.0.1</jetbrains-annotations.version>
@@ -337,7 +337,7 @@
337337
<plugin>
338338
<groupId>org.apache.maven.plugins</groupId>
339339
<artifactId>maven-surefire-plugin</artifactId>
340-
<version>3.5.0</version>
340+
<version>3.5.2</version>
341341
<configuration>
342342
<argLine>
343343
@{argLine} --add-exports java.base/jdk.internal.misc=ALL-UNNAMED
@@ -368,10 +368,9 @@
368368
<plugin>
369369
<groupId>org.apache.maven.plugins</groupId>
370370
<artifactId>maven-source-plugin</artifactId>
371-
<version>3.3.1</version>
371+
<version>3.2.1</version>
372372
<executions>
373373
<execution>
374-
<id>attach-sources</id>
375374
<goals>
376375
<goal>jar-no-fork</goal>
377376
</goals>

0 commit comments

Comments
 (0)