diff --git a/modules/swagger-parser/src/main/java/io/swagger/parser/processors/ExternalRefProcessor.java b/modules/swagger-parser/src/main/java/io/swagger/parser/processors/ExternalRefProcessor.java index d03221d1d4..23d5df9b03 100644 --- a/modules/swagger-parser/src/main/java/io/swagger/parser/processors/ExternalRefProcessor.java +++ b/modules/swagger-parser/src/main/java/io/swagger/parser/processors/ExternalRefProcessor.java @@ -11,8 +11,6 @@ import io.swagger.models.refs.RefFormat; import io.swagger.models.refs.RefType; import io.swagger.parser.ResolverCache; -import io.swagger.parser.util.RefUtils; -import jdk.nashorn.internal.ir.ObjectNode; import org.apache.commons.lang3.StringUtils; import org.slf4j.LoggerFactory; diff --git a/modules/swagger-parser/src/main/java/io/swagger/parser/util/RemoteUrl.java b/modules/swagger-parser/src/main/java/io/swagger/parser/util/RemoteUrl.java index 3bb67cd976..3eceedda1d 100644 --- a/modules/swagger-parser/src/main/java/io/swagger/parser/util/RemoteUrl.java +++ b/modules/swagger-parser/src/main/java/io/swagger/parser/util/RemoteUrl.java @@ -101,10 +101,12 @@ public static String urlToString(String url, List auths) thr final List header = new ArrayList<>(); if (auths != null) { for (AuthorizationValue auth : auths) { - if ("query".equals(auth.getType())) { - appendValue(inUrl, auth, query); - } else if ("header".equals(auth.getType())) { - appendValue(inUrl, auth, header); + if (auth.getUrlMatcher() == null || auth.getUrlMatcher().test(inUrl)) { + if ("query".equals(auth.getType())) { + appendValue(inUrl, auth, query); + } else if ("header".equals(auth.getType())) { + appendValue(inUrl, auth, header); + } } } } diff --git a/modules/swagger-parser/src/test/java/io/swagger/parser/util/RemoteUrlTest.java b/modules/swagger-parser/src/test/java/io/swagger/parser/util/RemoteUrlTest.java index 72e06d2cdd..d31acd26ab 100644 --- a/modules/swagger-parser/src/test/java/io/swagger/parser/util/RemoteUrlTest.java +++ b/modules/swagger-parser/src/test/java/io/swagger/parser/util/RemoteUrlTest.java @@ -2,12 +2,14 @@ import com.github.tomakehurst.wiremock.WireMockServer; import com.github.tomakehurst.wiremock.client.WireMock; +import com.github.tomakehurst.wiremock.verification.LoggedRequest; import io.swagger.models.auth.AuthorizationValue; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import java.util.Arrays; +import java.util.List; import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; import static com.github.tomakehurst.wiremock.client.WireMock.equalTo; @@ -17,6 +19,7 @@ import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo; import static com.github.tomakehurst.wiremock.client.WireMock.verify; +import static org.junit.Assert.assertFalse; import static org.testng.Assert.assertEquals; public class RemoteUrlTest { @@ -77,6 +80,45 @@ public void testAuthorizationHeader() throws Exception { ); } + @Test + public void testAuthorizationHeaderWithMatchingUrl() throws Exception { + + final String expectedBody = setupStub(); + + final String headerName = "Authorization"; + final String headerValue = "foobar"; + final AuthorizationValue authorizationValue = new AuthorizationValue(headerName, headerValue, "header", + url -> url.toString().startsWith("http://localhost")); + final String actualBody = RemoteUrl.urlToString(getUrl(), Arrays.asList(authorizationValue)); + + assertEquals(actualBody, expectedBody); + + verify(getRequestedFor(urlEqualTo("/v2/pet/1")) + .withHeader("Accept", equalTo(EXPECTED_ACCEPTS_HEADER)) + .withHeader(headerName, equalTo(headerValue)) + ); + } + + @Test + public void testAuthorizationHeaderWithNonMatchingUrl() throws Exception { + + final String expectedBody = setupStub(); + + final String headerValue = "foobar"; + String authorization = "Authorization"; + final AuthorizationValue authorizationValue = new AuthorizationValue(authorization, + headerValue, "header", u -> false); + final String actualBody = RemoteUrl.urlToString(getUrl(), Arrays.asList(authorizationValue)); + + + + assertEquals(actualBody, expectedBody); + + List requests = WireMock.findAll(getRequestedFor(urlEqualTo("/v2/pet/1"))); + assertEquals(1, requests.size()); + assertFalse(requests.get(0).containsHeader(authorization)); + } + @Test public void testHostHeader() throws Exception {