summaryrefslogtreecommitdiffstats
path: root/jdisc-security-filters
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@oath.com>2018-04-24 17:10:52 +0200
committerBjørn Christian Seime <bjorncs@oath.com>2018-04-24 17:29:02 +0200
commit1ff6812d0b8c012129439307eb486fda763fc8d4 (patch)
tree6bbe2712a07b2bbaeb4cfc6f2de909cd652aa4c1 /jdisc-security-filters
parentfd6b82e60eaf6b85800e7615d2382263a655478f (diff)
Make CorsRequestFilterBase extend JsonSecurityRequestFilterBase
Diffstat (limited to 'jdisc-security-filters')
-rw-r--r--jdisc-security-filters/src/main/java/com/yahoo/jdisc/http/filter/security/cors/CorsRequestFilterBase.java51
-rw-r--r--jdisc-security-filters/src/test/java/com/yahoo/jdisc/http/filter/security/cors/CorsRequestFilterBaseTest.java2
2 files changed, 9 insertions, 44 deletions
diff --git a/jdisc-security-filters/src/main/java/com/yahoo/jdisc/http/filter/security/cors/CorsRequestFilterBase.java b/jdisc-security-filters/src/main/java/com/yahoo/jdisc/http/filter/security/cors/CorsRequestFilterBase.java
index 7bdbd7eddf4..eafe17153ad 100644
--- a/jdisc-security-filters/src/main/java/com/yahoo/jdisc/http/filter/security/cors/CorsRequestFilterBase.java
+++ b/jdisc-security-filters/src/main/java/com/yahoo/jdisc/http/filter/security/cors/CorsRequestFilterBase.java
@@ -1,15 +1,9 @@
// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.jdisc.http.filter.security.cors;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ObjectNode;
import com.yahoo.jdisc.Response;
-import com.yahoo.jdisc.handler.FastContentWriter;
-import com.yahoo.jdisc.handler.ResponseDispatch;
-import com.yahoo.jdisc.handler.ResponseHandler;
import com.yahoo.jdisc.http.filter.DiscFilterRequest;
-import com.yahoo.jdisc.http.filter.SecurityRequestFilter;
+import com.yahoo.jdisc.http.filter.security.base.JsonSecurityRequestFilterBase;
import java.util.HashSet;
import java.util.Optional;
@@ -23,9 +17,7 @@ import static com.yahoo.jdisc.http.filter.security.cors.CorsLogic.createCorsResp
*
* @author bjorncs
*/
-public abstract class CorsRequestFilterBase implements SecurityRequestFilter {
-
- private static final ObjectMapper mapper = new ObjectMapper();
+public abstract class CorsRequestFilterBase extends JsonSecurityRequestFilterBase {
private final Set<String> allowedUrls;
@@ -38,44 +30,17 @@ public abstract class CorsRequestFilterBase implements SecurityRequestFilter {
}
@Override
- public final void filter(DiscFilterRequest request, ResponseHandler handler) {
- filter(request)
- .ifPresent(errorResponse -> sendErrorResponse(request, errorResponse, handler));
+ public final Optional<ErrorResponse> filter(DiscFilterRequest request) {
+ Optional<ErrorResponse> errorResponse = filterRequest(request);
+ errorResponse.ifPresent(response -> addCorsHeaders(request, response.getResponse()));
+ return errorResponse;
}
- protected abstract Optional<ErrorResponse> filter(DiscFilterRequest request);
-
- private void sendErrorResponse(DiscFilterRequest request,
- ErrorResponse errorResponse,
- ResponseHandler responseHandler) {
- Response response = new Response(errorResponse.statusCode);
- addHeaders(request, response);
- writeResponse(errorResponse, responseHandler, response);
- }
+ protected abstract Optional<ErrorResponse> filterRequest(DiscFilterRequest request);
- private void addHeaders(DiscFilterRequest request, Response response) {
+ private void addCorsHeaders(DiscFilterRequest request, Response response) {
createCorsResponseHeaders(request.getHeader("Origin"), allowedUrls)
.forEach(response.headers()::add);
- response.headers().add("Content-Type", "application/json");
}
- private void writeResponse(ErrorResponse errorResponse, ResponseHandler responseHandler, Response response) {
- ObjectNode errorMessage = mapper.createObjectNode();
- errorMessage.put("message", errorResponse.message);
- try (FastContentWriter writer = ResponseDispatch.newInstance(response).connectFastWriter(responseHandler)) {
- writer.write(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(errorMessage));
- } catch (JsonProcessingException e) {
- throw new RuntimeException(e);
- }
- }
-
- protected static class ErrorResponse {
- final int statusCode;
- final String message;
-
- public ErrorResponse(int statusCode, String message) {
- this.statusCode = statusCode;
- this.message = message;
- }
- }
}
diff --git a/jdisc-security-filters/src/test/java/com/yahoo/jdisc/http/filter/security/cors/CorsRequestFilterBaseTest.java b/jdisc-security-filters/src/test/java/com/yahoo/jdisc/http/filter/security/cors/CorsRequestFilterBaseTest.java
index 29d28499a28..2cb25bc93cb 100644
--- a/jdisc-security-filters/src/test/java/com/yahoo/jdisc/http/filter/security/cors/CorsRequestFilterBaseTest.java
+++ b/jdisc-security-filters/src/test/java/com/yahoo/jdisc/http/filter/security/cors/CorsRequestFilterBaseTest.java
@@ -52,7 +52,7 @@ public class CorsRequestFilterBaseTest {
}
@Override
- protected Optional<ErrorResponse> filter(DiscFilterRequest request) {
+ protected Optional<ErrorResponse> filterRequest(DiscFilterRequest request) {
return Optional.ofNullable(this.errorResponse);
}
}