From 583a685f052cf090e92c457fb0ff6e8e06f13ed5 Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Tue, 19 Feb 2019 10:42:45 +0100 Subject: [PATCH] Do not inject base URI components to absolute URIs. PrefixAwareUriBuilderFactory now no longer injects components from a base URI into a URI that is considered an absolute one (URI starting with https: or http: protocol schemes). Resolves gh-377. --- .../vault/client/VaultClients.java | 4 +++ .../vault/client/VaultClientsUnitTests.java | 30 +++++++++++++++++-- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/spring-vault-core/src/main/java/org/springframework/vault/client/VaultClients.java b/spring-vault-core/src/main/java/org/springframework/vault/client/VaultClients.java index 40a9c3ac..e81021fe 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/client/VaultClients.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/client/VaultClients.java @@ -219,6 +219,10 @@ public class VaultClients { @Override public UriBuilder uriString(String uriTemplate) { + if (uriTemplate.startsWith("http:") || uriTemplate.startsWith("https:")) { + return UriComponentsBuilder.fromUriString(uriTemplate); + } + VaultEndpoint endpoint = endpointProvider.getVaultEndpoint(); String baseUri = toBaseUri(endpoint); diff --git a/spring-vault-core/src/test/java/org/springframework/vault/client/VaultClientsUnitTests.java b/spring-vault-core/src/test/java/org/springframework/vault/client/VaultClientsUnitTests.java index 3fac83d6..596d88d3 100644 --- a/spring-vault-core/src/test/java/org/springframework/vault/client/VaultClientsUnitTests.java +++ b/spring-vault-core/src/test/java/org/springframework/vault/client/VaultClientsUnitTests.java @@ -23,6 +23,7 @@ import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.test.web.client.MockRestServiceServer; +import org.springframework.vault.client.VaultClients.PrefixAwareUriBuilderFactory; import org.springframework.vault.client.VaultClients.PrefixAwareUriTemplateHandler; import org.springframework.web.client.RestTemplate; @@ -40,7 +41,7 @@ import static org.springframework.test.web.client.response.MockRestResponseCreat public class VaultClientsUnitTests { @Test - public void shouldPrefixRelativeUrl() { + public void uriHandlerShouldPrefixRelativeUrl() { VaultEndpoint localhost = VaultEndpoint.create("localhost", 8200); PrefixAwareUriTemplateHandler handler = new PrefixAwareUriTemplateHandler( @@ -52,7 +53,7 @@ public class VaultClientsUnitTests { } @Test - public void shouldNotPrefixAbsoluteUrl() { + public void uriHandlerShouldNotPrefixAbsoluteUrl() { VaultEndpoint localhost = VaultEndpoint.create("localhost", 8200); PrefixAwareUriTemplateHandler handler = new PrefixAwareUriTemplateHandler( @@ -64,6 +65,31 @@ public class VaultClientsUnitTests { .hasPath("/path/bar"); } + @Test + public void uriBuilderShouldPrefixRelativeUrl() { + + VaultEndpoint localhost = VaultEndpoint.create("localhost", 8200); + PrefixAwareUriBuilderFactory handler = new PrefixAwareUriBuilderFactory( + () -> localhost); + + URI uri = handler.expand("/path/{bar}", "bar"); + + assertThat(uri).hasHost("localhost").hasPort(8200).hasPath("/v1/path/bar"); + } + + @Test + public void uriBuilderShouldNotPrefixAbsoluteUrl() { + + VaultEndpoint localhost = VaultEndpoint.create("localhost", 8200); + PrefixAwareUriBuilderFactory handler = new PrefixAwareUriBuilderFactory( + () -> localhost); + + URI uri = handler.expand("https://foo/path/{bar}", "bar"); + + assertThat(uri).hasScheme("https").hasHost("foo").hasPort(-1) + .hasPath("/path/bar"); + } + @Test public void shouldApplyNamespace() {