Skip to content

Commit 118c735

Browse files
committed
allow to filter authorization by URL
1 parent 833310e commit 118c735

File tree

4 files changed

+21
-27
lines changed

4 files changed

+21
-27
lines changed

modules/swagger-parser-core/src/main/java/io/swagger/v3/parser/core/models/AuthorizationValue.java

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,26 @@
11
package io.swagger.v3.parser.core.models;
22

33
import java.net.URL;
4-
import java.util.List;
4+
import java.util.Objects;
5+
import java.util.function.Predicate;
6+
57

68
public class AuthorizationValue {
79
private String value, type, keyName;
8-
private List<URL> urls;
10+
private Predicate<URL> urlMatcher;
911

1012
public AuthorizationValue() {
1113
}
1214

13-
public AuthorizationValue(String keyName, String value, String type, List<URL> urls) {
15+
public AuthorizationValue(String keyName, String value, String type, Predicate<URL> urlMatcher) {
1416
this.setKeyName(keyName);
1517
this.setValue(value);
1618
this.setType(type);
17-
this.setUrls(urls);
19+
this.setUrlMatcher(urlMatcher);
1820
}
1921

2022
public AuthorizationValue(String keyName, String value, String type) {
21-
this(keyName, value, type, null);
23+
this(keyName, value, type, url -> true);
2224
}
2325

2426
public AuthorizationValue value(String value) {
@@ -36,8 +38,8 @@ public AuthorizationValue keyName(String keyName) {
3638
return this;
3739
}
3840

39-
public AuthorizationValue urls(List<URL> urls) {
40-
this.urls = urls;
41+
public AuthorizationValue urlMatcher(Predicate<URL> urlMatcher) {
42+
setUrlMatcher(urlMatcher);
4143
return this;
4244
}
4345

@@ -65,12 +67,12 @@ public void setKeyName(String keyName) {
6567
this.keyName = keyName;
6668
}
6769

68-
public List<URL> getUrls() {
69-
return urls;
70+
public Predicate<URL> getUrlMatcher() {
71+
return urlMatcher;
7072
}
7173

72-
public void setUrls(List<URL> urls) {
73-
this.urls = urls;
74+
public void setUrlMatcher(Predicate<URL> urlMatcher) {
75+
this.urlMatcher = Objects.requireNonNull(urlMatcher);
7476
}
7577

7678
@Override
@@ -80,7 +82,7 @@ public int hashCode() {
8082
result = prime * result + ((keyName == null) ? 0 : keyName.hashCode());
8183
result = prime * result + ((type == null) ? 0 : type.hashCode());
8284
result = prime * result + ((value == null) ? 0 : value.hashCode());
83-
result = prime * result + ((urls == null) ? 0 : urls.hashCode());
85+
result = prime * result + urlMatcher.hashCode();
8486
return result;
8587
}
8688

@@ -117,11 +119,7 @@ public boolean equals(Object obj) {
117119
} else if (!value.equals(other.value)) {
118120
return false;
119121
}
120-
if (urls == null) {
121-
if (other.urls != null) {
122-
return false;
123-
}
124-
} else if (!urls.equals(other.urls)) {
122+
if (!urlMatcher.equals(other.urlMatcher)) {
125123
return false;
126124
}
127125
return true;

modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/OpenAPIV3Parser.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,7 @@ protected List<AuthorizationValue> transform(List<AuthorizationValue> input) {
262262
v.setKeyName(value.getKeyName());
263263
v.setValue(value.getValue());
264264
v.setType(value.getType());
265-
v.setUrls(value.getUrls());
265+
v.setUrlMatcher(value.getUrlMatcher());
266266

267267
output.add(v);
268268
}

modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/util/RemoteUrl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ public static String urlToString(String url, List<AuthorizationValue> auths) thr
115115
final List<AuthorizationValue> header = new ArrayList<>();
116116
if (auths != null && auths.size() > 0) {
117117
for (AuthorizationValue auth : auths) {
118-
if (auth.getUrls() == null || auth.getUrls().contains(inUrl)) {
118+
if (auth.getUrlMatcher().test(inUrl)) {
119119
if ("query".equals(auth.getType())) {
120120
appendValue(inUrl, auth, query);
121121
} else if ("header".equals(auth.getType())) {

modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/util/RemoteUrlTest.java

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,7 @@
88
import org.testng.annotations.BeforeMethod;
99
import org.testng.annotations.Test;
1010

11-
import java.net.URL;
1211
import java.util.Arrays;
13-
import java.util.Collections;
1412
import java.util.List;
1513

1614
import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
@@ -87,10 +85,9 @@ public void testAuthorizationHeaderWithMatchingUrl() throws Exception {
8785

8886
final String headerName = "Authorization";
8987
final String headerValue = "foobar";
90-
String url = getUrl();
9188
final AuthorizationValue authorizationValue = new AuthorizationValue(headerName, headerValue, "header",
92-
Collections.singletonList(new URL(url)));
93-
final String actualBody = RemoteUrl.urlToString(url, Arrays.asList(authorizationValue));
89+
url -> url.toString().startsWith("http://localhost"));
90+
final String actualBody = RemoteUrl.urlToString(getUrl(), Arrays.asList(authorizationValue));
9491

9592
assertEquals(actualBody, expectedBody);
9693

@@ -106,11 +103,10 @@ public void testAuthorizationHeaderWithNonMatchingUrl() throws Exception {
106103
final String expectedBody = setupStub();
107104

108105
final String headerValue = "foobar";
109-
String url = getUrl();
110106
String authorization = "Authorization";
111107
final AuthorizationValue authorizationValue = new AuthorizationValue(authorization,
112-
headerValue, "header", Collections.singletonList(new URL("http://foo.com")));
113-
final String actualBody = RemoteUrl.urlToString(url, Arrays.asList(authorizationValue));
108+
headerValue, "header", u -> false);
109+
final String actualBody = RemoteUrl.urlToString(getUrl(), Arrays.asList(authorizationValue));
114110

115111
assertEquals(actualBody, expectedBody);
116112

0 commit comments

Comments
 (0)