Skip to content

Commit 5a8cb08

Browse files
committed
chore: Improve insecure request exception message.
1 parent b3d5687 commit 5a8cb08

File tree

2 files changed

+16
-3
lines changed

2 files changed

+16
-3
lines changed

src/main/java/io/github/nstdio/http/ext/ExtendedHttpClient.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import java.net.Authenticator;
2323
import java.net.CookieHandler;
2424
import java.net.ProxySelector;
25+
import java.net.URI;
2526
import java.net.http.HttpClient;
2627
import java.net.http.HttpRequest;
2728
import java.net.http.HttpRequest.BodyPublishers;
@@ -162,8 +163,8 @@ public <T> CompletableFuture<HttpResponse<T>> sendAsync(HttpRequest request, Bod
162163
}
163164

164165
private <T> CompletableFuture<HttpResponse<T>> send0(HttpRequest request, BodyHandler<T> bodyHandler, Sender<T> sender) {
165-
if (!allowInsecure && "http".equalsIgnoreCase(request.uri().getScheme())) {
166-
throw new IllegalArgumentException("Client does not allow insecure HTTP requests.");
166+
if (!allowInsecure) {
167+
checkInsecureScheme(request);
167168
}
168169

169170
Chain<T> chain = buildAndExecute(RequestContext.of(request, bodyHandler));
@@ -176,6 +177,13 @@ private <T> CompletableFuture<HttpResponse<T>> send0(HttpRequest request, BodyHa
176177
return future.isDone() ? future.handle(handler) : future.handleAsync(handler);
177178
}
178179

180+
private void checkInsecureScheme(HttpRequest request) {
181+
URI uri = request.uri();
182+
if ("http".equalsIgnoreCase(uri.getScheme())) {
183+
throw new IllegalArgumentException("Client does not allow insecure HTTP requests. URI: " + uri);
184+
}
185+
}
186+
179187
private <T> Chain<T> buildAndExecute(RequestContext ctx) {
180188
Chain<T> chain = Chain.of(ctx);
181189
chain = compressionInterceptor != null ? compressionInterceptor.intercept(chain) : chain;

src/test/kotlin/io/github/nstdio/http/ext/ExtendedHttpClientTest.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ package io.github.nstdio.http.ext
1717

1818
import io.github.nstdio.http.ext.ExtendedHttpClient.Builder
1919
import io.kotest.assertions.throwables.shouldThrowExactly
20+
import io.kotest.matchers.should
21+
import io.kotest.matchers.string.shouldEndWith
2022
import io.kotest.matchers.throwable.shouldHaveCause
2123
import io.kotest.matchers.types.shouldBeSameInstanceAs
2224
import org.assertj.core.api.Assertions.assertThatExceptionOfType
@@ -117,15 +119,18 @@ internal class ExtendedHttpClientTest {
117119
val mockBuilderDelegate = mock(HttpClient.Builder::class.java)
118120
given(mockBuilderDelegate.build()).willReturn(mockDelegate)
119121

122+
val uri = "HTTP://abc.local"
120123
client = Builder(mockBuilderDelegate)
121124
.allowInsecure(false)
122125
.build()
123126

124-
val request = HttpRequest.newBuilder("HTTP://abc.local".toUri()).build()
127+
val request = HttpRequest.newBuilder(uri.toUri()).build()
125128

126129
//when + then
127130
shouldThrowExactly<IllegalArgumentException> {
128131
client.send(request, ofString())
132+
}.should {
133+
it.message.shouldEndWith("URI: $uri")
129134
}
130135
}
131136

0 commit comments

Comments
 (0)