Skip to content

Commit

Permalink
Filtering is now preserved when discarding body
Browse files Browse the repository at this point in the history
Fixes #581
  • Loading branch information
whiskeysierra committed Aug 20, 2019
1 parent bb32925 commit 7d5f87e
Show file tree
Hide file tree
Showing 4 changed files with 65 additions and 10 deletions.
Original file line number Diff line number Diff line change
@@ -1,21 +1,25 @@
package org.zalando.logbook;

import lombok.AllArgsConstructor;
import org.apiguardian.api.API;

import java.io.IOException;
import java.util.List;
import java.util.Map;

import static lombok.AccessLevel.PRIVATE;
import static org.apiguardian.api.API.Status.INTERNAL;

// TODO package private
@API(status = INTERNAL)
public final class FilteredHttpRequest implements ForwardingHttpRequest {
@AllArgsConstructor(access = PRIVATE)
final class FilteredHttpRequest implements ForwardingHttpRequest {

private final HttpRequest request;

private final String query;
private final String path;
private final BodyFilter bodyFilter;

private final Map<String, List<String>> headers;

FilteredHttpRequest(final HttpRequest request,
Expand All @@ -38,24 +42,38 @@ public HttpRequest delegate() {
return request;
}

@Override
public Map<String, List<String>> getHeaders() {
return headers;
}

@Override
public String getRequestUri() {
return RequestURI.reconstruct(this);
}

@Override
public String getPath() {
return path;
}

@Override
public String getQuery() {
return query;
}

@Override
public Map<String, List<String>> getHeaders() {
return headers;
public HttpRequest withBody() throws IOException {
return withRequest(request.withBody());
}

@Override
public String getPath() {
return path;
public HttpRequest withoutBody() {
return withRequest(request.withoutBody());
}

private FilteredHttpRequest withRequest(final HttpRequest request) {
return new FilteredHttpRequest(request, query, path, bodyFilter, headers);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,21 @@
package org.zalando.logbook;

import lombok.AllArgsConstructor;
import org.apiguardian.api.API;

import java.io.IOException;
import java.util.List;
import java.util.Map;

import static lombok.AccessLevel.PRIVATE;
import static org.apiguardian.api.API.Status.INTERNAL;

// TODO package private
@API(status = INTERNAL)
public final class FilteredHttpResponse implements ForwardingHttpResponse {
@AllArgsConstructor(access = PRIVATE)
final class FilteredHttpResponse implements ForwardingHttpResponse {

private final HttpResponse response;

private final BodyFilter bodyFilter;
private final Map<String, List<String>> headers;

Expand All @@ -33,6 +36,20 @@ public Map<String, List<String>> getHeaders() {
return headers;
}

@Override
public HttpResponse withBody() throws IOException {
return withResponse(response.withBody());
}

@Override
public HttpResponse withoutBody() {
return withResponse(response.withoutBody());
}

private HttpResponse withResponse(final HttpResponse response) {
return new FilteredHttpResponse(response, bodyFilter, headers);
}

@Override
public byte[] getBody() throws IOException {
return getBodyAsString().getBytes(getCharset());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,16 @@ void shouldFilterAuthorizationHeader() {
assertThat(unit.getHeaders(), hasEntry(equalTo("Authorization"), contains("XXX")));
}

@Test
void shouldFilterAuthorizationHeaderWithBody() throws IOException {
assertThat(unit.withBody().getHeaders(), hasEntry(equalTo("Authorization"), contains("XXX")));
}

@Test
void shouldFilterAuthorizationHeaderWithoutBody() {
assertThat(unit.withoutBody().getHeaders(), hasEntry(equalTo("Authorization"), contains("XXX")));
}

@Test
void shouldNotFilterAcceptHeader() {
assertThat(unit.getHeaders(), hasEntry(equalTo("Accept"), contains("text/plain")));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,16 @@ void shouldFilterAuthorizationHeader() {
assertThat(unit.getHeaders(), hasEntry(equalTo("Authorization"), contains("XXX")));
}

@Test
void shouldFilterAuthorizationHeaderWithBody() throws IOException {
assertThat(unit.withBody().getHeaders(), hasEntry(equalTo("Authorization"), contains("XXX")));
}

@Test
void shouldFilterAuthorizationHeaderWithoutBody() {
assertThat(unit.withoutBody().getHeaders(), hasEntry(equalTo("Authorization"), contains("XXX")));
}

@Test
void shouldNotFilterAcceptHeader() {
assertThat(unit.getHeaders(), hasEntry(equalTo("Accept"), contains("text/plain")));
Expand Down

0 comments on commit 7d5f87e

Please sign in to comment.