summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorValerij Fredriksen <valerij92@gmail.com>2021-05-11 14:08:09 +0200
committerValerij Fredriksen <valerij92@gmail.com>2021-05-11 14:11:44 +0200
commitfe1bd61832db7a88789232556e9a9c13d4f22815 (patch)
treeeb566244b046860dfef00eae2c5c2bc869479c63
parent4ae244bc86782b3dc36257edcfabc2e38f510cf7 (diff)
Return request origin when wildcard is allowed
-rw-r--r--jdisc-security-filters/src/main/java/com/yahoo/jdisc/http/filter/security/cors/CorsLogic.java21
-rw-r--r--jdisc-security-filters/src/test/java/com/yahoo/jdisc/http/filter/security/cors/CorsResponseFilterTest.java2
2 files changed, 8 insertions, 15 deletions
diff --git a/jdisc-security-filters/src/main/java/com/yahoo/jdisc/http/filter/security/cors/CorsLogic.java b/jdisc-security-filters/src/main/java/com/yahoo/jdisc/http/filter/security/cors/CorsLogic.java
index d0722cae5ac..650ec851ffd 100644
--- a/jdisc-security-filters/src/main/java/com/yahoo/jdisc/http/filter/security/cors/CorsLogic.java
+++ b/jdisc-security-filters/src/main/java/com/yahoo/jdisc/http/filter/security/cors/CorsLogic.java
@@ -27,27 +27,20 @@ class CorsLogic {
static Map<String, String> createCorsResponseHeaders(String requestOriginHeader,
Set<String> allowedOrigins) {
if (requestOriginHeader == null) return Map.of();
+
TreeMap<String, String> headers = new TreeMap<>();
- allowedOrigins.stream()
- .filter(allowedUrl -> matchesRequestOrigin(requestOriginHeader, allowedUrl))
- .findAny()
- .ifPresent(allowedOrigin -> headers.put(ALLOW_ORIGIN_HEADER, allowedOrigin));
- ACCESS_CONTROL_HEADERS.forEach(headers::put);
+ if (requestOriginMatchesAnyAllowed(requestOriginHeader, allowedOrigins))
+ headers.put(ALLOW_ORIGIN_HEADER, requestOriginHeader);
+ headers.putAll(ACCESS_CONTROL_HEADERS);
return headers;
}
static Map<String, String> createCorsPreflightResponseHeaders(String requestOriginHeader,
Set<String> allowedOrigins) {
- if (requestOriginHeader == null) return ACCESS_CONTROL_HEADERS;
-
- TreeMap<String, String> headers = new TreeMap<>();
- if (allowedOrigins.stream().anyMatch(allowedUrl -> matchesRequestOrigin(requestOriginHeader, allowedUrl)))
- headers.put(ALLOW_ORIGIN_HEADER, requestOriginHeader);
- ACCESS_CONTROL_HEADERS.forEach(headers::put);
- return headers;
+ return createCorsResponseHeaders(requestOriginHeader, allowedOrigins);
}
- private static boolean matchesRequestOrigin(String requestOrigin, String allowedUrl) {
- return allowedUrl.equals("*") || requestOrigin.startsWith(allowedUrl);
+ private static boolean requestOriginMatchesAnyAllowed(String requestOrigin, Set<String> allowedUrls) {
+ return allowedUrls.stream().anyMatch(requestOrigin::startsWith) || allowedUrls.contains("*");
}
}
diff --git a/jdisc-security-filters/src/test/java/com/yahoo/jdisc/http/filter/security/cors/CorsResponseFilterTest.java b/jdisc-security-filters/src/test/java/com/yahoo/jdisc/http/filter/security/cors/CorsResponseFilterTest.java
index 2967a7659f5..0c8cf9b0ffb 100644
--- a/jdisc-security-filters/src/test/java/com/yahoo/jdisc/http/filter/security/cors/CorsResponseFilterTest.java
+++ b/jdisc-security-filters/src/test/java/com/yahoo/jdisc/http/filter/security/cors/CorsResponseFilterTest.java
@@ -53,7 +53,7 @@ public class CorsResponseFilterTest {
@Test
public void any_request_origin_yields_allow_origin_header_in_response_when_wildcard_is_allowed() {
Map<String, String> headers = doFilterRequest(newResponseFilter("*"), "http://any.origin");
- assertEquals("*", headers.get(ALLOW_ORIGIN_HEADER));
+ assertEquals("http://any.origin", headers.get(ALLOW_ORIGIN_HEADER));
}
private static Map<String, String> doFilterRequest(SecurityResponseFilter filter, String originUrl) {