diff options
author | Jon Marius Venstad <venstad@gmail.com> | 2020-09-09 22:35:20 +0200 |
---|---|---|
committer | Jon Marius Venstad <venstad@gmail.com> | 2020-09-09 22:35:20 +0200 |
commit | acd4540bd446530fd682b749d590f6681efcba63 (patch) | |
tree | ff7f960dc551c7d48a43def66b4bc6f952942fd7 /jdisc_http_service | |
parent | 71051f2a92c3b79cc69b99e605bdd4b9b0e58fb8 (diff) |
Handle default port for http and https being hidden by java URI
Diffstat (limited to 'jdisc_http_service')
2 files changed, 14 insertions, 4 deletions
diff --git a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/HttpRequestFactory.java b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/HttpRequestFactory.java index 9b1b1e087db..86aa9b994f9 100644 --- a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/HttpRequestFactory.java +++ b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/HttpRequestFactory.java @@ -55,14 +55,24 @@ class HttpRequestFactory { builder.append('?').append(query); } URI uri = URI.create(builder.toString()); - if ( ! scheme.equals(uri.getScheme()) || ! host.equals(uri.getHost()) || port != uri.getPort()) - throw new IllegalArgumentException("Bad scheme, host or port"); + validateSchemeHostPort(scheme, host, port, uri); return uri; } catch (IllegalArgumentException e) { throw createBadQueryException(e); } } + private static void validateSchemeHostPort(String scheme, String host, int port, URI uri) { + if ( ! scheme.equals(uri.getScheme())) + throw new IllegalArgumentException("Bad scheme: " + scheme); + + if ( ! host.equals(uri.getHost())) + throw new IllegalArgumentException("Bad host: " + host); + + if (port != uri.getPort() && ! (port == 80 && scheme.equals("http")) && ! (port == 443 && scheme.equals("https"))) + throw new IllegalArgumentException("Bad port: " + port); + } + private static RequestException createBadQueryException(IllegalArgumentException e) { return new RequestException(Response.Status.BAD_REQUEST, "Query violates RFC 2396: " + e.getMessage(), e); } diff --git a/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/server/jetty/HttpRequestFactoryTest.java b/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/server/jetty/HttpRequestFactoryTest.java index 27dd4429024..588bbaf73fb 100644 --- a/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/server/jetty/HttpRequestFactoryTest.java +++ b/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/server/jetty/HttpRequestFactoryTest.java @@ -30,7 +30,7 @@ import static org.mockito.Mockito.when; */ public class HttpRequestFactoryTest { - private static final int LOCAL_PORT = 8080; + private static final int LOCAL_PORT = 80; @Test public final void testIllegalQuery() { @@ -97,7 +97,7 @@ public class HttpRequestFactoryTest { public void request_uri_uses_local_port() { HttpRequest request = HttpRequestFactory.newJDiscRequest( new MockContainer(), - createMockRequest("http", "example.com", "/search", "query=value")); + createMockRequest("https", "example.com", "/search", "query=value")); assertEquals(LOCAL_PORT, request.getUri().getPort()); } |