private static CharSequence xForwardedProto(LiveHttpRequest request, boolean secure) { return request .header(X_FORWARDED_PROTO) .orElse(secure ? "https" : "http"); } }
@Test public void createsARequestWithDefaultValues() { LiveHttpRequest request = get("/index").build(); assertThat(request.version(), is(HTTP_1_1)); assertThat(request.url().toString(), is("/index")); assertThat(request.path(), is("/index")); assertThat(request.id(), is(notNullValue())); assertThat(request.cookies(), is(emptyIterable())); assertThat(request.headers(), is(emptyIterable())); assertThat(request.headers("any"), is(emptyIterable())); assertThat(bytesToString(request.body()), is("")); assertThat(request.cookie("any"), isAbsent()); assertThat(request.header("any"), isAbsent()); assertThat(request.keepAlive(), is(true)); assertThat(request.method(), is(GET)); assertThat(request.queryParam("any"), isAbsent()); assertThat(request.queryParams("any"), is(emptyIterable())); }
private static Optional<String> xForwardedFor(LiveHttpRequest request, HttpInterceptor.Context context) { Optional<String> maybeClientAddress = context.clientAddress() .map(InetSocketAddress::getHostString) .map(hostName -> request .header(X_FORWARDED_FOR) .map(xForwardedFor -> xForwardedFor + ", " + hostName) .orElse(hostName)); if (!maybeClientAddress.isPresent()) { LOGGER.warn("No clientAddress in context url={}", request.url()); } return maybeClientAddress; }
private io.netty.handler.codec.http.HttpRequest makeRequest(LiveHttpRequest request) { DefaultHttpRequest nettyRequest = toNettyRequest(request); Optional<String> host = request.header(HOST); if (!host.isPresent()) { nettyRequest.headers().set(HOST, nettyConnection.getOrigin().hostAndPortString()); } return nettyRequest; } }
private static Origin originFromRequest(LiveHttpRequest request, Boolean isHttps) { String hostAndPort = request.header(HOST) .orElseGet(() -> { checkArgument(request.url().isAbsolute(), "host header is not set for request=%s", request); return request.url().authority().map(Url.Authority::hostAndPort) .orElseThrow(() -> new IllegalArgumentException("Cannot send request " + request + " as URL is not absolute and no HOST header is present")); }); HostAndPort host = HostAndPort.fromString(hostAndPort); if (host.getPortOrDefault(-1) < 0) { host = host.withDefaultPort(isHttps ? DEFAULT_HTTPS_PORT : DEFAULT_HTTP_PORT); } return newOriginBuilder(host.getHostText(), host.getPort()).build(); }
@Test public void setsHostHeaderFromAuthorityIfSet() { LiveHttpRequest request = get("http://www.hotels.com").build(); assertThat(request.header(HOST), isValue("www.hotels.com")); }
private static LiveHttpRequest removeHopByHopHeaders(LiveHttpRequest request) { LiveHttpRequest.Transformer newRequest = request.newBuilder(); request.header(CONNECTION).ifPresent(connection -> { for (String connectToken : connection.split(",")) { String header = connectToken.trim(); newRequest.removeHeader(header); } newRequest.removeHeader(CONNECTION); }); newRequest .removeHeader(KEEP_ALIVE) .removeHeader(PROXY_AUTHENTICATE) .removeHeader(PROXY_AUTHORIZATION) .removeHeader(TE) .removeHeader(TRAILER) .removeHeader(UPGRADE); return newRequest.build(); } }
@Test public void transformerAddsHeader() { LiveHttpRequest request = LiveHttpRequest.get("/").build() .newBuilder() .addHeader("x", "y") .build(); assertEquals(request.header("x"), Optional.of("y")); }
@Test public void transformerRemovesHeader() { LiveHttpRequest request = LiveHttpRequest.get("/").addHeader("x", "y").build() .newBuilder() .removeHeader("x") .build(); assertEquals(request.header("x"), Optional.empty()); }
@Test public void transformsHeader() { LiveHttpRequest request = LiveHttpRequest.get("/").header("X-Styx-ID", "test").build() .newBuilder() .header("X-Styx-ID", "bar") .build(); assertEquals(request.header("X-Styx-ID"), Optional.of("bar")); }
@Test public void transformsHeaders() { LiveHttpRequest request = LiveHttpRequest.get("/").headers( new HttpHeaders.Builder() .add("x", "y") .build()) .build() .newBuilder() .headers( new HttpHeaders.Builder() .add("a", "b") .build()) .build(); assertThat(request.header("x"), is(Optional.empty())); assertThat(request.header("a"), is(Optional.of("b"))); }
@Test public void shouldSetsContentLengthForNonStreamingBodyMessage() { assertThat(put("/home").body(new ByteStream(Flux.just(new Buffer("Hello", UTF_8)))).build().header(CONTENT_LENGTH), isAbsent()); }