From c90d9f5d6ddf577ade1fa0da24414d532c0eec32 Mon Sep 17 00:00:00 2001 From: Ryan Baxter Date: Fri, 6 Jun 2025 16:19:39 -0400 Subject: [PATCH] Changes for 5.0.0 release --- .github/dependabot.yml | 20 +++++++++- .github/workflows/maven.yaml | 4 +- docs/pom.xml | 2 +- pom.xml | 12 ++++-- spring-cloud-config-client-tls-tests/pom.xml | 4 +- spring-cloud-config-client/pom.xml | 2 +- .../ConfigServerConfigDataResource.java | 6 +-- .../ConfigServerConfigDataLoaderTests.java | 4 +- ...ServerConfigDataLocationResolverTests.java | 1 - ...nfigServicePropertySourceLocatorTests.java | 4 +- spring-cloud-config-dependencies/pom.xml | 6 +-- spring-cloud-config-monitor/pom.xml | 4 +- ...BasePropertyPathNotificationExtractor.java | 6 +-- ...cketPropertyPathNotificationExtractor.java | 4 +- ...sitePropertyPathNotificationExtractor.java | 6 +-- ...iteaPropertyPathNotificationExtractor.java | 4 +- ...iteePropertyPathNotificationExtractor.java | 4 +- ...thubPropertyPathNotificationExtractor.java | 4 +- ...tlabPropertyPathNotificationExtractor.java | 4 +- ...GogsPropertyPathNotificationExtractor.java | 4 +- .../PropertyPathNotificationExtractor.java | 7 +++- spring-cloud-config-sample/pom.xml | 2 +- spring-cloud-config-server/pom.xml | 7 +++- .../GcpIamClientAuthenticationProvider.java | 37 ++++++++++--------- .../VanillaConfigServerIntegrationTests.java | 2 +- .../VaultEnvironmentRepositoryTests.java | 14 ++++--- .../SpringVaultClientConfigurationTests.java | 4 +- spring-cloud-starter-config/pom.xml | 4 +- 28 files changed, 110 insertions(+), 72 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index f85cb0d9..6d10e226 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -10,6 +10,11 @@ updates: target-branch: "4.2.x" schedule: interval: "weekly" + - package-ecosystem: "github-actions" + directory: "/" + target-branch: "4.3.x" + schedule: + interval: "weekly" - package-ecosystem: "github-actions" directory: "/" target-branch: "main" @@ -41,12 +46,18 @@ updates: directory: / schedule: interval: daily - target-branch: main + target-branch: 4.3.x ignore: - # only upgrade by minor or patch + # only upgrade patch versions for maintenance branch - dependency-name: "*" update-types: - version-update:semver-major + - version-update:semver-minor + - package-ecosystem: maven + directory: / + schedule: + interval: daily + target-branch: main - package-ecosystem: npm target-branch: docs-build directory: / @@ -67,3 +78,8 @@ updates: directory: /docs schedule: interval: weekly + - package-ecosystem: npm + target-branch: 4.3.x + directory: /docs + schedule: + interval: weekly diff --git a/.github/workflows/maven.yaml b/.github/workflows/maven.yaml index b71eb0ba..48671a22 100644 --- a/.github/workflows/maven.yaml +++ b/.github/workflows/maven.yaml @@ -5,9 +5,9 @@ name: Build on: push: - branches: [ main, 4.2.x, 4.1.x, 4.0.x, 3.1.x ] + branches: [ main, 4.3.x, 4.2.x, 4.1.x, 4.0.x, 3.1.x ] pull_request: - branches: [ main, 4.2.x, 4.1.x, 4.0.x, 3.1.x ] + branches: [ main, 4.3.x, 4.2.x, 4.1.x, 4.0.x, 3.1.x ] jobs: build: diff --git a/docs/pom.xml b/docs/pom.xml index 1f527e6b..bd4ba4d4 100644 --- a/docs/pom.xml +++ b/docs/pom.xml @@ -8,7 +8,7 @@ org.springframework.cloud spring-cloud-config - 4.3.1-SNAPSHOT + 5.0.0-SNAPSHOT .. jar diff --git a/pom.xml b/pom.xml index bb89d887..42404f26 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 org.springframework.cloud spring-cloud-config - 4.3.1-SNAPSHOT + 5.0.0-SNAPSHOT pom Spring Cloud Config Spring Cloud Config @@ -13,7 +13,7 @@ org.springframework.cloud spring-cloud-build - 4.3.1-SNAPSHOT + 5.0.0-SNAPSHOT @@ -27,9 +27,10 @@ config - 4.3.1-SNAPSHOT + 5.0.0-SNAPSHOT 2.31.58 v1-rev20201112-1.30.10 + 2.60.0 2.35.2 3.3.1 true @@ -82,6 +83,11 @@ google-api-services-iam ${google-api-services-iam.version} + + com.google.cloud + google-cloud-iamcredentials + ${google-cloud-iamcredentials.version} + com.google.auth google-auth-library-oauth2-http diff --git a/spring-cloud-config-client-tls-tests/pom.xml b/spring-cloud-config-client-tls-tests/pom.xml index c3f83877..e693d432 100644 --- a/spring-cloud-config-client-tls-tests/pom.xml +++ b/spring-cloud-config-client-tls-tests/pom.xml @@ -9,7 +9,7 @@ org.springframework.cloud spring-cloud-config - 4.3.1-SNAPSHOT + 5.0.0-SNAPSHOT .. @@ -99,7 +99,7 @@ org.bouncycastle bcpkix-jdk18on - 1.80 + 1.81 test diff --git a/spring-cloud-config-client/pom.xml b/spring-cloud-config-client/pom.xml index eba19761..53897c56 100644 --- a/spring-cloud-config-client/pom.xml +++ b/spring-cloud-config-client/pom.xml @@ -10,7 +10,7 @@ org.springframework.cloud spring-cloud-config - 4.3.1-SNAPSHOT + 5.0.0-SNAPSHOT .. diff --git a/spring-cloud-config-client/src/main/java/org/springframework/cloud/config/client/ConfigServerConfigDataResource.java b/spring-cloud-config-client/src/main/java/org/springframework/cloud/config/client/ConfigServerConfigDataResource.java index 46ca540d..5249bdc6 100644 --- a/spring-cloud-config-client/src/main/java/org/springframework/cloud/config/client/ConfigServerConfigDataResource.java +++ b/spring-cloud-config-client/src/main/java/org/springframework/cloud/config/client/ConfigServerConfigDataResource.java @@ -124,8 +124,8 @@ public class ConfigServerConfigDataResource extends ConfigDataResource { private boolean uriEqual(String thisUriString, String thatUriString) { try { - UriComponents thisUri = UriComponentsBuilder.fromHttpUrl(thisUriString).build(); - UriComponents thatUri = UriComponentsBuilder.fromHttpUrl(thatUriString).build(); + UriComponents thisUri = UriComponentsBuilder.fromUriString(thisUriString).build(); + UriComponents thatUri = UriComponentsBuilder.fromUriString(thatUriString).build(); return Objects.equals(thisUri.getHost(), thatUri.getHost()) && Objects.equals(thisUri.getPort(), thatUri.getPort()) && Objects.equals(thisUri.getPath(), thatUri.getPath()); @@ -138,7 +138,7 @@ public class ConfigServerConfigDataResource extends ConfigDataResource { private int urisHashCode(String[] uris) { return Arrays.stream(uris).mapToInt(uriString -> { try { - UriComponents uriComponents = UriComponentsBuilder.fromHttpUrl(uriString).build(); + UriComponents uriComponents = UriComponentsBuilder.fromUriString(uriString).build(); return Objects.hash(uriComponents.getHost(), uriComponents.getPath(), uriComponents.getPort()); } catch (Exception e) { diff --git a/spring-cloud-config-client/src/test/java/org/springframework/cloud/config/client/ConfigServerConfigDataLoaderTests.java b/spring-cloud-config-client/src/test/java/org/springframework/cloud/config/client/ConfigServerConfigDataLoaderTests.java index f6b8012d..a773efa7 100644 --- a/spring-cloud-config-client/src/test/java/org/springframework/cloud/config/client/ConfigServerConfigDataLoaderTests.java +++ b/spring-cloud-config-client/src/test/java/org/springframework/cloud/config/client/ConfigServerConfigDataLoaderTests.java @@ -263,7 +263,7 @@ public class ConfigServerConfigDataLoaderTests { String username = "user"; String password = "pass"; factory(properties).addAuthorizationToken(headers, username, password); - assertThat(headers).hasSize(1); + assertThat(headers.size()).isEqualTo(1); } @Test @@ -272,7 +272,7 @@ public class ConfigServerConfigDataLoaderTests { properties.getHeaders().put(AUTHORIZATION, "Basic dXNlcm5hbWU6cGFzc3dvcmQNCg=="); String username = "user"; factory(properties).addAuthorizationToken(headers, username, null); - assertThat(headers).hasSize(1); + assertThat(headers.size()).isEqualTo(1); } @Test diff --git a/spring-cloud-config-client/src/test/java/org/springframework/cloud/config/client/ConfigServerConfigDataLocationResolverTests.java b/spring-cloud-config-client/src/test/java/org/springframework/cloud/config/client/ConfigServerConfigDataLocationResolverTests.java index 9f2040ee..918684c9 100644 --- a/spring-cloud-config-client/src/test/java/org/springframework/cloud/config/client/ConfigServerConfigDataLocationResolverTests.java +++ b/spring-cloud-config-client/src/test/java/org/springframework/cloud/config/client/ConfigServerConfigDataLocationResolverTests.java @@ -23,7 +23,6 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.ArgumentCaptor; -import org.springframework.beans.factory.support.InstanceSupplier; import org.springframework.boot.BootstrapRegistry; import org.springframework.boot.ConfigurableBootstrapContext; import org.springframework.boot.context.config.ConfigDataLocation; diff --git a/spring-cloud-config-client/src/test/java/org/springframework/cloud/config/client/ConfigServicePropertySourceLocatorTests.java b/spring-cloud-config-client/src/test/java/org/springframework/cloud/config/client/ConfigServicePropertySourceLocatorTests.java index 28401a04..9fc1d382 100644 --- a/spring-cloud-config-client/src/test/java/org/springframework/cloud/config/client/ConfigServicePropertySourceLocatorTests.java +++ b/spring-cloud-config-client/src/test/java/org/springframework/cloud/config/client/ConfigServicePropertySourceLocatorTests.java @@ -254,7 +254,7 @@ public class ConfigServicePropertySourceLocatorTests { String username = "user"; String password = "pass"; factory(defaults).addAuthorizationToken(headers, username, password); - assertThat(headers).hasSize(1); + assertThat(headers.size()).isEqualTo(1); } @Test @@ -265,7 +265,7 @@ public class ConfigServicePropertySourceLocatorTests { String username = "user"; String password = null; factory(defaults).addAuthorizationToken(headers, username, password); - assertThat(headers).hasSize(1); + assertThat(headers.size()).isEqualTo(1); } @Test diff --git a/spring-cloud-config-dependencies/pom.xml b/spring-cloud-config-dependencies/pom.xml index 890b3633..6f64179c 100644 --- a/spring-cloud-config-dependencies/pom.xml +++ b/spring-cloud-config-dependencies/pom.xml @@ -6,17 +6,17 @@ spring-cloud-dependencies-parent org.springframework.cloud - 4.3.1-SNAPSHOT + 5.0.0-SNAPSHOT spring-cloud-config-dependencies - 4.3.1-SNAPSHOT + 5.0.0-SNAPSHOT pom spring-cloud-config-dependencies Spring Cloud Config Dependencies 6.10.1.202505221210-r - 3.2.0 + 4.0.0-SNAPSHOT 2.1.1.RELEASE 2.0.10 diff --git a/spring-cloud-config-monitor/pom.xml b/spring-cloud-config-monitor/pom.xml index b4f45649..694c5a9a 100644 --- a/spring-cloud-config-monitor/pom.xml +++ b/spring-cloud-config-monitor/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-config - 4.3.1-SNAPSHOT + 5.0.0-SNAPSHOT .. spring-cloud-config-monitor @@ -14,7 +14,7 @@ Spring Cloud Config Monitor ${basedir}/../.. - 4.3.1-SNAPSHOT + 5.0.0-SNAPSHOT diff --git a/spring-cloud-config-monitor/src/main/java/org/springframework/cloud/config/monitor/BasePropertyPathNotificationExtractor.java b/spring-cloud-config-monitor/src/main/java/org/springframework/cloud/config/monitor/BasePropertyPathNotificationExtractor.java index 8a6c547b..264a8047 100755 --- a/spring-cloud-config-monitor/src/main/java/org/springframework/cloud/config/monitor/BasePropertyPathNotificationExtractor.java +++ b/spring-cloud-config-monitor/src/main/java/org/springframework/cloud/config/monitor/BasePropertyPathNotificationExtractor.java @@ -21,7 +21,7 @@ import java.util.LinkedHashSet; import java.util.Map; import java.util.Set; -import org.springframework.util.MultiValueMap; +import org.springframework.http.HttpHeaders; /** * @author Dave Syer @@ -30,7 +30,7 @@ import org.springframework.util.MultiValueMap; public abstract class BasePropertyPathNotificationExtractor implements PropertyPathNotificationExtractor { @Override - public PropertyPathNotification extract(MultiValueMap headers, Map request) { + public PropertyPathNotification extract(HttpHeaders headers, Map request) { if (requestBelongsToGitRepoManager(headers)) { if (request.get("commits") instanceof Collection) { Set paths = new LinkedHashSet<>(); @@ -61,6 +61,6 @@ public abstract class BasePropertyPathNotificationExtractor implements PropertyP } } - protected abstract boolean requestBelongsToGitRepoManager(MultiValueMap headers); + protected abstract boolean requestBelongsToGitRepoManager(HttpHeaders headers); } diff --git a/spring-cloud-config-monitor/src/main/java/org/springframework/cloud/config/monitor/BitbucketPropertyPathNotificationExtractor.java b/spring-cloud-config-monitor/src/main/java/org/springframework/cloud/config/monitor/BitbucketPropertyPathNotificationExtractor.java index eb1e618c..862d60c6 100644 --- a/spring-cloud-config-monitor/src/main/java/org/springframework/cloud/config/monitor/BitbucketPropertyPathNotificationExtractor.java +++ b/spring-cloud-config-monitor/src/main/java/org/springframework/cloud/config/monitor/BitbucketPropertyPathNotificationExtractor.java @@ -21,7 +21,7 @@ import java.util.Map; import org.springframework.core.Ordered; import org.springframework.core.annotation.Order; -import org.springframework.util.MultiValueMap; +import org.springframework.http.HttpHeaders; import org.springframework.util.StringUtils; /** @@ -34,7 +34,7 @@ import org.springframework.util.StringUtils; public class BitbucketPropertyPathNotificationExtractor implements PropertyPathNotificationExtractor { @Override - public PropertyPathNotification extract(MultiValueMap headers, Map request) { + public PropertyPathNotification extract(HttpHeaders headers, Map request) { if (("repo:push".equals(headers.getFirst("X-Event-Key")) || "pullrequest:fulfilled".equals(headers.getFirst("X-Event-Key"))) && StringUtils.hasText(headers.getFirst("X-Hook-UUID"))) { diff --git a/spring-cloud-config-monitor/src/main/java/org/springframework/cloud/config/monitor/CompositePropertyPathNotificationExtractor.java b/spring-cloud-config-monitor/src/main/java/org/springframework/cloud/config/monitor/CompositePropertyPathNotificationExtractor.java index f311c49e..fac7de3c 100644 --- a/spring-cloud-config-monitor/src/main/java/org/springframework/cloud/config/monitor/CompositePropertyPathNotificationExtractor.java +++ b/spring-cloud-config-monitor/src/main/java/org/springframework/cloud/config/monitor/CompositePropertyPathNotificationExtractor.java @@ -24,7 +24,7 @@ import java.util.Map; import org.springframework.core.Ordered; import org.springframework.core.annotation.AnnotationAwareOrderComparator; import org.springframework.core.annotation.Order; -import org.springframework.util.MultiValueMap; +import org.springframework.http.HttpHeaders; /** * A {@link PropertyPathNotificationExtractor} that cycles through a set of (ordered) @@ -47,7 +47,7 @@ public class CompositePropertyPathNotificationExtractor implements PropertyPathN } @Override - public PropertyPathNotification extract(MultiValueMap headers, Map request) { + public PropertyPathNotification extract(HttpHeaders headers, Map request) { for (PropertyPathNotificationExtractor extractor : this.extractors) { PropertyPathNotification result = extractor.extract(headers, request); if (result != null) { @@ -61,7 +61,7 @@ public class CompositePropertyPathNotificationExtractor implements PropertyPathN private static class SimplePropertyPathNotificationExtractor implements PropertyPathNotificationExtractor { @Override - public PropertyPathNotification extract(MultiValueMap headers, Map request) { + public PropertyPathNotification extract(HttpHeaders headers, Map request) { Object object = request.get("path"); if (object instanceof String) { return new PropertyPathNotification((String) object); diff --git a/spring-cloud-config-monitor/src/main/java/org/springframework/cloud/config/monitor/GiteaPropertyPathNotificationExtractor.java b/spring-cloud-config-monitor/src/main/java/org/springframework/cloud/config/monitor/GiteaPropertyPathNotificationExtractor.java index 64046951..9a5ca1c3 100755 --- a/spring-cloud-config-monitor/src/main/java/org/springframework/cloud/config/monitor/GiteaPropertyPathNotificationExtractor.java +++ b/spring-cloud-config-monitor/src/main/java/org/springframework/cloud/config/monitor/GiteaPropertyPathNotificationExtractor.java @@ -22,7 +22,7 @@ import java.util.Set; import org.springframework.core.Ordered; import org.springframework.core.annotation.Order; -import org.springframework.util.MultiValueMap; +import org.springframework.http.HttpHeaders; /** * @author Juan Pablo Santos Rodríguez @@ -46,7 +46,7 @@ public class GiteaPropertyPathNotificationExtractor extends BasePropertyPathNoti } @Override - protected boolean requestBelongsToGitRepoManager(MultiValueMap headers) { + protected boolean requestBelongsToGitRepoManager(HttpHeaders headers) { return HEADERS_VALUE.equals(headers.getFirst(HEADERS_KEY)); } diff --git a/spring-cloud-config-monitor/src/main/java/org/springframework/cloud/config/monitor/GiteePropertyPathNotificationExtractor.java b/spring-cloud-config-monitor/src/main/java/org/springframework/cloud/config/monitor/GiteePropertyPathNotificationExtractor.java index cf4bfdaf..7165f5aa 100644 --- a/spring-cloud-config-monitor/src/main/java/org/springframework/cloud/config/monitor/GiteePropertyPathNotificationExtractor.java +++ b/spring-cloud-config-monitor/src/main/java/org/springframework/cloud/config/monitor/GiteePropertyPathNotificationExtractor.java @@ -18,7 +18,7 @@ package org.springframework.cloud.config.monitor; import org.springframework.core.Ordered; import org.springframework.core.annotation.Order; -import org.springframework.util.MultiValueMap; +import org.springframework.http.HttpHeaders; /** * @author lly 835 @@ -32,7 +32,7 @@ public class GiteePropertyPathNotificationExtractor extends BasePropertyPathNoti private static final String HEADERS_VALUE = "Push Hook"; @Override - protected boolean requestBelongsToGitRepoManager(MultiValueMap headers) { + protected boolean requestBelongsToGitRepoManager(HttpHeaders headers) { return HEADERS_VALUE.equals(headers.getFirst(HEADERS_KEY)); } diff --git a/spring-cloud-config-monitor/src/main/java/org/springframework/cloud/config/monitor/GithubPropertyPathNotificationExtractor.java b/spring-cloud-config-monitor/src/main/java/org/springframework/cloud/config/monitor/GithubPropertyPathNotificationExtractor.java index 7fae9b0a..4de7881b 100644 --- a/spring-cloud-config-monitor/src/main/java/org/springframework/cloud/config/monitor/GithubPropertyPathNotificationExtractor.java +++ b/spring-cloud-config-monitor/src/main/java/org/springframework/cloud/config/monitor/GithubPropertyPathNotificationExtractor.java @@ -18,7 +18,7 @@ package org.springframework.cloud.config.monitor; import org.springframework.core.Ordered; import org.springframework.core.annotation.Order; -import org.springframework.util.MultiValueMap; +import org.springframework.http.HttpHeaders; /** * @author Dave Syer @@ -28,7 +28,7 @@ import org.springframework.util.MultiValueMap; public class GithubPropertyPathNotificationExtractor extends BasePropertyPathNotificationExtractor { @Override - protected boolean requestBelongsToGitRepoManager(MultiValueMap headers) { + protected boolean requestBelongsToGitRepoManager(HttpHeaders headers) { return "push".equals(headers.getFirst("X-Github-Event")); } diff --git a/spring-cloud-config-monitor/src/main/java/org/springframework/cloud/config/monitor/GitlabPropertyPathNotificationExtractor.java b/spring-cloud-config-monitor/src/main/java/org/springframework/cloud/config/monitor/GitlabPropertyPathNotificationExtractor.java index 4d67c9ce..5709f825 100644 --- a/spring-cloud-config-monitor/src/main/java/org/springframework/cloud/config/monitor/GitlabPropertyPathNotificationExtractor.java +++ b/spring-cloud-config-monitor/src/main/java/org/springframework/cloud/config/monitor/GitlabPropertyPathNotificationExtractor.java @@ -18,7 +18,7 @@ package org.springframework.cloud.config.monitor; import org.springframework.core.Ordered; import org.springframework.core.annotation.Order; -import org.springframework.util.MultiValueMap; +import org.springframework.http.HttpHeaders; /** * @author Dave Syer @@ -28,7 +28,7 @@ import org.springframework.util.MultiValueMap; public class GitlabPropertyPathNotificationExtractor extends BasePropertyPathNotificationExtractor { @Override - protected boolean requestBelongsToGitRepoManager(MultiValueMap headers) { + protected boolean requestBelongsToGitRepoManager(HttpHeaders headers) { return "Push Hook".equals(headers.getFirst("X-Gitlab-Event")); } diff --git a/spring-cloud-config-monitor/src/main/java/org/springframework/cloud/config/monitor/GogsPropertyPathNotificationExtractor.java b/spring-cloud-config-monitor/src/main/java/org/springframework/cloud/config/monitor/GogsPropertyPathNotificationExtractor.java index dce918ec..4359a329 100755 --- a/spring-cloud-config-monitor/src/main/java/org/springframework/cloud/config/monitor/GogsPropertyPathNotificationExtractor.java +++ b/spring-cloud-config-monitor/src/main/java/org/springframework/cloud/config/monitor/GogsPropertyPathNotificationExtractor.java @@ -18,7 +18,7 @@ package org.springframework.cloud.config.monitor; import org.springframework.core.Ordered; import org.springframework.core.annotation.Order; -import org.springframework.util.MultiValueMap; +import org.springframework.http.HttpHeaders; /** * @author lly 835 @@ -32,7 +32,7 @@ public class GogsPropertyPathNotificationExtractor extends BasePropertyPathNotif private static final String HEADERS_VALUE = "push"; @Override - protected boolean requestBelongsToGitRepoManager(MultiValueMap headers) { + protected boolean requestBelongsToGitRepoManager(HttpHeaders headers) { return HEADERS_VALUE.equals(headers.getFirst(HEADERS_KEY)); } diff --git a/spring-cloud-config-monitor/src/main/java/org/springframework/cloud/config/monitor/PropertyPathNotificationExtractor.java b/spring-cloud-config-monitor/src/main/java/org/springframework/cloud/config/monitor/PropertyPathNotificationExtractor.java index 0152967e..29ebc431 100644 --- a/spring-cloud-config-monitor/src/main/java/org/springframework/cloud/config/monitor/PropertyPathNotificationExtractor.java +++ b/spring-cloud-config-monitor/src/main/java/org/springframework/cloud/config/monitor/PropertyPathNotificationExtractor.java @@ -18,6 +18,7 @@ package org.springframework.cloud.config.monitor; import java.util.Map; +import org.springframework.http.HttpHeaders; import org.springframework.util.MultiValueMap; /** @@ -30,6 +31,10 @@ import org.springframework.util.MultiValueMap; */ public interface PropertyPathNotificationExtractor { - PropertyPathNotification extract(MultiValueMap headers, Map payload); + default PropertyPathNotification extract(MultiValueMap headers, Map payload) { + return extract(new HttpHeaders(headers), payload); + } + + PropertyPathNotification extract(HttpHeaders headers, Map payload); } diff --git a/spring-cloud-config-sample/pom.xml b/spring-cloud-config-sample/pom.xml index 86604875..2391492b 100644 --- a/spring-cloud-config-sample/pom.xml +++ b/spring-cloud-config-sample/pom.xml @@ -13,7 +13,7 @@ org.springframework.cloud spring-cloud-config - 4.3.1-SNAPSHOT + 5.0.0-SNAPSHOT .. diff --git a/spring-cloud-config-server/pom.xml b/spring-cloud-config-server/pom.xml index bcf302b1..dca59dbf 100644 --- a/spring-cloud-config-server/pom.xml +++ b/spring-cloud-config-server/pom.xml @@ -13,7 +13,7 @@ org.springframework.cloud spring-cloud-config - 4.3.1-SNAPSHOT + 5.0.0-SNAPSHOT .. @@ -137,6 +137,11 @@ google-cloud-secretmanager true + + com.google.cloud + google-cloud-iamcredentials + true + com.google.apis google-api-services-cloudresourcemanager diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/vault/authentication/GcpIamClientAuthenticationProvider.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/vault/authentication/GcpIamClientAuthenticationProvider.java index 9d1b0a38..c9816737 100644 --- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/vault/authentication/GcpIamClientAuthenticationProvider.java +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/vault/authentication/GcpIamClientAuthenticationProvider.java @@ -17,9 +17,10 @@ package org.springframework.cloud.config.server.environment.vault.authentication; import java.io.ByteArrayInputStream; +import java.io.IOException; import java.util.Base64; -import com.google.api.client.googleapis.auth.oauth2.GoogleCredential; +import com.google.auth.oauth2.GoogleCredentials; import org.springframework.cloud.config.server.environment.VaultEnvironmentProperties; import org.springframework.cloud.config.server.environment.VaultEnvironmentProperties.AuthenticationMethod; @@ -27,9 +28,8 @@ import org.springframework.cloud.config.server.environment.vault.SpringVaultClie import org.springframework.util.Assert; import org.springframework.util.StringUtils; import org.springframework.vault.authentication.ClientAuthentication; -import org.springframework.vault.authentication.GcpCredentialSupplier; -import org.springframework.vault.authentication.GcpIamAuthentication; -import org.springframework.vault.authentication.GcpIamAuthenticationOptions; +import org.springframework.vault.authentication.GcpIamCredentialsAuthentication; +import org.springframework.vault.authentication.GcpIamCredentialsAuthenticationOptions; import org.springframework.web.client.RestOperations; public class GcpIamClientAuthenticationProvider extends SpringVaultClientAuthenticationProvider { @@ -49,45 +49,48 @@ public class GcpIamClientAuthenticationProvider extends SpringVaultClientAuthent Assert.hasText(gcp.getRole(), missingPropertyForAuthMethod("gcp-iam.role", AuthenticationMethod.GCP_IAM)); - GcpIamAuthenticationOptions.GcpIamAuthenticationOptionsBuilder builder = GcpIamAuthenticationOptions.builder() + GcpIamCredentialsAuthenticationOptions.GcpIamCredentialsAuthenticationOptionsBuilder builder = GcpIamCredentialsAuthenticationOptions + .builder() .path(gcp.getGcpPath()) .role(gcp.getRole()) .jwtValidity(gcp.getJwtValidity()); if (StringUtils.hasText(gcp.getProjectId())) { - builder.projectId(gcp.getProjectId()); + builder.serviceAccountId(gcp.getProjectId()); } if (StringUtils.hasText(gcp.getServiceAccountId())) { builder.serviceAccountId(gcp.getServiceAccountId()); } - GcpCredentialSupplier supplier = GcpCredentialProvider.getGoogleCredential(gcp); - builder.credential(supplier.get()); + builder.credentials(GcpCredentialProvider.getGoogleCredential(gcp)); - GcpIamAuthenticationOptions options = builder.build(); + GcpIamCredentialsAuthenticationOptions options = builder.build(); - return new GcpIamAuthentication(options, vaultRestOperations); + return new GcpIamCredentialsAuthentication(options, vaultRestOperations); } @SuppressWarnings("deprecation") private static class GcpCredentialProvider { - public static GcpCredentialSupplier getGoogleCredential(VaultEnvironmentProperties.GcpIamProperties gcp) { - return () -> { - + public static GoogleCredentials getGoogleCredential(VaultEnvironmentProperties.GcpIamProperties gcp) { + try { VaultEnvironmentProperties.GcpCredentials credentialProperties = gcp.getCredentials(); if (credentialProperties.getLocation() != null) { - return GoogleCredential.fromStream(credentialProperties.getLocation().getInputStream()); + return GoogleCredentials.fromStream(credentialProperties.getLocation().getInputStream()); } if (StringUtils.hasText(credentialProperties.getEncodedKey())) { - return GoogleCredential.fromStream( + return GoogleCredentials.fromStream( new ByteArrayInputStream(Base64.getDecoder().decode(credentialProperties.getEncodedKey()))); } - return GoogleCredential.getApplicationDefault(); - }; + return GoogleCredentials.getApplicationDefault(); + } + catch (IOException e) { + // TODO log + return GoogleCredentials.newBuilder().build(); + } } } diff --git a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/VanillaConfigServerIntegrationTests.java b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/VanillaConfigServerIntegrationTests.java index 11edc671..0614a6ef 100644 --- a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/VanillaConfigServerIntegrationTests.java +++ b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/VanillaConfigServerIntegrationTests.java @@ -94,7 +94,7 @@ public class VanillaConfigServerIntegrationTests { ResponseEntity response = new TestRestTemplate().exchange( "http://localhost:" + this.port + "/invalid/default", HttpMethod.GET, getV2AcceptEntity(), Environment.class); - assertThat(response.getStatusCodeValue()).isEqualTo(500); + assertThat(response.getStatusCode().value()).isEqualTo(500); } } diff --git a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/VaultEnvironmentRepositoryTests.java b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/VaultEnvironmentRepositoryTests.java index a68f2211..1cda53f4 100644 --- a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/VaultEnvironmentRepositoryTests.java +++ b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/VaultEnvironmentRepositoryTests.java @@ -71,7 +71,8 @@ public class VaultEnvironmentRepositoryTests { assertThat(e.getPropertySources().get(1).getName()).isEqualTo("vault:application"); assertThat(e.getPropertySources().get(1).getSource()).isEqualTo(Map.of("def-foo", "def-bar")); - assertThat(requestHeaderCaptor.getValue().getHeaders()).containsEntry("X-Vault-Token", List.of("token")); + assertThat(requestHeaderCaptor.getValue().getHeaders().containsHeader("X-Vault-Token")).isTrue(); + assertThat(requestHeaderCaptor.getValue().getHeaders().get("X-Vault-Token")).isEqualTo(List.of("token")); } @Test @@ -244,7 +245,8 @@ public class VaultEnvironmentRepositoryTests { assertThat(e.getPropertySources().get(1).getName()).isEqualTo("vault:application"); assertThat(e.getPropertySources().get(1).getSource()).isEqualTo(Map.of("def-foo", "def-bar")); - assertThat(requestHeaderCaptor.getValue().getHeaders()).containsEntry("X-Vault-Token", List.of("token")); + assertThat(requestHeaderCaptor.getValue().getHeaders().containsHeader("X-Vault-Token")).isTrue(); + assertThat(requestHeaderCaptor.getValue().getHeaders().get("X-Vault-Token")).isEqualTo(List.of("token")); } @Test @@ -277,9 +279,11 @@ public class VaultEnvironmentRepositoryTests { vaultEnvironmentRepository(properties).findOne("myapp", null, "lbl"); - assertThat(requestHeaderCaptor.getValue().getHeaders()).containsEntry("X-Vault-Namespace", - List.of("mynamespace")); - assertThat(requestHeaderCaptor.getValue().getHeaders()).containsEntry("X-Vault-Token", List.of("token")); + assertThat(requestHeaderCaptor.getValue().getHeaders().containsHeader("X-Vault-Namespace")).isTrue(); + assertThat(requestHeaderCaptor.getValue().getHeaders().get("X-Vault-Namespace")) + .isEqualTo(List.of("mynamespace")); + assertThat(requestHeaderCaptor.getValue().getHeaders().containsHeader("X-Vault-Token")).isTrue(); + assertThat(requestHeaderCaptor.getValue().getHeaders().get("X-Vault-Token")).isEqualTo(List.of("token")); } @Test diff --git a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/vault/SpringVaultClientConfigurationTests.java b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/vault/SpringVaultClientConfigurationTests.java index caa7baa8..f918f683 100644 --- a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/vault/SpringVaultClientConfigurationTests.java +++ b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/vault/SpringVaultClientConfigurationTests.java @@ -63,7 +63,7 @@ import org.springframework.vault.authentication.ClientAuthentication; import org.springframework.vault.authentication.ClientCertificateAuthentication; import org.springframework.vault.authentication.CubbyholeAuthentication; import org.springframework.vault.authentication.GcpComputeAuthentication; -import org.springframework.vault.authentication.GcpIamAuthentication; +import org.springframework.vault.authentication.GcpIamCredentialsAuthentication; import org.springframework.vault.authentication.KubernetesAuthentication; import org.springframework.vault.authentication.PcfAuthentication; import org.springframework.vault.authentication.TokenAuthentication; @@ -231,7 +231,7 @@ class SpringVaultClientConfigurationTests { properties.getGcpIam().setServiceAccountId("service-account"); properties.getGcpIam().getCredentials().setEncodedKey(base64(GCE_JSON)); - assertClientAuthenticationOfType(properties, GcpIamAuthentication.class); + assertClientAuthenticationOfType(properties, GcpIamCredentialsAuthentication.class); } @Test diff --git a/spring-cloud-starter-config/pom.xml b/spring-cloud-starter-config/pom.xml index f411ef1e..ca4647f7 100644 --- a/spring-cloud-starter-config/pom.xml +++ b/spring-cloud-starter-config/pom.xml @@ -6,10 +6,10 @@ org.springframework.cloud spring-cloud-config - 4.3.1-SNAPSHOT + 5.0.0-SNAPSHOT spring-cloud-starter-config - 4.3.1-SNAPSHOT + 5.0.0-SNAPSHOT spring-cloud-starter-config Spring Cloud Starter https://projects.spring.io/spring-cloud