diff --git a/spring-vault-core/src/main/java/org/springframework/vault/authentication/AppRoleAuthentication.java b/spring-vault-core/src/main/java/org/springframework/vault/authentication/AppRoleAuthentication.java index 62a213ab..7c944899 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/authentication/AppRoleAuthentication.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/authentication/AppRoleAuthentication.java @@ -15,6 +15,9 @@ */ package org.springframework.vault.authentication; +import static org.springframework.vault.authentication.AuthenticationSteps.HttpRequestBuilder.*; +import static org.springframework.vault.authentication.AuthenticationUtil.*; + import java.util.HashMap; import java.util.Map; @@ -43,9 +46,6 @@ import org.springframework.web.client.HttpStatusCodeException; import org.springframework.web.client.RestClientException; import org.springframework.web.client.RestOperations; -import static org.springframework.vault.authentication.AuthenticationSteps.HttpRequestBuilder.*; -import static org.springframework.vault.authentication.AuthenticationUtil.*; - /** * AppRole implementation of {@link ClientAuthentication}. RoleId and SecretId (optional) * are sent in the login request to Vault to obtain a {@link VaultToken}. @@ -217,8 +217,8 @@ public class AppRoleAuthentication implements ClientAuthentication, Authenticati return (String) entity.getBody().getRequiredData().get("role_id"); } catch (HttpStatusCodeException e) { - throw new VaultLoginException(String.format("Cannot get Role id using AppRole: %s", - VaultResponses.getError(e.getResponseBodyAsString())), e); + throw new VaultLoginException("Cannot get Role id using AppRole: %s" + .formatted(VaultResponses.getError(e.getResponseBodyAsString())), e); } } @@ -236,8 +236,8 @@ public class AppRoleAuthentication implements ClientAuthentication, Authenticati return (String) response.getRequiredData().get("role_id"); } catch (HttpStatusCodeException e) { - throw new VaultLoginException(String.format("Cannot unwrap Role id using AppRole: %s", - VaultResponses.getError(e.getResponseBodyAsString())), e); + throw new VaultLoginException("Cannot unwrap Role id using AppRole: %s" + .formatted(VaultResponses.getError(e.getResponseBodyAsString())), e); } } @@ -260,8 +260,8 @@ public class AppRoleAuthentication implements ClientAuthentication, Authenticati return (String) response.getRequiredData().get("secret_id"); } catch (HttpStatusCodeException e) { - throw new VaultLoginException(String.format("Cannot get Secret id using AppRole: %s", - VaultResponses.getError(e.getResponseBodyAsString())), e); + throw new VaultLoginException("Cannot get Secret id using AppRole: %s" + .formatted(VaultResponses.getError(e.getResponseBodyAsString())), e); } } @@ -280,8 +280,8 @@ public class AppRoleAuthentication implements ClientAuthentication, Authenticati return (String) response.getRequiredData().get("secret_id"); } catch (HttpStatusCodeException e) { - throw new VaultLoginException(String.format("Cannot unwrap Role id using AppRole: %s", - VaultResponses.getError(e.getResponseBodyAsString())), e); + throw new VaultLoginException("Cannot unwrap Role id using AppRole: %s" + .formatted(VaultResponses.getError(e.getResponseBodyAsString())), e); } } @@ -331,11 +331,11 @@ public class AppRoleAuthentication implements ClientAuthentication, Authenticati } private static String getSecretIdPath(AppRoleAuthenticationOptions options) { - return String.format("auth/%s/role/%s/secret-id", options.getPath(), options.getAppRole()); + return "auth/%s/role/%s/secret-id".formatted(options.getPath(), options.getAppRole()); } private static String getRoleIdIdPath(AppRoleAuthenticationOptions options) { - return String.format("auth/%s/role/%s/role-id", options.getPath(), options.getAppRole()); + return "auth/%s/role/%s/role-id".formatted(options.getPath(), options.getAppRole()); } } diff --git a/spring-vault-core/src/main/java/org/springframework/vault/authentication/AuthenticationSteps.java b/spring-vault-core/src/main/java/org/springframework/vault/authentication/AuthenticationSteps.java index 178d6845..4345dcbb 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/authentication/AuthenticationSteps.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/authentication/AuthenticationSteps.java @@ -446,7 +446,7 @@ public class AuthenticationSteps { @Override public String toString() { - return String.format("%s %s AS %s", getMethod(), getUri() != null ? getUri() : getUriTemplate(), + return "%s %s AS %s".formatted(getMethod(), getUri() != null ? getUri() : getUriTemplate(), getResponseType()); } @@ -508,9 +508,8 @@ public class AuthenticationSteps { public boolean equals(Object o) { if (this == o) return true; - if (!(o instanceof HttpRequestNode)) + if (!(o instanceof HttpRequestNode that)) return false; - HttpRequestNode that = (HttpRequestNode) o; return this.definition.equals(that.definition) && this.previous.equals(that.previous); } @@ -553,9 +552,8 @@ public class AuthenticationSteps { public boolean equals(Object o) { if (this == o) return true; - if (!(o instanceof MapStep)) + if (!(o instanceof MapStep mapStep)) return false; - MapStep mapStep = (MapStep) o; return this.mapper.equals(mapStep.mapper) && this.previous.equals(mapStep.previous); } @@ -599,9 +597,8 @@ public class AuthenticationSteps { public boolean equals(Object o) { if (this == o) return true; - if (!(o instanceof ZipStep)) + if (!(o instanceof ZipStep zipStep)) return false; - ZipStep zipStep = (ZipStep) o; return this.left.equals(zipStep.left) && this.right.equals(zipStep.right); } @@ -645,9 +642,8 @@ public class AuthenticationSteps { public boolean equals(Object o) { if (this == o) return true; - if (!(o instanceof OnNextStep)) + if (!(o instanceof OnNextStep that)) return false; - OnNextStep that = (OnNextStep) o; return this.consumer.equals(that.consumer) && this.previous.equals(that.previous); } @@ -686,9 +682,8 @@ public class AuthenticationSteps { public boolean equals(Object o) { if (this == o) return true; - if (!(o instanceof ScalarValueStep)) + if (!(o instanceof ScalarValueStep that)) return false; - ScalarValueStep that = (ScalarValueStep) o; return this.value.equals(that.value) && this.previous.equals(that.previous); } @@ -731,9 +726,8 @@ public class AuthenticationSteps { public boolean equals(Object o) { if (this == o) return true; - if (!(o instanceof SupplierStep)) + if (!(o instanceof SupplierStep that)) return false; - SupplierStep that = (SupplierStep) o; return this.supplier.equals(that.supplier) && this.previous.equals(that.previous); } @@ -798,9 +792,8 @@ public class AuthenticationSteps { public boolean equals(Object o) { if (this == o) return true; - if (!(o instanceof Pair)) + if (!(o instanceof Pair pair)) return false; - Pair pair = (Pair) o; return this.left.equals(pair.left) && this.right.equals(pair.right); } diff --git a/spring-vault-core/src/main/java/org/springframework/vault/authentication/AuthenticationStepsExecutor.java b/spring-vault-core/src/main/java/org/springframework/vault/authentication/AuthenticationStepsExecutor.java index 9a40aa01..fa68efe3 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/authentication/AuthenticationStepsExecutor.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/authentication/AuthenticationStepsExecutor.java @@ -81,15 +81,14 @@ public class AuthenticationStepsExecutor implements ClientAuthentication { return (VaultToken) state; } - if (state instanceof VaultResponse) { + if (state instanceof VaultResponse response) { - VaultResponse response = (VaultResponse) state; Assert.state(response.getAuth() != null, "Auth field must not be null"); return LoginTokenUtil.from(response.getAuth()); } throw new IllegalStateException( - String.format("Cannot retrieve VaultToken from authentication chain. Got instead %s", state)); + "Cannot retrieve VaultToken from authentication chain. Got instead %s".formatted(state)); } @SuppressWarnings({ "unchecked", "ConstantConditions" }) @@ -100,7 +99,7 @@ public class AuthenticationStepsExecutor implements ClientAuthentication { for (Node o : steps) { if (logger.isDebugEnabled()) { - logger.debug(String.format("Executing %s with current state %s", o, state)); + logger.debug("Executing %s with current state %s".formatted(o, state)); } try { @@ -129,17 +128,15 @@ public class AuthenticationStepsExecutor implements ClientAuthentication { } if (logger.isDebugEnabled()) { - logger.debug(String.format("Executed %s with current state %s", o, state)); + logger.debug("Executed %s with current state %s".formatted(o, state)); } } catch (HttpStatusCodeException e) { - throw new VaultLoginException( - String.format("HTTP request %s in state %s failed with Status %s and body %s", o, state, - e.getStatusCode().value(), VaultResponses.getError(e.getResponseBodyAsString())), - e); + throw new VaultLoginException("HTTP request %s in state %s failed with Status %s and body %s".formatted( + o, state, e.getStatusCode().value(), VaultResponses.getError(e.getResponseBodyAsString())), e); } catch (RuntimeException e) { - throw new VaultLoginException(String.format("Authentication execution failed in %s", o), e); + throw new VaultLoginException("Authentication execution failed in %s".formatted(o), e); } } return state; diff --git a/spring-vault-core/src/main/java/org/springframework/vault/authentication/AuthenticationStepsOperator.java b/spring-vault-core/src/main/java/org/springframework/vault/authentication/AuthenticationStepsOperator.java index 5bf9919c..024248c2 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/authentication/AuthenticationStepsOperator.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/authentication/AuthenticationStepsOperator.java @@ -101,9 +101,7 @@ public class AuthenticationStepsOperator implements VaultTokenSupplier { return (VaultToken) stateObject; } - if (stateObject instanceof VaultResponse) { - - VaultResponse response = (VaultResponse) stateObject; + if (stateObject instanceof VaultResponse response) { Assert.state(response.getAuth() != null, "Auth field must not be null"); @@ -111,7 +109,7 @@ public class AuthenticationStepsOperator implements VaultTokenSupplier { } throw new IllegalStateException( - String.format("Cannot retrieve VaultToken from authentication chain. Got instead %s", stateObject)); + "Cannot retrieve VaultToken from authentication chain. Got instead %s".formatted(stateObject)); }).onErrorMap(t -> new VaultLoginException("Cannot retrieve VaultToken from authentication chain", t)); } @@ -123,7 +121,7 @@ public class AuthenticationStepsOperator implements VaultTokenSupplier { for (Node o : steps) { if (logger.isDebugEnabled()) { - logger.debug(String.format("Executing %s with current state %s", o, state)); + logger.debug("Executing %s with current state %s".formatted(o, state)); } if (o instanceof HttpRequestNode) { @@ -152,7 +150,7 @@ public class AuthenticationStepsOperator implements VaultTokenSupplier { } if (logger.isDebugEnabled()) { - logger.debug(String.format("Executed %s with current state %s", o, state)); + logger.debug("Executed %s with current state %s".formatted(o, state)); } } return state; @@ -217,12 +215,10 @@ public class AuthenticationStepsOperator implements VaultTokenSupplier { Supplier supplier = supplierStep.getSupplier(); - if (!(supplier instanceof ResourceCredentialSupplier)) { + if (!(supplier instanceof ResourceCredentialSupplier resourceSupplier)) { return Mono.fromSupplier(supplierStep.getSupplier()).subscribeOn(Schedulers.boundedElastic()); } - ResourceCredentialSupplier resourceSupplier = (ResourceCredentialSupplier) supplier; - return DataBufferUtils.join(DataBufferUtils.read(resourceSupplier.getResource(), this.factory, 4096)) .map(dataBuffer -> { String result = dataBuffer.toString(ResourceCredentialSupplier.CHARSET); @@ -230,7 +226,7 @@ public class AuthenticationStepsOperator implements VaultTokenSupplier { return (Object) result; }) .onErrorMap(IOException.class, e -> new VaultException( - String.format("Credential retrieval from %s failed", resourceSupplier.getResource()), e)); + "Credential retrieval from %s failed".formatted(resourceSupplier.getResource()), e)); } enum Undefinded { diff --git a/spring-vault-core/src/main/java/org/springframework/vault/authentication/AuthenticationUtil.java b/spring-vault-core/src/main/java/org/springframework/vault/authentication/AuthenticationUtil.java index 98f3d40e..ff533043 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/authentication/AuthenticationUtil.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/authentication/AuthenticationUtil.java @@ -13,7 +13,7 @@ abstract class AuthenticationUtil { * @return */ static String getLoginPath(String authMount) { - return String.format("auth/%s/login", authMount); + return "auth/%s/login".formatted(authMount); } private AuthenticationUtil() { diff --git a/spring-vault-core/src/main/java/org/springframework/vault/authentication/AwsEc2Authentication.java b/spring-vault-core/src/main/java/org/springframework/vault/authentication/AwsEc2Authentication.java index 53a9c838..2b0958b2 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/authentication/AwsEc2Authentication.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/authentication/AwsEc2Authentication.java @@ -157,8 +157,8 @@ public class AwsEc2Authentication implements ClientAuthentication, Authenticatio if (response.getAuth().get("metadata") instanceof Map) { Map metadata = (Map) response.getAuth().get("metadata"); - logger.debug(String.format("Login successful using AWS-EC2 authentication for instance %s, AMI %s", - metadata.get("instance_id"), metadata.get("instance_id"))); + logger.debug("Login successful using AWS-EC2 authentication for instance %s, AMI %s" + .formatted(metadata.get("instance_id"), metadata.get("instance_id"))); } else { logger.debug("Login successful using AWS-EC2 authentication"); @@ -197,7 +197,7 @@ public class AwsEc2Authentication implements ClientAuthentication, Authenticatio } catch (RestClientException e) { throw new VaultLoginException( - String.format("Cannot obtain Identity Document from %s", this.options.getIdentityDocumentUri()), e); + "Cannot obtain Identity Document from %s".formatted(this.options.getIdentityDocumentUri()), e); } } diff --git a/spring-vault-core/src/main/java/org/springframework/vault/authentication/AwsIamAuthentication.java b/spring-vault-core/src/main/java/org/springframework/vault/authentication/AwsIamAuthentication.java index ee2a2636..62c57f5a 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/authentication/AwsIamAuthentication.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/authentication/AwsIamAuthentication.java @@ -156,8 +156,8 @@ public class AwsIamAuthentication implements ClientAuthentication, Authenticatio if (response.getAuth().get("metadata") instanceof Map) { Map metadata = (Map) response.getAuth().get("metadata"); - logger.debug(String.format("Login successful using AWS-IAM authentication for user id %s, ARN %s", - metadata.get("client_user_id"), metadata.get("canonical_arn"))); + logger.debug("Login successful using AWS-IAM authentication for user id %s, ARN %s" + .formatted(metadata.get("client_user_id"), metadata.get("canonical_arn"))); } else { logger.debug("Login successful using AWS-IAM authentication"); diff --git a/spring-vault-core/src/main/java/org/springframework/vault/authentication/CubbyholeAuthentication.java b/spring-vault-core/src/main/java/org/springframework/vault/authentication/CubbyholeAuthentication.java index 762191b0..c6157d40 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/authentication/CubbyholeAuthentication.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/authentication/CubbyholeAuthentication.java @@ -15,6 +15,8 @@ */ package org.springframework.vault.authentication; +import static org.springframework.vault.authentication.AuthenticationSteps.HttpRequestBuilder.*; + import java.util.Map; import org.apache.commons.logging.Log; @@ -33,8 +35,6 @@ import org.springframework.vault.support.VaultToken; import org.springframework.web.client.RestClientException; import org.springframework.web.client.RestOperations; -import static org.springframework.vault.authentication.AuthenticationSteps.HttpRequestBuilder.method; - /** * Cubbyhole {@link ClientAuthentication} implementation. *

@@ -225,9 +225,7 @@ public class CubbyholeAuthentication implements ClientAuthentication, Authentica return false; } - if (token instanceof LoginToken) { - - LoginToken loginToken = (LoginToken) token; + if (token instanceof LoginToken loginToken) { if (loginToken.getLeaseDuration().isZero()) { return false; @@ -273,8 +271,8 @@ public class CubbyholeAuthentication implements ClientAuthentication, Authentica Map data = response.getData(); if (data == null || data.isEmpty()) { throw new VaultLoginException( - String.format("Cannot retrieve Token from Cubbyhole: Response at %s does not contain a token", - options.getPath())); + "Cannot retrieve Token from Cubbyhole: Response at %s does not contain a token" + .formatted(options.getPath())); } if (data.size() == 1) { @@ -282,8 +280,8 @@ public class CubbyholeAuthentication implements ClientAuthentication, Authentica return VaultToken.of(token); } - throw new VaultLoginException(String - .format("Cannot retrieve Token from Cubbyhole: Response at %s does not contain an unique token", url)); + throw new VaultLoginException( + "Cannot retrieve Token from Cubbyhole: Response at %s does not contain an unique token".formatted(url)); } } diff --git a/spring-vault-core/src/main/java/org/springframework/vault/authentication/GcpComputeAuthentication.java b/spring-vault-core/src/main/java/org/springframework/vault/authentication/GcpComputeAuthentication.java index 6584808e..d1fab1f9 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/authentication/GcpComputeAuthentication.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/authentication/GcpComputeAuthentication.java @@ -15,6 +15,8 @@ */ package org.springframework.vault.authentication; +import static org.springframework.vault.authentication.AuthenticationSteps.HttpRequestBuilder.*; + import java.util.LinkedHashMap; import java.util.Map; @@ -29,8 +31,6 @@ import org.springframework.vault.support.VaultToken; import org.springframework.web.client.HttpStatusCodeException; import org.springframework.web.client.RestOperations; -import static org.springframework.vault.authentication.AuthenticationSteps.HttpRequestBuilder.get; - /** * GCP GCE (Google Compute Engine)-based login implementation using GCE's metadata service * to create signed JSON Web Token. @@ -157,7 +157,7 @@ public class GcpComputeAuthentication extends GcpJwtAuthenticationSupport } private static String getAudience(String role) { - return String.format("https://localhost:8200/vault/%s", role); + return "https://localhost:8200/vault/%s".formatted(role); } } diff --git a/spring-vault-core/src/main/java/org/springframework/vault/authentication/GcpIamAuthentication.java b/spring-vault-core/src/main/java/org/springframework/vault/authentication/GcpIamAuthentication.java index 6d05cbaf..09656830 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/authentication/GcpIamAuthentication.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/authentication/GcpIamAuthentication.java @@ -134,7 +134,7 @@ public class GcpIamAuthentication extends GcpJwtAuthenticationSupport implements SignJwt signJwt = iam.projects() .serviceAccounts() - .signJwt(String.format("projects/%s/serviceAccounts/%s", projectId, serviceAccount), request); + .signJwt("projects/%s/serviceAccounts/%s".formatted(projectId, serviceAccount), request); SignJwtResponse response = signJwt.execute(); diff --git a/spring-vault-core/src/main/java/org/springframework/vault/authentication/GcpJwtAuthenticationSupport.java b/spring-vault-core/src/main/java/org/springframework/vault/authentication/GcpJwtAuthenticationSupport.java index e2cf3d19..56bd84bb 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/authentication/GcpJwtAuthenticationSupport.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/authentication/GcpJwtAuthenticationSupport.java @@ -70,8 +70,8 @@ public abstract class GcpJwtAuthenticationSupport { if (response.getAuth().get("metadata") instanceof Map) { Map metadata = (Map) response.getAuth().get("metadata"); - logger.debug(String.format("Login successful using %s authentication for user id %s", - authenticationName, metadata.get("service_account_email"))); + logger.debug("Login successful using %s authentication for user id %s".formatted(authenticationName, + metadata.get("service_account_email"))); } else { logger.debug("Login successful using " + authenticationName + " authentication"); diff --git a/spring-vault-core/src/main/java/org/springframework/vault/authentication/GoogleJsonUtil.java b/spring-vault-core/src/main/java/org/springframework/vault/authentication/GoogleJsonUtil.java index 0f3d22ad..b75fa41f 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/authentication/GoogleJsonUtil.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/authentication/GoogleJsonUtil.java @@ -46,9 +46,10 @@ class GoogleJsonUtil { } } catch (ClassNotFoundException e) { - throw new IllegalStateException(String.format( - "No com.google.api.client.json.JsonFactory implementation available. Make sure to include either %s or %s on your classpath.", - JACKSON, GSON), e); + throw new IllegalStateException( + "No com.google.api.client.json.JsonFactory implementation available. Make sure to include either %s or %s on your classpath." + .formatted(JACKSON, GSON), + e); } } diff --git a/spring-vault-core/src/main/java/org/springframework/vault/authentication/LifecycleAwareSessionManager.java b/spring-vault-core/src/main/java/org/springframework/vault/authentication/LifecycleAwareSessionManager.java index 03b9308f..2e105a9f 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/authentication/LifecycleAwareSessionManager.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/authentication/LifecycleAwareSessionManager.java @@ -26,7 +26,18 @@ import org.springframework.scheduling.TaskScheduler; import org.springframework.util.Assert; import org.springframework.util.ClassUtils; import org.springframework.vault.VaultException; -import org.springframework.vault.authentication.event.*; +import org.springframework.vault.authentication.event.AfterLoginEvent; +import org.springframework.vault.authentication.event.AfterLoginTokenRenewedEvent; +import org.springframework.vault.authentication.event.AfterLoginTokenRevocationEvent; +import org.springframework.vault.authentication.event.AuthenticationErrorEvent; +import org.springframework.vault.authentication.event.AuthenticationErrorListener; +import org.springframework.vault.authentication.event.AuthenticationListener; +import org.springframework.vault.authentication.event.BeforeLoginTokenRenewedEvent; +import org.springframework.vault.authentication.event.BeforeLoginTokenRevocationEvent; +import org.springframework.vault.authentication.event.LoginFailedEvent; +import org.springframework.vault.authentication.event.LoginTokenExpiredEvent; +import org.springframework.vault.authentication.event.LoginTokenRenewalFailedEvent; +import org.springframework.vault.authentication.event.LoginTokenRevocationFailedEvent; import org.springframework.vault.client.VaultHttpHeaders; import org.springframework.vault.client.VaultResponses; import org.springframework.vault.support.VaultResponse; @@ -177,8 +188,7 @@ public class LifecycleAwareSessionManager extends LifecycleAwareSessionManagerSu catch (RuntimeException e) { if (LoginToken.hasAccessor(token)) { this.logger.warn( - String.format("Cannot revoke VaultToken with accessor: %s", ((LoginToken) token).getAccessor()), - e); + "Cannot revoke VaultToken with accessor: %s".formatted(((LoginToken) token).getAccessor()), e); } else { this.logger.warn("Cannot revoke VaultToken", e); @@ -246,8 +256,8 @@ public class LifecycleAwareSessionManager extends LifecycleAwareSessionManagerSu if (this.logger.isDebugEnabled()) { Duration validTtlThreshold = getRefreshTrigger().getValidTtlThreshold(renewed); - this.logger.info(String.format("Token TTL (%s) exceeded validity TTL threshold (%s). Dropping token.", - renewed.getLeaseDuration(), validTtlThreshold)); + this.logger.info("Token TTL (%s) exceeded validity TTL threshold (%s). Dropping token." + .formatted(renewed.getLeaseDuration(), validTtlThreshold)); } else { this.logger.info("Token TTL exceeded validity TTL threshold. Dropping token."); @@ -304,7 +314,7 @@ public class LifecycleAwareSessionManager extends LifecycleAwareSessionManagerSu wrapper = new TokenWrapper(token, false); } catch (VaultTokenLookupException e) { - this.logger.warn(String.format("Cannot enhance VaultToken to a LoginToken: %s", e.getMessage())); + this.logger.warn("Cannot enhance VaultToken to a LoginToken: %s".formatted(e.getMessage())); multicastEvent(new AuthenticationErrorEvent(token, e)); } } @@ -371,10 +381,9 @@ public class LifecycleAwareSessionManager extends LifecycleAwareSessionManagerSu private static String format(String message, RuntimeException e) { - if (e instanceof HttpStatusCodeException) { + if (e instanceof HttpStatusCodeException hsce) { - HttpStatusCodeException hsce = (HttpStatusCodeException) e; - return String.format("%s: Status %s %s %s", message, hsce.getStatusCode().value(), hsce.getStatusText(), + return "%s: Status %s %s %s".formatted(message, hsce.getStatusCode().value(), hsce.getStatusText(), VaultResponses.getError(hsce.getResponseBodyAsString())); } diff --git a/spring-vault-core/src/main/java/org/springframework/vault/authentication/LoginTokenAdapter.java b/spring-vault-core/src/main/java/org/springframework/vault/authentication/LoginTokenAdapter.java index 58d815ff..163a0c84 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/authentication/LoginTokenAdapter.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/authentication/LoginTokenAdapter.java @@ -89,7 +89,7 @@ public class LoginTokenAdapter implements ClientAuthentication { return entity.getBody().getData(); } catch (HttpStatusCodeException e) { - throw new VaultTokenLookupException(String.format("Token self-lookup failed: %s %s", e.getStatusCode(), + throw new VaultTokenLookupException("Token self-lookup failed: %s %s".formatted(e.getStatusCode(), VaultResponses.getError(e.getResponseBodyAsString())), e); } catch (RestClientException e) { diff --git a/spring-vault-core/src/main/java/org/springframework/vault/authentication/MacAddressUserId.java b/spring-vault-core/src/main/java/org/springframework/vault/authentication/MacAddressUserId.java index 0e688d82..81f37a03 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/authentication/MacAddressUserId.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/authentication/MacAddressUserId.java @@ -100,8 +100,8 @@ public class MacAddressUserId implements AppIdUserIdMechanism { if (!networkInterface.isPresent()) { if (StringUtils.hasText(this.networkInterfaceHint)) { - this.logger.warn(String.format("Did not find a NetworkInterface applying hint %s", - this.networkInterfaceHint)); + this.logger + .warn("Did not find a NetworkInterface applying hint %s".formatted(this.networkInterfaceHint)); } InetAddress localHost = InetAddress.getLocalHost(); @@ -159,7 +159,7 @@ public class MacAddressUserId implements AppIdUserIdMechanism { return Optional.ofNullable(it.getHardwareAddress()); } catch (SocketException e) { - throw new IllegalStateException(String.format("Cannot determine hardware address for %s", it.getName())); + throw new IllegalStateException("Cannot determine hardware address for %s".formatted(it.getName())); } } @@ -167,7 +167,7 @@ public class MacAddressUserId implements AppIdUserIdMechanism { return getNetworkAddress(it) // .orElseThrow(() -> new IllegalStateException( - String.format("Network interface %s has no hardware address", it.getName()))); + "Network interface %s has no hardware address".formatted(it.getName()))); } private static boolean hasNetworkAddress(NetworkInterface it) { diff --git a/spring-vault-core/src/main/java/org/springframework/vault/authentication/PcfAuthenticationOptions.java b/spring-vault-core/src/main/java/org/springframework/vault/authentication/PcfAuthenticationOptions.java index 7fcde909..02353ea1 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/authentication/PcfAuthenticationOptions.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/authentication/PcfAuthenticationOptions.java @@ -21,7 +21,6 @@ import java.util.function.Supplier; import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.ObjectUtils; -import org.springframework.util.StringUtils; /** * Authentication options for {@link PcfAuthentication}. @@ -241,7 +240,7 @@ public class PcfAuthenticationOptions { String value = System.getenv(name); if (ObjectUtils.isEmpty(value)) { - throw new IllegalStateException(String.format("Environment variable %s not set", name)); + throw new IllegalStateException("Environment variable %s not set".formatted(name)); } return value; diff --git a/spring-vault-core/src/main/java/org/springframework/vault/authentication/ReactiveLifecycleAwareSessionManager.java b/spring-vault-core/src/main/java/org/springframework/vault/authentication/ReactiveLifecycleAwareSessionManager.java index 959a4908..0d3d9198 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/authentication/ReactiveLifecycleAwareSessionManager.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/authentication/ReactiveLifecycleAwareSessionManager.java @@ -27,7 +27,18 @@ import org.springframework.scheduling.TaskScheduler; import org.springframework.util.Assert; import org.springframework.util.ClassUtils; import org.springframework.vault.VaultException; -import org.springframework.vault.authentication.event.*; +import org.springframework.vault.authentication.event.AfterLoginEvent; +import org.springframework.vault.authentication.event.AfterLoginTokenRenewedEvent; +import org.springframework.vault.authentication.event.AfterLoginTokenRevocationEvent; +import org.springframework.vault.authentication.event.AuthenticationErrorEvent; +import org.springframework.vault.authentication.event.AuthenticationErrorListener; +import org.springframework.vault.authentication.event.AuthenticationListener; +import org.springframework.vault.authentication.event.BeforeLoginTokenRenewedEvent; +import org.springframework.vault.authentication.event.BeforeLoginTokenRevocationEvent; +import org.springframework.vault.authentication.event.LoginFailedEvent; +import org.springframework.vault.authentication.event.LoginTokenExpiredEvent; +import org.springframework.vault.authentication.event.LoginTokenRenewalFailedEvent; +import org.springframework.vault.authentication.event.LoginTokenRevocationFailedEvent; import org.springframework.vault.client.VaultHttpHeaders; import org.springframework.vault.client.VaultResponses; import org.springframework.vault.support.VaultResponse; @@ -195,8 +206,8 @@ public class ReactiveLifecycleAwareSessionManager extends LifecycleAwareSessionM private Mono onRevokeFailed(VaultToken token, Throwable e) { if (LoginToken.hasAccessor(token)) { - this.logger.warn( - String.format("Cannot revoke VaultToken with accessor: %s", ((LoginToken) token).getAccessor()), e); + this.logger.warn("Cannot revoke VaultToken with accessor: %s".formatted(((LoginToken) token).getAccessor()), + e); } else { this.logger.warn("Cannot revoke VaultToken", e); @@ -279,9 +290,8 @@ public class ReactiveLifecycleAwareSessionManager extends LifecycleAwareSessionM if (this.logger.isDebugEnabled()) { Duration validTtlThreshold = getRefreshTrigger().getValidTtlThreshold(renewed); - this.logger - .info(String.format("Token TTL (%s) exceeded validity TTL threshold (%s). Dropping token.", - renewed.getLeaseDuration(), validTtlThreshold)); + this.logger.info("Token TTL (%s) exceeded validity TTL threshold (%s). Dropping token." + .formatted(renewed.getLeaseDuration(), validTtlThreshold)); } else { this.logger.info("Token TTL exceeded validity TTL threshold. Dropping token."); @@ -339,7 +349,7 @@ public class ReactiveLifecycleAwareSessionManager extends LifecycleAwareSessionM return loginTokenMono.onErrorResume(e -> { - this.logger.warn(String.format("Cannot enhance VaultToken to a LoginToken: %s", e.getMessage())); + this.logger.warn("Cannot enhance VaultToken to a LoginToken: %s".formatted(e.getMessage())); multicastEvent(new AuthenticationErrorEvent(token, e)); return Mono.just(token); }).map(it -> new TokenWrapper(it, false)); @@ -424,10 +434,9 @@ public class ReactiveLifecycleAwareSessionManager extends LifecycleAwareSessionM private static String format(String message, RuntimeException e) { - if (e instanceof WebClientResponseException) { + if (e instanceof WebClientResponseException wce) { - WebClientResponseException wce = (WebClientResponseException) e; - return String.format("%s: Status %s %s %s", message, wce.getStatusCode().value(), wce.getStatusText(), + return "%s: Status %s %s %s".formatted(message, wce.getStatusCode().value(), wce.getStatusText(), VaultResponses.getError(wce.getResponseBodyAsString())); } diff --git a/spring-vault-core/src/main/java/org/springframework/vault/authentication/ResourceCredentialSupplier.java b/spring-vault-core/src/main/java/org/springframework/vault/authentication/ResourceCredentialSupplier.java index 6003fe8a..bf617ef6 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/authentication/ResourceCredentialSupplier.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/authentication/ResourceCredentialSupplier.java @@ -68,7 +68,7 @@ public class ResourceCredentialSupplier implements CredentialSupplier { */ public ResourceCredentialSupplier(Resource resource) { - Assert.isTrue(resource.exists(), () -> String.format("Resource %s does not exist", resource)); + Assert.isTrue(resource.exists(), () -> "Resource %s does not exist".formatted(resource)); this.resource = resource; } @@ -80,7 +80,7 @@ public class ResourceCredentialSupplier implements CredentialSupplier { return new String(readToken(this.resource), CHARSET); } catch (IOException e) { - throw new VaultException(String.format("Credential retrieval from %s failed", this.resource), e); + throw new VaultException("Credential retrieval from %s failed".formatted(this.resource), e); } } diff --git a/spring-vault-core/src/main/java/org/springframework/vault/authentication/Sha256.java b/spring-vault-core/src/main/java/org/springframework/vault/authentication/Sha256.java index 5f8e009b..58064070 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/authentication/Sha256.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/authentication/Sha256.java @@ -66,7 +66,7 @@ class Sha256 { StringBuilder sb = new StringBuilder(bytes.length * 2); for (byte b : bytes) { - sb.append(String.format("%X", b)); + sb.append("%X".formatted(b)); } return sb.toString(); diff --git a/spring-vault-core/src/main/java/org/springframework/vault/authentication/UsernamePasswordAuthentication.java b/spring-vault-core/src/main/java/org/springframework/vault/authentication/UsernamePasswordAuthentication.java index 5ef0ac61..5527f1fb 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/authentication/UsernamePasswordAuthentication.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/authentication/UsernamePasswordAuthentication.java @@ -15,6 +15,8 @@ */ package org.springframework.vault.authentication; +import static org.springframework.vault.authentication.AuthenticationUtil.*; + import java.util.LinkedHashMap; import java.util.Map; @@ -29,8 +31,6 @@ import org.springframework.vault.support.VaultToken; import org.springframework.web.client.HttpStatusCodeException; import org.springframework.web.client.RestOperations; -import static org.springframework.vault.authentication.AuthenticationUtil.*; - /** * Username and password implementation of {@link ClientAuthentication}. Can be used for * {@code userpass}, {@code ldap}, {@code okta}, and {@code radius} authentication @@ -77,7 +77,7 @@ public class UsernamePasswordAuthentication implements ClientAuthentication, Aut Map body = createLoginBody(options); return AuthenticationSteps.fromSupplier(() -> body) - .login(String.format("%s/%s", getLoginPath(options.getPath()), options.getUsername())); + .login("%s/%s".formatted(getLoginPath(options.getPath()), options.getUsername())); } @Override @@ -94,16 +94,16 @@ public class UsernamePasswordAuthentication implements ClientAuthentication, Aut try { VaultResponse response = restOperations.postForObject( - String.format("%s/%s", getLoginPath(options.getPath()), options.getUsername()), - createLoginBody(options), VaultResponse.class); + "%s/%s".formatted(getLoginPath(options.getPath()), options.getUsername()), createLoginBody(options), + VaultResponse.class); logger.debug("Login successful using username and password credentials"); return LoginTokenUtil.from(response.getAuth()); } catch (HttpStatusCodeException e) { - throw new VaultException(String.format("Cannot login using username and password: %s", - VaultResponses.getError(e.getResponseBodyAsString())), e); + throw new VaultException("Cannot login using username and password: %s" + .formatted(VaultResponses.getError(e.getResponseBodyAsString())), e); } } diff --git a/spring-vault-core/src/main/java/org/springframework/vault/authentication/VaultLoginException.java b/spring-vault-core/src/main/java/org/springframework/vault/authentication/VaultLoginException.java index 715e43b1..404441de 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/authentication/VaultLoginException.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/authentication/VaultLoginException.java @@ -58,10 +58,10 @@ public class VaultLoginException extends VaultException { String response = ((RestClientResponseException) cause).getResponseBodyAsString(); return new VaultLoginException( - String.format("Cannot login using %s: %s", authMethod, VaultResponses.getError(response)), cause); + "Cannot login using %s: %s".formatted(authMethod, VaultResponses.getError(response)), cause); } - return new VaultLoginException(String.format("Cannot login using %s", cause), cause); + return new VaultLoginException("Cannot login using %s".formatted(cause), cause); } } diff --git a/spring-vault-core/src/main/java/org/springframework/vault/authentication/event/AfterLoginEvent.java b/spring-vault-core/src/main/java/org/springframework/vault/authentication/event/AfterLoginEvent.java index e00a00a8..1765a2c4 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/authentication/event/AfterLoginEvent.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/authentication/event/AfterLoginEvent.java @@ -15,6 +15,8 @@ */ package org.springframework.vault.authentication.event; +import java.io.Serial; + import org.springframework.context.ApplicationEvent; import org.springframework.vault.support.VaultToken; @@ -27,6 +29,7 @@ import org.springframework.vault.support.VaultToken; */ public class AfterLoginEvent extends AuthenticationEvent { + @Serial private static final long serialVersionUID = 1L; /** diff --git a/spring-vault-core/src/main/java/org/springframework/vault/authentication/event/AfterLoginTokenRenewedEvent.java b/spring-vault-core/src/main/java/org/springframework/vault/authentication/event/AfterLoginTokenRenewedEvent.java index f3756207..cb450982 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/authentication/event/AfterLoginTokenRenewedEvent.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/authentication/event/AfterLoginTokenRenewedEvent.java @@ -15,6 +15,8 @@ */ package org.springframework.vault.authentication.event; +import java.io.Serial; + import org.springframework.context.ApplicationEvent; import org.springframework.vault.support.VaultToken; @@ -27,6 +29,7 @@ import org.springframework.vault.support.VaultToken; */ public class AfterLoginTokenRenewedEvent extends AuthenticationEvent { + @Serial private static final long serialVersionUID = 1L; /** diff --git a/spring-vault-core/src/main/java/org/springframework/vault/authentication/event/AfterLoginTokenRevocationEvent.java b/spring-vault-core/src/main/java/org/springframework/vault/authentication/event/AfterLoginTokenRevocationEvent.java index dfcb410b..ee03633d 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/authentication/event/AfterLoginTokenRevocationEvent.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/authentication/event/AfterLoginTokenRevocationEvent.java @@ -15,6 +15,8 @@ */ package org.springframework.vault.authentication.event; +import java.io.Serial; + import org.springframework.context.ApplicationEvent; import org.springframework.vault.support.VaultToken; @@ -27,6 +29,7 @@ import org.springframework.vault.support.VaultToken; */ public class AfterLoginTokenRevocationEvent extends AuthenticationEvent { + @Serial private static final long serialVersionUID = 1L; /** diff --git a/spring-vault-core/src/main/java/org/springframework/vault/authentication/event/AuthenticationErrorEvent.java b/spring-vault-core/src/main/java/org/springframework/vault/authentication/event/AuthenticationErrorEvent.java index afcacd8b..9e996f77 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/authentication/event/AuthenticationErrorEvent.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/authentication/event/AuthenticationErrorEvent.java @@ -15,6 +15,8 @@ */ package org.springframework.vault.authentication.event; +import java.io.Serial; + import org.springframework.context.ApplicationEvent; /** @@ -30,6 +32,7 @@ import org.springframework.context.ApplicationEvent; */ public class AuthenticationErrorEvent extends ApplicationEvent { + @Serial private static final long serialVersionUID = 1L; private final Throwable exception; diff --git a/spring-vault-core/src/main/java/org/springframework/vault/authentication/event/AuthenticationEvent.java b/spring-vault-core/src/main/java/org/springframework/vault/authentication/event/AuthenticationEvent.java index 894b93d1..8cee7caa 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/authentication/event/AuthenticationEvent.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/authentication/event/AuthenticationEvent.java @@ -15,6 +15,8 @@ */ package org.springframework.vault.authentication.event; +import java.io.Serial; + import org.springframework.context.ApplicationEvent; import org.springframework.vault.support.VaultToken; @@ -27,6 +29,7 @@ import org.springframework.vault.support.VaultToken; */ public abstract class AuthenticationEvent extends ApplicationEvent { + @Serial private static final long serialVersionUID = 1L; /** diff --git a/spring-vault-core/src/main/java/org/springframework/vault/authentication/event/BeforeLoginTokenRenewedEvent.java b/spring-vault-core/src/main/java/org/springframework/vault/authentication/event/BeforeLoginTokenRenewedEvent.java index 86266de0..a8c68a50 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/authentication/event/BeforeLoginTokenRenewedEvent.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/authentication/event/BeforeLoginTokenRenewedEvent.java @@ -15,6 +15,8 @@ */ package org.springframework.vault.authentication.event; +import java.io.Serial; + import org.springframework.context.ApplicationEvent; import org.springframework.vault.support.VaultToken; @@ -27,6 +29,7 @@ import org.springframework.vault.support.VaultToken; */ public class BeforeLoginTokenRenewedEvent extends AuthenticationEvent { + @Serial private static final long serialVersionUID = 1L; /** diff --git a/spring-vault-core/src/main/java/org/springframework/vault/authentication/event/BeforeLoginTokenRevocationEvent.java b/spring-vault-core/src/main/java/org/springframework/vault/authentication/event/BeforeLoginTokenRevocationEvent.java index d0ffd854..931e48b5 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/authentication/event/BeforeLoginTokenRevocationEvent.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/authentication/event/BeforeLoginTokenRevocationEvent.java @@ -15,6 +15,8 @@ */ package org.springframework.vault.authentication.event; +import java.io.Serial; + import org.springframework.context.ApplicationEvent; import org.springframework.vault.support.VaultToken; @@ -27,6 +29,7 @@ import org.springframework.vault.support.VaultToken; */ public class BeforeLoginTokenRevocationEvent extends AuthenticationEvent { + @Serial private static final long serialVersionUID = 1L; /** diff --git a/spring-vault-core/src/main/java/org/springframework/vault/authentication/event/LoginFailedEvent.java b/spring-vault-core/src/main/java/org/springframework/vault/authentication/event/LoginFailedEvent.java index a06cf178..d4bcb695 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/authentication/event/LoginFailedEvent.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/authentication/event/LoginFailedEvent.java @@ -15,6 +15,8 @@ */ package org.springframework.vault.authentication.event; +import java.io.Serial; + import org.springframework.context.ApplicationEvent; import org.springframework.vault.authentication.ClientAuthentication; import org.springframework.vault.authentication.VaultTokenSupplier; @@ -32,6 +34,7 @@ import org.springframework.vault.support.VaultToken; */ public class LoginFailedEvent extends AuthenticationErrorEvent { + @Serial private static final long serialVersionUID = 1L; /** diff --git a/spring-vault-core/src/main/java/org/springframework/vault/authentication/event/LoginTokenExpiredEvent.java b/spring-vault-core/src/main/java/org/springframework/vault/authentication/event/LoginTokenExpiredEvent.java index 196f774e..0d1ca81f 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/authentication/event/LoginTokenExpiredEvent.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/authentication/event/LoginTokenExpiredEvent.java @@ -15,6 +15,8 @@ */ package org.springframework.vault.authentication.event; +import java.io.Serial; + import org.springframework.context.ApplicationEvent; import org.springframework.vault.support.VaultToken; @@ -27,6 +29,7 @@ import org.springframework.vault.support.VaultToken; */ public class LoginTokenExpiredEvent extends AuthenticationEvent { + @Serial private static final long serialVersionUID = 1L; /** diff --git a/spring-vault-core/src/main/java/org/springframework/vault/authentication/event/LoginTokenRenewalFailedEvent.java b/spring-vault-core/src/main/java/org/springframework/vault/authentication/event/LoginTokenRenewalFailedEvent.java index 0997507c..fc87886e 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/authentication/event/LoginTokenRenewalFailedEvent.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/authentication/event/LoginTokenRenewalFailedEvent.java @@ -15,6 +15,8 @@ */ package org.springframework.vault.authentication.event; +import java.io.Serial; + import org.springframework.context.ApplicationEvent; import org.springframework.vault.support.VaultToken; @@ -27,6 +29,7 @@ import org.springframework.vault.support.VaultToken; */ public class LoginTokenRenewalFailedEvent extends AuthenticationErrorEvent { + @Serial private static final long serialVersionUID = 1L; /** diff --git a/spring-vault-core/src/main/java/org/springframework/vault/authentication/event/LoginTokenRevocationFailedEvent.java b/spring-vault-core/src/main/java/org/springframework/vault/authentication/event/LoginTokenRevocationFailedEvent.java index 70cad7f7..138728c4 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/authentication/event/LoginTokenRevocationFailedEvent.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/authentication/event/LoginTokenRevocationFailedEvent.java @@ -15,6 +15,8 @@ */ package org.springframework.vault.authentication.event; +import java.io.Serial; + import org.springframework.context.ApplicationEvent; import org.springframework.vault.support.VaultToken; @@ -27,6 +29,7 @@ import org.springframework.vault.support.VaultToken; */ public class LoginTokenRevocationFailedEvent extends AuthenticationErrorEvent { + @Serial private static final long serialVersionUID = 1L; /** diff --git a/spring-vault-core/src/main/java/org/springframework/vault/client/ClientHttpRequestFactoryFactory.java b/spring-vault-core/src/main/java/org/springframework/vault/client/ClientHttpRequestFactoryFactory.java index a5b5c578..863d4489 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/client/ClientHttpRequestFactoryFactory.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/client/ClientHttpRequestFactoryFactory.java @@ -63,7 +63,6 @@ import org.springframework.http.client.ClientHttpRequestFactory; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.http.client.OkHttp3ClientHttpRequestFactory; import org.springframework.http.client.SimpleClientHttpRequestFactory; -import org.springframework.http.client.reactive.JdkClientHttpConnector; import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.ClassUtils; @@ -216,7 +215,7 @@ public class ClientHttpRequestFactoryFactory { throws IOException, GeneralSecurityException { if (logger.isDebugEnabled()) { - logger.debug(String.format("Loading keystore from %s", keyStoreConfiguration.getResource())); + logger.debug("Loading keystore from %s".formatted(keyStoreConfiguration.getResource())); } InputStream inputStream = null; @@ -233,7 +232,7 @@ public class ClientHttpRequestFactoryFactory { } if (logger.isDebugEnabled()) { - logger.debug(String.format("Keystore loaded with %d entries", keyStore.size())); + logger.debug("Keystore loaded with %d entries".formatted(keyStore.size())); } } finally { @@ -253,7 +252,7 @@ public class ClientHttpRequestFactoryFactory { String alias = cert.getSubjectX500Principal().getName(); if (logger.isDebugEnabled()) { - logger.debug(String.format("Adding certificate with alias %s", alias)); + logger.debug("Adding certificate with alias %s".formatted(alias)); } keyStore.setCertificateEntry(alias, cert); 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 36cf27b3..09a9450a 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 @@ -189,7 +189,7 @@ public class VaultClients { private static String toBaseUri(VaultEndpoint endpoint) { - return String.format("%s://%s:%s/%s", endpoint.getScheme(), endpoint.getHost(), endpoint.getPort(), + return "%s://%s:%s/%s".formatted(endpoint.getScheme(), endpoint.getHost(), endpoint.getPort(), endpoint.getPath()); } diff --git a/spring-vault-core/src/main/java/org/springframework/vault/client/VaultEndpoint.java b/spring-vault-core/src/main/java/org/springframework/vault/client/VaultEndpoint.java index ab9723d8..ddbd0bdc 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/client/VaultEndpoint.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/client/VaultEndpoint.java @@ -106,7 +106,7 @@ public class VaultEndpoint implements Serializable { vaultEndpoint.setPort(uri.getPort() == -1 ? uri.toURL().getDefaultPort() : uri.getPort()); } catch (MalformedURLException e) { - throw new IllegalArgumentException(String.format("Can't retrieve default port from %s", uri), e); + throw new IllegalArgumentException("Can't retrieve default port from %s".formatted(uri), e); } vaultEndpoint.setScheme(uri.getScheme()); @@ -191,7 +191,7 @@ public class VaultEndpoint implements Serializable { public void setPath(String path) { Assert.hasText(path, "Path must not be null or empty"); - Assert.isTrue(!path.startsWith("/"), () -> String.format("Path %s must not start with a leading slash", path)); + Assert.isTrue(!path.startsWith("/"), () -> "Path %s must not start with a leading slash".formatted(path)); this.path = path; } @@ -214,16 +214,15 @@ public class VaultEndpoint implements Serializable { Assert.hasText(path, "Path must not be empty"); - return String.format("%s://%s:%s/%s/%s", getScheme(), getHost(), getPort(), getPath(), path); + return "%s://%s:%s/%s/%s".formatted(getScheme(), getHost(), getPort(), getPath(), path); } @Override public boolean equals(Object o) { if (this == o) return true; - if (!(o instanceof VaultEndpoint)) + if (!(o instanceof VaultEndpoint that)) return false; - VaultEndpoint that = (VaultEndpoint) o; return this.port == that.port && this.host.equals(that.host) && this.scheme.equals(that.scheme) && this.path.equals(that.path); } @@ -235,7 +234,7 @@ public class VaultEndpoint implements Serializable { @Override public String toString() { - return String.format("%s://%s:%d", this.scheme, this.host, this.port); + return "%s://%s:%d".formatted(this.scheme, this.host, this.port); } } diff --git a/spring-vault-core/src/main/java/org/springframework/vault/client/VaultResponses.java b/spring-vault-core/src/main/java/org/springframework/vault/client/VaultResponses.java index 645457fa..1f2d68be 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/client/VaultResponses.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/client/VaultResponses.java @@ -61,10 +61,10 @@ public abstract class VaultResponses { if (StringUtils.hasText(message)) { return new VaultException( - String.format("Status %s %s: %s", renderStatus(e.getStatusCode()), e.getStatusText(), message), e); + "Status %s %s: %s".formatted(renderStatus(e.getStatusCode()), e.getStatusText(), message), e); } - return new VaultException(String.format("Status %s %s", renderStatus(e.getStatusCode()), e.getStatusText()), e); + return new VaultException("Status %s %s".formatted(renderStatus(e.getStatusCode()), e.getStatusText()), e); } /** @@ -81,21 +81,21 @@ public abstract class VaultResponses { String message = VaultResponses.getError(e.getResponseBodyAsString()); if (StringUtils.hasText(message)) { - return new VaultException(String.format("Status %s %s [%s]: %s", renderStatus(e.getStatusCode()), + return new VaultException("Status %s %s [%s]: %s".formatted(renderStatus(e.getStatusCode()), e.getStatusText(), path, message), e); } return new VaultException( - String.format("Status %s %s [%s]", renderStatus(e.getStatusCode()), e.getStatusText(), path), e); + "Status %s %s [%s]".formatted(renderStatus(e.getStatusCode()), e.getStatusText(), path), e); } public static VaultException buildException(HttpStatusCode statusCode, String path, String message) { if (StringUtils.hasText(message)) { - return new VaultException(String.format("Status %s [%s]: %s", renderStatus(statusCode), path, message)); + return new VaultException("Status %s [%s]: %s".formatted(renderStatus(statusCode), path, message)); } - return new VaultException(String.format("Status %s [%s]", renderStatus(statusCode), path)); + return new VaultException("Status %s [%s]".formatted(renderStatus(statusCode), path)); } /** diff --git a/spring-vault-core/src/main/java/org/springframework/vault/config/AbstractReactiveVaultConfiguration.java b/spring-vault-core/src/main/java/org/springframework/vault/config/AbstractReactiveVaultConfiguration.java index 585cc5a0..7fe74418 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/config/AbstractReactiveVaultConfiguration.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/config/AbstractReactiveVaultConfiguration.java @@ -192,15 +192,12 @@ public abstract class AbstractReactiveVaultConfiguration extends AbstractVaultCo Assert.notNull(clientAuthentication, "ClientAuthentication must not be null"); - if (clientAuthentication instanceof TokenAuthentication) { + if (clientAuthentication instanceof TokenAuthentication authentication) { - TokenAuthentication authentication = (TokenAuthentication) clientAuthentication; return () -> Mono.just(authentication.login()); } - if (clientAuthentication instanceof AuthenticationStepsFactory) { - - AuthenticationStepsFactory factory = (AuthenticationStepsFactory) clientAuthentication; + if (clientAuthentication instanceof AuthenticationStepsFactory factory) { WebClient webClient = getWebClientFactory().create(); AuthenticationStepsOperator stepsOperator = new AuthenticationStepsOperator( @@ -209,10 +206,9 @@ public abstract class AbstractReactiveVaultConfiguration extends AbstractVaultCo return CachingVaultTokenSupplier.of(stepsOperator); } - throw new IllegalStateException(String.format( - "Cannot construct VaultTokenSupplier from %s. " - + "ClientAuthentication must implement AuthenticationStepsFactory or be TokenAuthentication", - clientAuthentication)); + throw new IllegalStateException("Cannot construct VaultTokenSupplier from %s. " + + "ClientAuthentication must implement AuthenticationStepsFactory or be TokenAuthentication" + .formatted(clientAuthentication)); } /** diff --git a/spring-vault-core/src/main/java/org/springframework/vault/config/EnvironmentVaultConfiguration.java b/spring-vault-core/src/main/java/org/springframework/vault/config/EnvironmentVaultConfiguration.java index c4b61a09..5b828f5e 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/config/EnvironmentVaultConfiguration.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/config/EnvironmentVaultConfiguration.java @@ -33,15 +33,37 @@ import org.springframework.core.io.Resource; import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.StringUtils; -import org.springframework.vault.authentication.*; +import org.springframework.vault.authentication.AppIdAuthentication; +import org.springframework.vault.authentication.AppIdAuthenticationOptions; import org.springframework.vault.authentication.AppIdAuthenticationOptions.AppIdAuthenticationOptionsBuilder; +import org.springframework.vault.authentication.AppIdUserIdMechanism; +import org.springframework.vault.authentication.AppRoleAuthentication; +import org.springframework.vault.authentication.AppRoleAuthenticationOptions; import org.springframework.vault.authentication.AppRoleAuthenticationOptions.AppRoleAuthenticationOptionsBuilder; import org.springframework.vault.authentication.AppRoleAuthenticationOptions.RoleId; import org.springframework.vault.authentication.AppRoleAuthenticationOptions.SecretId; +import org.springframework.vault.authentication.AwsEc2Authentication; +import org.springframework.vault.authentication.AwsEc2AuthenticationOptions; import org.springframework.vault.authentication.AwsEc2AuthenticationOptions.AwsEc2AuthenticationOptionsBuilder; +import org.springframework.vault.authentication.AwsIamAuthentication; +import org.springframework.vault.authentication.AwsIamAuthenticationOptions; +import org.springframework.vault.authentication.AzureMsiAuthentication; +import org.springframework.vault.authentication.AzureMsiAuthenticationOptions; import org.springframework.vault.authentication.AzureMsiAuthenticationOptions.AzureMsiAuthenticationOptionsBuilder; +import org.springframework.vault.authentication.ClientAuthentication; +import org.springframework.vault.authentication.ClientCertificateAuthentication; +import org.springframework.vault.authentication.CubbyholeAuthentication; +import org.springframework.vault.authentication.CubbyholeAuthenticationOptions; import org.springframework.vault.authentication.CubbyholeAuthenticationOptions.CubbyholeAuthenticationOptionsBuilder; +import org.springframework.vault.authentication.IpAddressUserId; +import org.springframework.vault.authentication.KubernetesAuthentication; +import org.springframework.vault.authentication.KubernetesAuthenticationOptions; import org.springframework.vault.authentication.KubernetesAuthenticationOptions.KubernetesAuthenticationOptionsBuilder; +import org.springframework.vault.authentication.KubernetesJwtSupplier; +import org.springframework.vault.authentication.KubernetesServiceAccountTokenFile; +import org.springframework.vault.authentication.MacAddressUserId; +import org.springframework.vault.authentication.StaticUserId; +import org.springframework.vault.authentication.TokenAuthentication; import org.springframework.vault.client.VaultEndpoint; import org.springframework.vault.support.SslConfiguration; import org.springframework.vault.support.SslConfiguration.KeyStoreConfiguration; @@ -261,30 +283,19 @@ public class EnvironmentVaultConfiguration extends AbstractVaultConfiguration im AuthenticationMethod authenticationMethod = AuthenticationMethod.valueOf(authentication); - switch (authenticationMethod) { - - case TOKEN: - return tokenAuthentication(); - case APPID: - return appIdAuthentication(); - case APPROLE: - return appRoleAuthentication(); - case AWS_EC2: - return awsEc2Authentication(); - case AWS_IAM: - return awsIamAuthentication(); - case AZURE: - return azureMsiAuthentication(); - case CERT: - return new ClientCertificateAuthentication(restOperations()); - case CUBBYHOLE: - return cubbyholeAuthentication(); - case KUBERNETES: - return kubeAuthentication(); - default: - throw new IllegalStateException(String.format("Vault authentication method %s is not supported with %s", - authenticationMethod, getClass().getSimpleName())); - } + return switch (authenticationMethod) { + case TOKEN -> tokenAuthentication(); + case APPID -> appIdAuthentication(); + case APPROLE -> appRoleAuthentication(); + case AWS_EC2 -> awsEc2Authentication(); + case AWS_IAM -> awsIamAuthentication(); + case AZURE -> azureMsiAuthentication(); + case CERT -> new ClientCertificateAuthentication(restOperations()); + case CUBBYHOLE -> cubbyholeAuthentication(); + case KUBERNETES -> kubeAuthentication(); + default -> throw new IllegalStateException("Vault authentication method %s is not supported with %s" + .formatted(authenticationMethod, getClass().getSimpleName())); + }; } // ------------------------------------------------------------------------- diff --git a/spring-vault-core/src/main/java/org/springframework/vault/core/PropertyMapper.java b/spring-vault-core/src/main/java/org/springframework/vault/core/PropertyMapper.java index 995af712..c66a1bbc 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/core/PropertyMapper.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/core/PropertyMapper.java @@ -331,13 +331,7 @@ class PropertyMapper { /** * Supplier that will catch and ignore any {@link NullPointerException}. */ - private static class NullPointerExceptionSafeSupplier implements Supplier { - - private final Supplier supplier; - - NullPointerExceptionSafeSupplier(Supplier supplier) { - this.supplier = supplier; - } + private record NullPointerExceptionSafeSupplier(Supplier supplier) implements Supplier { @Override public T get() { diff --git a/spring-vault-core/src/main/java/org/springframework/vault/core/ReactiveVaultKeyValue1Template.java b/spring-vault-core/src/main/java/org/springframework/vault/core/ReactiveVaultKeyValue1Template.java index e0c5b508..20e7b010 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/core/ReactiveVaultKeyValue1Template.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/core/ReactiveVaultKeyValue1Template.java @@ -109,7 +109,7 @@ class ReactiveVaultKeyValue1Template extends ReactiveVaultKeyValueAccessor imple @Override String createDataPath(String path) { - return String.format("%s/%s", this.path, path); + return "%s/%s".formatted(this.path, path); } } diff --git a/spring-vault-core/src/main/java/org/springframework/vault/core/ReactiveVaultKeyValue2Accessor.java b/spring-vault-core/src/main/java/org/springframework/vault/core/ReactiveVaultKeyValue2Accessor.java index f0f27ce7..50ce3e26 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/core/ReactiveVaultKeyValue2Accessor.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/core/ReactiveVaultKeyValue2Accessor.java @@ -17,12 +17,12 @@ package org.springframework.vault.core; import java.util.List; -import org.springframework.vault.core.VaultKeyValueOperationsSupport.KeyValueBackend; -import org.springframework.vault.support.VaultResponseSupport; - import com.fasterxml.jackson.databind.JsonNode; import reactor.core.publisher.Flux; +import org.springframework.vault.core.VaultKeyValueOperationsSupport.KeyValueBackend; +import org.springframework.vault.support.VaultResponseSupport; + /** * Support class to build accessor methods for the Vault key-value backend version 2. * @@ -53,7 +53,7 @@ abstract class ReactiveVaultKeyValue2Accessor extends ReactiveVaultKeyValueAcces public Flux list(String path) { return doRead( - String.format("%s?list=true", createBackendPath("metadata", KeyValueUtilities.normalizeListPath(path))), + "%s?list=true".formatted(createBackendPath("metadata", KeyValueUtilities.normalizeListPath(path))), VaultListResponse.class) .flatMapMany(response -> { @@ -78,7 +78,7 @@ abstract class ReactiveVaultKeyValue2Accessor extends ReactiveVaultKeyValueAcces } String createBackendPath(String segment, String path) { - return String.format("%s/%s/%s", this.path, segment, path); + return "%s/%s/%s".formatted(this.path, segment, path); } } diff --git a/spring-vault-core/src/main/java/org/springframework/vault/core/ReactiveVaultKeyValue2Template.java b/spring-vault-core/src/main/java/org/springframework/vault/core/ReactiveVaultKeyValue2Template.java index 0447d5c9..3465d6d9 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/core/ReactiveVaultKeyValue2Template.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/core/ReactiveVaultKeyValue2Template.java @@ -17,13 +17,14 @@ package org.springframework.vault.core; import java.util.Collections; import java.util.Map; + +import reactor.core.publisher.Mono; + import org.springframework.util.Assert; import org.springframework.vault.VaultException; import org.springframework.vault.support.VaultResponse; import org.springframework.vault.support.VaultResponseSupport; -import reactor.core.publisher.Mono; - /** * Default implementation of {@link VaultKeyValueOperations} for the key-value backend * version 2. @@ -85,7 +86,7 @@ class ReactiveVaultKeyValue2Template extends ReactiveVaultKeyValue2Accessor impl return get(path).filter(it -> it.getData() != null) .switchIfEmpty(Mono.error(new SecretNotFoundException( - String.format("No data found at %s; patch only works on existing data", createDataPath(path)), + "No data found at %s; patch only works on existing data".formatted(createDataPath(path)), createLogicalPath(path)))) .flatMap(readResponse -> { @@ -112,7 +113,7 @@ class ReactiveVaultKeyValue2Template extends ReactiveVaultKeyValue2Accessor impl } private String createLogicalPath(String path) { - return String.format("%s/%s", this.path, path); + return "%s/%s".formatted(this.path, path); } } diff --git a/spring-vault-core/src/main/java/org/springframework/vault/core/ReactiveVaultTemplate.java b/spring-vault-core/src/main/java/org/springframework/vault/core/ReactiveVaultTemplate.java index 7af6a0f8..5f4d5737 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/core/ReactiveVaultTemplate.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/core/ReactiveVaultTemplate.java @@ -15,7 +15,15 @@ */ package org.springframework.vault.core; +import static org.springframework.web.reactive.function.client.ExchangeFilterFunction.*; + +import java.util.List; +import java.util.function.Function; + import org.reactivestreams.Publisher; +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; + import org.springframework.core.ParameterizedTypeReference; import org.springframework.http.HttpMethod; import org.springframework.http.client.reactive.ClientHttpConnector; @@ -43,14 +51,6 @@ import org.springframework.web.reactive.function.client.WebClient; import org.springframework.web.reactive.function.client.WebClient.RequestBodySpec; import org.springframework.web.reactive.function.client.WebClientException; import org.springframework.web.reactive.function.client.WebClientResponseException; -import reactor.core.publisher.Flux; -import reactor.core.publisher.Mono; - -import java.util.List; -import java.util.Map; -import java.util.function.Function; - -import static org.springframework.web.reactive.function.client.ExchangeFilterFunction.ofRequestProcessor; /** * This class encapsulates main Vault interaction. {@link ReactiveVaultTemplate} will log @@ -287,7 +287,7 @@ public class ReactiveVaultTemplate implements ReactiveVaultOperations { Assert.hasText(path, "Path must not be empty"); - return doRead(String.format("%s?list=true", path.endsWith("/") ? path : (path + "/")), VaultListResponse.class) + return doRead("%s?list=true".formatted(path.endsWith("/") ? path : (path + "/")), VaultListResponse.class) .onErrorResume(WebClientResponseException.NotFound.class, e -> Mono.empty()) .filter(response -> response.getData() != null && response.getData().containsKey("keys")) .flatMapIterable(response -> (List) response.getRequiredData().get("keys")); diff --git a/spring-vault-core/src/main/java/org/springframework/vault/core/ReactiveVaultTransitTemplate.java b/spring-vault-core/src/main/java/org/springframework/vault/core/ReactiveVaultTransitTemplate.java index e6e108ac..626924c2 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/core/ReactiveVaultTransitTemplate.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/core/ReactiveVaultTransitTemplate.java @@ -15,8 +15,19 @@ */ package org.springframework.vault.core; +import static org.springframework.vault.core.VaultTransitTemplate.*; + +import java.util.Base64; +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; + import org.springframework.util.Assert; -import org.springframework.vault.core.VaultTransitTemplate.VaultTransitKeyImpl; +import org.springframework.vault.core.VaultTransitTemplate.*; import org.springframework.vault.support.Ciphertext; import org.springframework.vault.support.Hmac; import org.springframework.vault.support.Plaintext; @@ -35,17 +46,6 @@ import org.springframework.vault.support.VaultTransitContext; import org.springframework.vault.support.VaultTransitKey; import org.springframework.vault.support.VaultTransitKeyConfiguration; import org.springframework.vault.support.VaultTransitKeyCreationRequest; -import reactor.core.publisher.Flux; -import reactor.core.publisher.Mono; - -import java.util.ArrayList; -import java.util.Base64; -import java.util.Collections; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; - -import static org.springframework.vault.core.VaultTransitTemplate.*; /** * Default implementation of {@link ReactiveVaultTransitOperations}. @@ -73,7 +73,7 @@ public class ReactiveVaultTransitTemplate implements ReactiveVaultTransitOperati Assert.hasText(keyName, "Key name must not be empty"); - return this.reactiveVaultOperations.write(String.format("%s/keys/%s", this.path, keyName), null).then(); + return this.reactiveVaultOperations.write("%s/keys/%s".formatted(this.path, keyName), null).then(); } @Override @@ -82,8 +82,7 @@ public class ReactiveVaultTransitTemplate implements ReactiveVaultTransitOperati Assert.hasText(keyName, "Key name must not be empty"); Assert.notNull(createKeyRequest, "VaultTransitKeyCreationRequest must not be empty"); - return this.reactiveVaultOperations.write(String.format("%s/keys/%s", this.path, keyName), createKeyRequest) - .then(); + return this.reactiveVaultOperations.write("%s/keys/%s".formatted(this.path, keyName), createKeyRequest).then(); } @Override @@ -91,7 +90,7 @@ public class ReactiveVaultTransitTemplate implements ReactiveVaultTransitOperati Assert.hasText(keyName, "Key name must not be empty"); - return this.reactiveVaultOperations.write(String.format("%s/keys/%s/rotate", this.path, keyName), null).then(); + return this.reactiveVaultOperations.write("%s/keys/%s/rotate".formatted(this.path, keyName), null).then(); } @Override @@ -104,7 +103,7 @@ public class ReactiveVaultTransitTemplate implements ReactiveVaultTransitOperati request.put("plaintext", Base64.getEncoder().encodeToString(plaintext.getBytes())); - return this.reactiveVaultOperations.write(String.format("%s/encrypt/%s", this.path, keyName), request) + return this.reactiveVaultOperations.write("%s/encrypt/%s".formatted(this.path, keyName), request) .map(it -> (String) it.getRequiredData().get("ciphertext")); } @@ -114,8 +113,7 @@ public class ReactiveVaultTransitTemplate implements ReactiveVaultTransitOperati Assert.hasText(keyName, "Key name must not be empty"); Assert.notNull(keyConfiguration, "VaultKeyConfiguration must not be empty"); - return this.reactiveVaultOperations - .write(String.format("%s/keys/%s/config", this.path, keyName), keyConfiguration) + return this.reactiveVaultOperations.write("%s/keys/%s/config".formatted(this.path, keyName), keyConfiguration) .then(); } @@ -124,13 +122,13 @@ public class ReactiveVaultTransitTemplate implements ReactiveVaultTransitOperati Assert.hasText(keyName, "Key name must not be empty"); - return this.reactiveVaultOperations.delete(String.format("%s/keys/%s", this.path, keyName)); + return this.reactiveVaultOperations.delete("%s/keys/%s".formatted(this.path, keyName)); } @Override @SuppressWarnings("unchecked") public Flux getKeys() { - return this.reactiveVaultOperations.read(String.format("%s/keys?list=true", this.path)) + return this.reactiveVaultOperations.read("%s/keys?list=true".formatted(this.path)) .flatMapIterable(it -> (List) it.getRequiredData().get("keys")); } @@ -147,7 +145,7 @@ public class ReactiveVaultTransitTemplate implements ReactiveVaultTransitOperati applyTransitOptions(transitContext, request); - return this.reactiveVaultOperations.write(String.format("%s/encrypt/%s", this.path, keyName), request) + return this.reactiveVaultOperations.write("%s/encrypt/%s".formatted(this.path, keyName), request) .map(it -> (String) it.getRequiredData().get("ciphertext")); } @@ -171,7 +169,7 @@ public class ReactiveVaultTransitTemplate implements ReactiveVaultTransitOperati request.put("ciphertext", ciphertext); - return this.reactiveVaultOperations.write(String.format("%s/decrypt/%s", this.path, keyName), request) + return this.reactiveVaultOperations.write("%s/decrypt/%s".formatted(this.path, keyName), request) .map(it -> (String) it.getRequiredData().get("plaintext")) .map(plaintext -> new String(Base64.getDecoder().decode(plaintext))); } @@ -199,7 +197,7 @@ public class ReactiveVaultTransitTemplate implements ReactiveVaultTransitOperati applyTransitOptions(transitContext, request); - return this.reactiveVaultOperations.write(String.format("%s/decrypt/%s", this.path, keyName), request) + return this.reactiveVaultOperations.write("%s/decrypt/%s".formatted(this.path, keyName), request) .map(it -> (String) it.getRequiredData().get("plaintext")) .map(Base64.getDecoder()::decode); } @@ -213,7 +211,7 @@ public class ReactiveVaultTransitTemplate implements ReactiveVaultTransitOperati Map request = new LinkedHashMap<>(); request.put("ciphertext", ciphertext); - return this.reactiveVaultOperations.write(String.format("%s/rewrap/%s", this.path, keyName), request) + return this.reactiveVaultOperations.write("%s/rewrap/%s".formatted(this.path, keyName), request) .map(response -> (String) response.getRequiredData().get("ciphertext")); } @@ -228,7 +226,7 @@ public class ReactiveVaultTransitTemplate implements ReactiveVaultTransitOperati applyTransitOptions(transitContext, request); - return this.reactiveVaultOperations.write(String.format("%s/rewrap/%s", this.path, keyName), request) + return this.reactiveVaultOperations.write("%s/rewrap/%s".formatted(this.path, keyName), request) .map(response -> (String) response.getRequiredData().get("ciphertext")); } @@ -241,7 +239,7 @@ public class ReactiveVaultTransitTemplate implements ReactiveVaultTransitOperati return Flux.fromIterable(batchRequest) .map(VaultTransitTemplate::createRewrapRequest) .collectList() - .flatMap(batch -> this.reactiveVaultOperations.write(String.format("%s/rewrap/%s", this.path, keyName), + .flatMap(batch -> this.reactiveVaultOperations.write("%s/rewrap/%s".formatted(this.path, keyName), Collections.singletonMap("batch_input", batch))) .flatMapIterable(vaultResponse -> toBatchResults(vaultResponse, batchRequest, Ciphertext::getContext)); } @@ -259,7 +257,7 @@ public class ReactiveVaultTransitTemplate implements ReactiveVaultTransitOperati return vaultRequest; }) .collectList() - .flatMap(batch -> this.reactiveVaultOperations.write(String.format("%s/encrypt/%s", this.path, keyName), + .flatMap(batch -> this.reactiveVaultOperations.write("%s/encrypt/%s".formatted(this.path, keyName), Collections.singletonMap("batch_input", batch))) .flatMapIterable(vaultResponse -> toBatchResults(vaultResponse, batchRequest, Plaintext::getContext)); } @@ -277,7 +275,7 @@ public class ReactiveVaultTransitTemplate implements ReactiveVaultTransitOperati return vaultRequest; }) .collectList() - .flatMap(batch -> this.reactiveVaultOperations.write(String.format("%s/decrypt/%s", this.path, keyName), + .flatMap(batch -> this.reactiveVaultOperations.write("%s/decrypt/%s".formatted(this.path, keyName), Collections.singletonMap("batch_input", batch))) .flatMapIterable(vaultResponse -> toDecryptionResults(vaultResponse, batchRequest)); } @@ -300,7 +298,7 @@ public class ReactiveVaultTransitTemplate implements ReactiveVaultTransitOperati Assert.notNull(hmacRequest, "HMAC request must not be null"); return this.reactiveVaultOperations - .write(String.format("%s/hmac/%s", this.path, keyName), toRequestBody(hmacRequest)) + .write("%s/hmac/%s".formatted(this.path, keyName), toRequestBody(hmacRequest)) .map(vaultResponse -> (String) vaultResponse.getRequiredData().get("hmac")) .map(Hmac::of); } @@ -323,7 +321,7 @@ public class ReactiveVaultTransitTemplate implements ReactiveVaultTransitOperati Assert.notNull(signRequest, "Sign request must not be null"); return this.reactiveVaultOperations - .write(String.format("%s/sign/%s", this.path, keyName), toRequestBody(signRequest)) + .write("%s/sign/%s".formatted(this.path, keyName), toRequestBody(signRequest)) .map(vaultResponse -> (String) vaultResponse.getRequiredData().get("signature")) .map(Signature::of); } @@ -347,7 +345,7 @@ public class ReactiveVaultTransitTemplate implements ReactiveVaultTransitOperati Assert.notNull(verificationRequest, "Signature verification request must not be null"); return this.reactiveVaultOperations - .write(String.format("%s/verify/%s", this.path, keyName), toRequestBody(verificationRequest)) + .write("%s/verify/%s".formatted(this.path, keyName), toRequestBody(verificationRequest)) .map(VaultResponse::getRequiredData) .map(vaultResponse -> { if (vaultResponse.containsKey("valid") && (Boolean) vaultResponse.get("valid")) { @@ -364,8 +362,7 @@ public class ReactiveVaultTransitTemplate implements ReactiveVaultTransitOperati Assert.notNull(type, "Key type must not be null"); return this.reactiveVaultOperations - .read(String.format("%s/export/%s/%s", this.path, type.getValue(), keyName), - VaultTransitTemplate.RawTransitKeyImpl.class) + .read("%s/export/%s/%s".formatted(this.path, type.getValue(), keyName), RawTransitKeyImpl.class) .flatMap(vaultResponse -> Mono.justOrEmpty(vaultResponse.getRequiredData())); } @@ -374,8 +371,7 @@ public class ReactiveVaultTransitTemplate implements ReactiveVaultTransitOperati Assert.hasText(keyName, "Key name must not be empty"); - return this.reactiveVaultOperations - .read(String.format("%s/keys/%s", this.path, keyName), VaultTransitKeyImpl.class) + return this.reactiveVaultOperations.read("%s/keys/%s".formatted(this.path, keyName), VaultTransitKeyImpl.class) .map(VaultResponseSupport::getRequiredData); } diff --git a/spring-vault-core/src/main/java/org/springframework/vault/core/ReactiveVaultVersionedKeyValueTemplate.java b/spring-vault-core/src/main/java/org/springframework/vault/core/ReactiveVaultVersionedKeyValueTemplate.java index 472b6571..4eb0a597 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/core/ReactiveVaultVersionedKeyValueTemplate.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/core/ReactiveVaultVersionedKeyValueTemplate.java @@ -88,7 +88,7 @@ public class ReactiveVaultVersionedKeyValueTemplate extends ReactiveVaultKeyValu private Mono> doRead(String path, Version version, Class responseType) { String secretPath = version.isVersioned() - ? String.format("%s?version=%d", createDataPath(path), version.getVersion()) : createDataPath(path); + ? "%s?version=%d".formatted(createDataPath(path), version.getVersion()) : createDataPath(path); Mono versionedResponseMono = doReadVersioned(secretPath); diff --git a/spring-vault-core/src/main/java/org/springframework/vault/core/VaultKeyValue1Template.java b/spring-vault-core/src/main/java/org/springframework/vault/core/VaultKeyValue1Template.java index 094322ef..97fcbb29 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/core/VaultKeyValue1Template.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/core/VaultKeyValue1Template.java @@ -117,7 +117,7 @@ class VaultKeyValue1Template extends VaultKeyValueAccessor implements VaultKeyVa @Override String createDataPath(String path) { - return String.format("%s/%s", this.path, path); + return "%s/%s".formatted(this.path, path); } } diff --git a/spring-vault-core/src/main/java/org/springframework/vault/core/VaultKeyValue2Accessor.java b/spring-vault-core/src/main/java/org/springframework/vault/core/VaultKeyValue2Accessor.java index 926683ab..699448cf 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/core/VaultKeyValue2Accessor.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/core/VaultKeyValue2Accessor.java @@ -55,8 +55,7 @@ abstract class VaultKeyValue2Accessor extends VaultKeyValueAccessor { VaultListResponse read = doRead(restOperations -> { return restOperations.exchange( - String.format("%s?list=true", - createBackendPath("metadata", KeyValueUtilities.normalizeListPath(path))), + "%s?list=true".formatted(createBackendPath("metadata", KeyValueUtilities.normalizeListPath(path))), HttpMethod.GET, null, VaultListResponse.class); }); @@ -83,7 +82,7 @@ abstract class VaultKeyValue2Accessor extends VaultKeyValueAccessor { } String createBackendPath(String segment, String path) { - return String.format("%s/%s/%s", this.path, segment, path); + return "%s/%s/%s".formatted(this.path, segment, path); } } diff --git a/spring-vault-core/src/main/java/org/springframework/vault/core/VaultKeyValue2Template.java b/spring-vault-core/src/main/java/org/springframework/vault/core/VaultKeyValue2Template.java index f2b9d945..d04a437e 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/core/VaultKeyValue2Template.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/core/VaultKeyValue2Template.java @@ -89,8 +89,8 @@ class VaultKeyValue2Template extends VaultKeyValue2Accessor implements VaultKeyV VaultResponse readResponse = get(path); if (readResponse == null || readResponse.getData() == null) { throw new SecretNotFoundException( - String.format("No data found at %s; patch only works on existing data", createDataPath(path)), - String.format("%s/%s", this.path, path)); + "No data found at %s; patch only works on existing data".formatted(createDataPath(path)), + "%s/%s".formatted(this.path, path)); } if (readResponse.getMetadata() == null) { diff --git a/spring-vault-core/src/main/java/org/springframework/vault/core/VaultKeyValueAccessor.java b/spring-vault-core/src/main/java/org/springframework/vault/core/VaultKeyValueAccessor.java index bcf5eb35..09ce3fd4 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/core/VaultKeyValueAccessor.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/core/VaultKeyValueAccessor.java @@ -16,7 +16,6 @@ package org.springframework.vault.core; import java.io.IOException; -import java.util.Map; import java.util.Optional; import java.util.function.BiFunction; import java.util.function.Function; @@ -216,9 +215,7 @@ abstract class VaultKeyValueAccessor implements VaultKeyValueOperationsSupport { Optional mapper = vaultOperations.doWithSession(operations -> { - if (operations instanceof RestTemplate) { - - RestTemplate template = (RestTemplate) operations; + if (operations instanceof RestTemplate template) { Optional jackson2Converter = template.getMessageConverters() .stream() diff --git a/spring-vault-core/src/main/java/org/springframework/vault/core/VaultPkiTemplate.java b/spring-vault-core/src/main/java/org/springframework/vault/core/VaultPkiTemplate.java index 727c9d1c..a00a2dba 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/core/VaultPkiTemplate.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/core/VaultPkiTemplate.java @@ -23,6 +23,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.Locale; import java.util.Map; + import org.springframework.http.ResponseEntity; import org.springframework.util.Assert; import org.springframework.util.StringUtils; @@ -173,7 +174,7 @@ public class VaultPkiTemplate implements VaultPkiOperations { return this.vaultOperations.doWithSession(restOperations -> { - String requestPath = String.format("{path}/issuer/{issuer}/%s", encoding.name().toLowerCase(Locale.ROOT)); + String requestPath = "{path}/issuer/{issuer}/%s".formatted(encoding.name().toLowerCase(Locale.ROOT)); try { ResponseEntity response = restOperations.getForEntity(requestPath, byte[].class, this.path, diff --git a/spring-vault-core/src/main/java/org/springframework/vault/core/VaultSysTemplate.java b/spring-vault-core/src/main/java/org/springframework/vault/core/VaultSysTemplate.java index 5d5f6912..fac1567e 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/core/VaultSysTemplate.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/core/VaultSysTemplate.java @@ -34,12 +34,10 @@ import org.springframework.core.ParameterizedTypeReference; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; -import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.ObjectUtils; -import org.springframework.util.StringUtils; import org.springframework.vault.VaultException; import org.springframework.vault.client.VaultHttpHeaders; import org.springframework.vault.client.VaultResponses; @@ -169,7 +167,7 @@ public class VaultSysTemplate implements VaultSysOperations { Assert.hasText(path, "Path must not be empty"); Assert.notNull(vaultMount, "VaultMount must not be null"); - this.vaultOperations.write(String.format("sys/mounts/%s", path), vaultMount); + this.vaultOperations.write("sys/mounts/%s".formatted(path), vaultMount); } @Override @@ -182,7 +180,7 @@ public class VaultSysTemplate implements VaultSysOperations { Assert.hasText(path, "Path must not be empty"); - this.vaultOperations.delete(String.format("sys/mounts/%s", path)); + this.vaultOperations.delete("sys/mounts/%s".formatted(path)); } @Override @@ -191,7 +189,7 @@ public class VaultSysTemplate implements VaultSysOperations { Assert.hasText(path, "Path must not be empty"); Assert.notNull(vaultMount, "VaultMount must not be null"); - this.vaultOperations.write(String.format("sys/auth/%s", path), vaultMount); + this.vaultOperations.write("sys/auth/%s".formatted(path), vaultMount); } @Override @@ -204,7 +202,7 @@ public class VaultSysTemplate implements VaultSysOperations { Assert.hasText(path, "Path must not be empty"); - this.vaultOperations.delete(String.format("sys/auth/%s", path)); + this.vaultOperations.delete("sys/auth/%s".formatted(path)); } @Override @@ -279,7 +277,7 @@ public class VaultSysTemplate implements VaultSysOperations { Assert.hasText(name, "Name must not be null or empty"); - this.vaultOperations.delete(String.format("sys/policy/%s", name)); + this.vaultOperations.delete("sys/policy/%s".formatted(name)); } @Override @@ -313,17 +311,11 @@ public class VaultSysTemplate implements VaultSysOperations { } - private static class GetMounts implements RestOperationsCallback> { + private record GetMounts(String path) implements RestOperationsCallback> { private static final ParameterizedTypeReference MOUNT_TYPE_REF = new ParameterizedTypeReference() { }; - private final String path; - - GetMounts(String path) { - this.path = path; - } - @Override public Map doWithRestOperations(RestOperations restOperations) { @@ -439,9 +431,8 @@ public class VaultSysTemplate implements VaultSysOperations { public boolean equals(Object o) { if (this == o) return true; - if (!(o instanceof VaultInitializationResponseImpl)) + if (!(o instanceof VaultInitializationResponseImpl that)) return false; - VaultInitializationResponseImpl that = (VaultInitializationResponseImpl) o; return this.keys.equals(that.keys) && this.rootToken.equals(that.rootToken); } @@ -503,9 +494,8 @@ public class VaultSysTemplate implements VaultSysOperations { public boolean equals(Object o) { if (this == o) return true; - if (!(o instanceof VaultUnsealStatusImpl)) + if (!(o instanceof VaultUnsealStatusImpl that)) return false; - VaultUnsealStatusImpl that = (VaultUnsealStatusImpl) o; return this.sealed == that.sealed && this.secretThreshold == that.secretThreshold && this.secretShares == that.secretShares && this.progress == that.progress; } @@ -584,9 +574,8 @@ public class VaultSysTemplate implements VaultSysOperations { public boolean equals(Object o) { if (this == o) return true; - if (!(o instanceof VaultHealthImpl)) + if (!(o instanceof VaultHealthImpl that)) return false; - VaultHealthImpl that = (VaultHealthImpl) o; return this.initialized == that.initialized && this.sealed == that.sealed && this.standby == that.standby && this.performanceStandby == that.performanceStandby && this.replicationRecoverySecondary == that.replicationRecoverySecondary diff --git a/spring-vault-core/src/main/java/org/springframework/vault/core/VaultTemplate.java b/spring-vault-core/src/main/java/org/springframework/vault/core/VaultTemplate.java index cfbf0845..f0f9a9f7 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/core/VaultTemplate.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/core/VaultTemplate.java @@ -22,7 +22,6 @@ import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.InitializingBean; import org.springframework.core.ParameterizedTypeReference; import org.springframework.http.HttpMethod; -import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.http.client.ClientHttpRequestFactory; import org.springframework.http.client.ClientHttpRequestInterceptor; @@ -286,15 +285,10 @@ public class VaultTemplate implements InitializingBean, VaultOperations, Disposa @Override public VaultKeyValueOperations opsForKeyValue(String path, KeyValueBackend apiVersion) { - switch (apiVersion) { - case KV_1: - return new VaultKeyValue1Template(this, path); - case KV_2: - return new VaultKeyValue2Template(this, path); - } - - throw new UnsupportedOperationException( - String.format("Key/Value backend version %s not supported", apiVersion)); + return switch (apiVersion) { + case KV_1 -> new VaultKeyValue1Template(this, path); + case KV_2 -> new VaultKeyValue2Template(this, path); + }; } @@ -388,7 +382,7 @@ public class VaultTemplate implements InitializingBean, VaultOperations, Disposa Assert.hasText(path, "Path must not be empty"); - VaultListResponse read = doRead(String.format("%s?list=true", path.endsWith("/") ? path : (path + "/")), + VaultListResponse read = doRead("%s?list=true".formatted(path.endsWith("/") ? path : (path + "/")), VaultListResponse.class); if (read == null) { return Collections.emptyList(); diff --git a/spring-vault-core/src/main/java/org/springframework/vault/core/VaultTokenTemplate.java b/spring-vault-core/src/main/java/org/springframework/vault/core/VaultTokenTemplate.java index 36673a30..2c89e90f 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/core/VaultTokenTemplate.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/core/VaultTokenTemplate.java @@ -65,7 +65,7 @@ public class VaultTokenTemplate implements VaultTokenOperations { Assert.hasText(role, "Role must not be null or empty"); Assert.notNull(request, "VaultTokenRequest must not be null"); - return writeAndReturn(String.format("auth/token/create/%s", role), request, VaultTokenResponse.class); + return writeAndReturn("auth/token/create/%s".formatted(role), request, VaultTokenResponse.class); } @Override diff --git a/spring-vault-core/src/main/java/org/springframework/vault/core/VaultTransformTemplate.java b/spring-vault-core/src/main/java/org/springframework/vault/core/VaultTransformTemplate.java index 847fa78a..3bc3646a 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/core/VaultTransformTemplate.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/core/VaultTransformTemplate.java @@ -71,7 +71,7 @@ public class VaultTransformTemplate implements VaultTransformOperations { request.put("value", plaintext); - return (String) this.vaultOperations.write(String.format("%s/encode/%s", this.path, roleName), request) + return (String) this.vaultOperations.write("%s/encode/%s".formatted(this.path, roleName), request) .getRequiredData() .get("encoded_value"); } @@ -88,8 +88,7 @@ public class VaultTransformTemplate implements VaultTransformOperations { applyTransformOptions(plaintext.getContext(), request); - Map data = this.vaultOperations - .write(String.format("%s/encode/%s", this.path, roleName), request) + Map data = this.vaultOperations.write("%s/encode/%s".formatted(this.path, roleName), request) .getRequiredData(); return toCiphertext(data, plaintext.getContext()); @@ -114,7 +113,7 @@ public class VaultTransformTemplate implements VaultTransformOperations { batch.add(vaultRequest); } - VaultResponse vaultResponse = this.vaultOperations.write(String.format("%s/encode/%s", this.path, roleName), + VaultResponse vaultResponse = this.vaultOperations.write("%s/encode/%s".formatted(this.path, roleName), Collections.singletonMap("batch_input", batch)); return toEncodedResults(vaultResponse, batchRequest); @@ -144,7 +143,7 @@ public class VaultTransformTemplate implements VaultTransformOperations { applyTransformOptions(transformContext, request); - return (String) this.vaultOperations.write(String.format("%s/decode/%s", this.path, roleName), request) + return (String) this.vaultOperations.write("%s/decode/%s".formatted(this.path, roleName), request) .getRequiredData() .get("decoded_value"); } @@ -167,7 +166,7 @@ public class VaultTransformTemplate implements VaultTransformOperations { batch.add(vaultRequest); } - VaultResponse vaultResponse = this.vaultOperations.write(String.format("%s/decode/%s", this.path, roleName), + VaultResponse vaultResponse = this.vaultOperations.write("%s/decode/%s".formatted(this.path, roleName), Collections.singletonMap("batch_input", batch)); return toDecryptionResults(vaultResponse, batchRequest); diff --git a/spring-vault-core/src/main/java/org/springframework/vault/core/VaultTransitTemplate.java b/spring-vault-core/src/main/java/org/springframework/vault/core/VaultTransitTemplate.java index 27435af4..c87bbdc3 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/core/VaultTransitTemplate.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/core/VaultTransitTemplate.java @@ -87,7 +87,7 @@ public class VaultTransitTemplate implements VaultTransitOperations { Assert.hasText(keyName, "Key name must not be empty"); - this.vaultOperations.write(String.format("%s/keys/%s", this.path, keyName), null); + this.vaultOperations.write("%s/keys/%s".formatted(this.path, keyName), null); } @Override @@ -96,13 +96,13 @@ public class VaultTransitTemplate implements VaultTransitOperations { Assert.hasText(keyName, "Key name must not be empty"); Assert.notNull(createKeyRequest, "VaultTransitKeyCreationRequest must not be empty"); - this.vaultOperations.write(String.format("%s/keys/%s", this.path, keyName), createKeyRequest); + this.vaultOperations.write("%s/keys/%s".formatted(this.path, keyName), createKeyRequest); } @Override public List getKeys() { - VaultResponse response = this.vaultOperations.read(String.format("%s/keys?list=true", this.path)); + VaultResponse response = this.vaultOperations.read("%s/keys?list=true".formatted(this.path)); return response == null ? Collections.emptyList() : (List) response.getRequiredData().get("keys"); } @@ -113,7 +113,7 @@ public class VaultTransitTemplate implements VaultTransitOperations { Assert.hasText(keyName, "Key name must not be empty"); Assert.notNull(keyConfiguration, "VaultKeyConfiguration must not be empty"); - this.vaultOperations.write(String.format("%s/keys/%s/config", this.path, keyName), keyConfiguration); + this.vaultOperations.write("%s/keys/%s/config".formatted(this.path, keyName), keyConfiguration); } @Override @@ -124,7 +124,7 @@ public class VaultTransitTemplate implements VaultTransitOperations { Assert.notNull(type, "Key type must not be null"); VaultResponseSupport result = this.vaultOperations - .read(String.format("%s/export/%s/%s", this.path, type.getValue(), keyName), RawTransitKeyImpl.class); + .read("%s/export/%s/%s".formatted(this.path, type.getValue(), keyName), RawTransitKeyImpl.class); return result != null ? result.getRequiredData() : null; } @@ -136,7 +136,7 @@ public class VaultTransitTemplate implements VaultTransitOperations { Assert.hasText(keyName, "Key name must not be empty"); VaultResponseSupport result = this.vaultOperations - .read(String.format("%s/keys/%s", this.path, keyName), VaultTransitKeyImpl.class); + .read("%s/keys/%s".formatted(this.path, keyName), VaultTransitKeyImpl.class); if (result != null) { return result.getRequiredData(); @@ -150,7 +150,7 @@ public class VaultTransitTemplate implements VaultTransitOperations { Assert.hasText(keyName, "Key name must not be empty"); - this.vaultOperations.delete(String.format("%s/keys/%s", this.path, keyName)); + this.vaultOperations.delete("%s/keys/%s".formatted(this.path, keyName)); } @Override @@ -158,7 +158,7 @@ public class VaultTransitTemplate implements VaultTransitOperations { Assert.hasText(keyName, "Key name must not be empty"); - this.vaultOperations.write(String.format("%s/keys/%s/rotate", this.path, keyName), null); + this.vaultOperations.write("%s/keys/%s/rotate".formatted(this.path, keyName), null); } @Override @@ -171,7 +171,7 @@ public class VaultTransitTemplate implements VaultTransitOperations { request.put("plaintext", Base64.getEncoder().encodeToString(plaintext.getBytes())); - return (String) this.vaultOperations.write(String.format("%s/encrypt/%s", this.path, keyName), request) + return (String) this.vaultOperations.write("%s/encrypt/%s".formatted(this.path, keyName), request) .getRequiredData() .get("ciphertext"); } @@ -200,7 +200,7 @@ public class VaultTransitTemplate implements VaultTransitOperations { applyTransitOptions(transitContext, request); - return (String) this.vaultOperations.write(String.format("%s/encrypt/%s", this.path, keyName), request) + return (String) this.vaultOperations.write("%s/encrypt/%s".formatted(this.path, keyName), request) .getRequiredData() .get("ciphertext"); } @@ -226,7 +226,7 @@ public class VaultTransitTemplate implements VaultTransitOperations { batch.add(vaultRequest); } - VaultResponse vaultResponse = this.vaultOperations.write(String.format("%s/encrypt/%s", this.path, keyName), + VaultResponse vaultResponse = this.vaultOperations.write("%s/encrypt/%s".formatted(this.path, keyName), Collections.singletonMap("batch_input", batch)); return toBatchResults(vaultResponse, batchRequest, Plaintext::getContext); @@ -242,8 +242,7 @@ public class VaultTransitTemplate implements VaultTransitOperations { request.put("ciphertext", ciphertext); - String plaintext = (String) this.vaultOperations - .write(String.format("%s/decrypt/%s", this.path, keyName), request) + String plaintext = (String) this.vaultOperations.write("%s/decrypt/%s".formatted(this.path, keyName), request) .getRequiredData() .get("plaintext"); @@ -274,8 +273,7 @@ public class VaultTransitTemplate implements VaultTransitOperations { applyTransitOptions(transitContext, request); - String plaintext = (String) this.vaultOperations - .write(String.format("%s/decrypt/%s", this.path, keyName), request) + String plaintext = (String) this.vaultOperations.write("%s/decrypt/%s".formatted(this.path, keyName), request) .getRequiredData() .get("plaintext"); @@ -303,7 +301,7 @@ public class VaultTransitTemplate implements VaultTransitOperations { batch.add(vaultRequest); } - VaultResponse vaultResponse = this.vaultOperations.write(String.format("%s/decrypt/%s", this.path, keyName), + VaultResponse vaultResponse = this.vaultOperations.write("%s/decrypt/%s".formatted(this.path, keyName), Collections.singletonMap("batch_input", batch)); return toDecryptionResults(vaultResponse, batchRequest); @@ -318,7 +316,7 @@ public class VaultTransitTemplate implements VaultTransitOperations { Map request = new LinkedHashMap<>(); request.put("ciphertext", ciphertext); - return (String) this.vaultOperations.write(String.format("%s/rewrap/%s", this.path, keyName), request) + return (String) this.vaultOperations.write("%s/rewrap/%s".formatted(this.path, keyName), request) .getRequiredData() .get("ciphertext"); } @@ -332,7 +330,7 @@ public class VaultTransitTemplate implements VaultTransitOperations { Map request = createRewrapRequest(toCiphertext(ciphertext, transitContext)); - return (String) this.vaultOperations.write(String.format("%s/rewrap/%s", this.path, keyName), request) + return (String) this.vaultOperations.write("%s/rewrap/%s".formatted(this.path, keyName), request) .getRequiredData() .get("ciphertext"); } @@ -351,7 +349,7 @@ public class VaultTransitTemplate implements VaultTransitOperations { batch.add(vaultRequest); } - VaultResponse vaultResponse = this.vaultOperations.write(String.format("%s/rewrap/%s", this.path, keyName), + VaultResponse vaultResponse = this.vaultOperations.write("%s/rewrap/%s".formatted(this.path, keyName), Collections.singletonMap("batch_input", batch)); return toBatchResults(vaultResponse, batchRequest, Ciphertext::getContext); @@ -376,7 +374,7 @@ public class VaultTransitTemplate implements VaultTransitOperations { Map request = toRequestBody(hmacRequest); - String hmac = (String) this.vaultOperations.write(String.format("%s/hmac/%s", this.path, keyName), request) + String hmac = (String) this.vaultOperations.write("%s/hmac/%s".formatted(this.path, keyName), request) .getRequiredData() .get("hmac"); @@ -416,7 +414,7 @@ public class VaultTransitTemplate implements VaultTransitOperations { Map request = toRequestBody(signRequest); - String signature = (String) this.vaultOperations.write(String.format("%s/sign/%s", this.path, keyName), request) + String signature = (String) this.vaultOperations.write("%s/sign/%s".formatted(this.path, keyName), request) .getRequiredData() .get("signature"); @@ -457,8 +455,7 @@ public class VaultTransitTemplate implements VaultTransitOperations { Map request = toRequestBody(verificationRequest); - Map response = this.vaultOperations - .write(String.format("%s/verify/%s", this.path, keyName), request) + Map response = this.vaultOperations.write("%s/verify/%s".formatted(this.path, keyName), request) .getRequiredData(); if (response.containsKey("valid") && Boolean.valueOf("" + response.get("valid"))) { @@ -818,9 +815,8 @@ public class VaultTransitTemplate implements VaultTransitOperations { public boolean equals(Object o) { if (this == o) return true; - if (!(o instanceof VaultTransitKeyImpl)) + if (!(o instanceof VaultTransitKeyImpl that)) return false; - VaultTransitKeyImpl that = (VaultTransitKeyImpl) o; return this.allowPlaintextBackup == that.allowPlaintextBackup && this.deletionAllowed == that.deletionAllowed && this.derived == that.derived && this.exportable == that.exportable && this.latestVersion == that.latestVersion @@ -877,9 +873,8 @@ public class VaultTransitTemplate implements VaultTransitOperations { public boolean equals(Object o) { if (this == o) return true; - if (!(o instanceof RawTransitKeyImpl)) + if (!(o instanceof RawTransitKeyImpl that)) return false; - RawTransitKeyImpl that = (RawTransitKeyImpl) o; return this.keys.equals(that.keys) && Objects.equals(this.name, that.name); } diff --git a/spring-vault-core/src/main/java/org/springframework/vault/core/VaultVersionedKeyValueTemplate.java b/spring-vault-core/src/main/java/org/springframework/vault/core/VaultVersionedKeyValueTemplate.java index 112b9e0e..d1031020 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/core/VaultVersionedKeyValueTemplate.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/core/VaultVersionedKeyValueTemplate.java @@ -89,7 +89,7 @@ public class VaultVersionedKeyValueTemplate extends VaultKeyValue2Accessor imple private Versioned doRead(String path, Version version, Class responseType) { String secretPath = version.isVersioned() - ? String.format("%s?version=%d", createDataPath(path), version.getVersion()) : createDataPath(path); + ? "%s?version=%d".formatted(createDataPath(path), version.getVersion()) : createDataPath(path); VersionedResponse response = this.vaultOperations.doWithSession(restOperations -> { @@ -130,9 +130,7 @@ public class VaultVersionedKeyValueTemplate extends VaultKeyValue2Accessor imple Map data = new LinkedHashMap<>(); Map requestOptions = new LinkedHashMap<>(); - if (body instanceof Versioned) { - - Versioned versioned = (Versioned) body; + if (body instanceof Versioned versioned) { data.put("data", versioned.getData()); data.put("options", requestOptions); diff --git a/spring-vault-core/src/main/java/org/springframework/vault/core/env/LeaseAwareVaultPropertySource.java b/spring-vault-core/src/main/java/org/springframework/vault/core/env/LeaseAwareVaultPropertySource.java index bb520a91..5d966974 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/core/env/LeaseAwareVaultPropertySource.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/core/env/LeaseAwareVaultPropertySource.java @@ -167,7 +167,7 @@ public class LeaseAwareVaultPropertySource extends EnumerablePropertySource secrets = doTransformProperties(flattenMap(created.getSecrets())); diff --git a/spring-vault-core/src/main/java/org/springframework/vault/core/env/VaultPropertySource.java b/spring-vault-core/src/main/java/org/springframework/vault/core/env/VaultPropertySource.java index f02154db..ed7048ad 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/core/env/VaultPropertySource.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/core/env/VaultPropertySource.java @@ -146,7 +146,7 @@ public class VaultPropertySource extends EnumerablePropertySource properties = null; @@ -161,11 +161,11 @@ public class VaultPropertySource extends EnumerablePropertySource secrets; diff --git a/spring-vault-core/src/main/java/org/springframework/vault/core/lease/event/SecretLeaseErrorEvent.java b/spring-vault-core/src/main/java/org/springframework/vault/core/lease/event/SecretLeaseErrorEvent.java index fbfcdc87..916a74fb 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/core/lease/event/SecretLeaseErrorEvent.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/core/lease/event/SecretLeaseErrorEvent.java @@ -15,6 +15,8 @@ */ package org.springframework.vault.core.lease.event; +import java.io.Serial; + import org.springframework.lang.Nullable; import org.springframework.vault.core.lease.domain.Lease; import org.springframework.vault.core.lease.domain.RequestedSecret; @@ -27,6 +29,7 @@ import org.springframework.vault.core.lease.domain.RequestedSecret; */ public class SecretLeaseErrorEvent extends SecretLeaseEvent { + @Serial private static final long serialVersionUID = 1L; private final Throwable exception; diff --git a/spring-vault-core/src/main/java/org/springframework/vault/core/lease/event/SecretLeaseEvent.java b/spring-vault-core/src/main/java/org/springframework/vault/core/lease/event/SecretLeaseEvent.java index 983b0626..845150c5 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/core/lease/event/SecretLeaseEvent.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/core/lease/event/SecretLeaseEvent.java @@ -15,6 +15,8 @@ */ package org.springframework.vault.core.lease.event; +import java.io.Serial; + import org.springframework.context.ApplicationEvent; import org.springframework.lang.Nullable; import org.springframework.vault.core.lease.domain.Lease; @@ -31,6 +33,7 @@ import org.springframework.vault.core.lease.domain.RequestedSecret; */ public abstract class SecretLeaseEvent extends ApplicationEvent { + @Serial private static final long serialVersionUID = 1L; @Nullable diff --git a/spring-vault-core/src/main/java/org/springframework/vault/core/lease/event/SecretLeaseExpiredEvent.java b/spring-vault-core/src/main/java/org/springframework/vault/core/lease/event/SecretLeaseExpiredEvent.java index 6dc430d3..7b7e8301 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/core/lease/event/SecretLeaseExpiredEvent.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/core/lease/event/SecretLeaseExpiredEvent.java @@ -15,6 +15,8 @@ */ package org.springframework.vault.core.lease.event; +import java.io.Serial; + import org.springframework.vault.core.lease.domain.Lease; import org.springframework.vault.core.lease.domain.RequestedSecret; @@ -27,6 +29,7 @@ import org.springframework.vault.core.lease.domain.RequestedSecret; */ public class SecretLeaseExpiredEvent extends SecretLeaseEvent { + @Serial private static final long serialVersionUID = 1L; /** diff --git a/spring-vault-core/src/main/java/org/springframework/vault/core/lease/event/SecretNotFoundEvent.java b/spring-vault-core/src/main/java/org/springframework/vault/core/lease/event/SecretNotFoundEvent.java index 60d3cba5..b80f5de8 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/core/lease/event/SecretNotFoundEvent.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/core/lease/event/SecretNotFoundEvent.java @@ -15,6 +15,8 @@ */ package org.springframework.vault.core.lease.event; +import java.io.Serial; + import org.springframework.vault.core.lease.domain.Lease; import org.springframework.vault.core.lease.domain.RequestedSecret; @@ -26,6 +28,7 @@ import org.springframework.vault.core.lease.domain.RequestedSecret; */ public class SecretNotFoundEvent extends SecretLeaseEvent { + @Serial private static final long serialVersionUID = 1L; /** diff --git a/spring-vault-core/src/main/java/org/springframework/vault/core/util/KeyValueDelegate.java b/spring-vault-core/src/main/java/org/springframework/vault/core/util/KeyValueDelegate.java index e29ccb67..7e5900d8 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/core/util/KeyValueDelegate.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/core/util/KeyValueDelegate.java @@ -91,7 +91,7 @@ public class KeyValueDelegate { String keyPath = requestedSecret.substring(mountPath.length()); - return String.format("%sdata/%s", mountPath, keyPath); + return "%sdata/%s".formatted(mountPath, keyPath); } @SuppressWarnings("unchecked") @@ -108,7 +108,7 @@ public class KeyValueDelegate { @SuppressWarnings("unchecked") private MountInfo doGetMountInfo(String path) { - VaultResponse response = this.operations.read(String.format("sys/internal/ui/mounts/%s", path)); + VaultResponse response = this.operations.read("sys/internal/ui/mounts/%s".formatted(path)); if (response == null || response.getData() == null) { return MountInfo.unavailable(); diff --git a/spring-vault-core/src/main/java/org/springframework/vault/repository/convert/SecretDocument.java b/spring-vault-core/src/main/java/org/springframework/vault/repository/convert/SecretDocument.java index ba46c999..7fb521dc 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/repository/convert/SecretDocument.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/repository/convert/SecretDocument.java @@ -22,7 +22,6 @@ import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.ObjectUtils; import org.springframework.vault.support.VaultResponse; -import org.springframework.vault.support.Versioned; /** * Vault database exchange object containing data before/after it's exchanged with Vault. @@ -186,10 +185,9 @@ public class SecretDocument { if (this == o) { return true; } - if (!(o instanceof SecretDocument)) { + if (!(o instanceof SecretDocument that)) { return false; } - SecretDocument that = (SecretDocument) o; if (!ObjectUtils.nullSafeEquals(this.id, that.id)) { return false; } diff --git a/spring-vault-core/src/main/java/org/springframework/vault/repository/core/MappingVaultEntityInformation.java b/spring-vault-core/src/main/java/org/springframework/vault/repository/core/MappingVaultEntityInformation.java index 99adeac6..141ee470 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/repository/core/MappingVaultEntityInformation.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/repository/core/MappingVaultEntityInformation.java @@ -40,9 +40,9 @@ public class MappingVaultEntityInformation extends PersistentEntityInform if (!entity.hasIdProperty()) { - throw new MappingException(String.format( - "Entity %s requires to have an explicit id field. Did you forget to provide one using @Id?", - entity.getName())); + throw new MappingException( + "Entity %s requires to have an explicit id field. Did you forget to provide one using @Id?" + .formatted(entity.getName())); } } diff --git a/spring-vault-core/src/main/java/org/springframework/vault/repository/core/VaultKeyValueTemplate.java b/spring-vault-core/src/main/java/org/springframework/vault/repository/core/VaultKeyValueTemplate.java index 2b352370..e69418e6 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/repository/core/VaultKeyValueTemplate.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/repository/core/VaultKeyValueTemplate.java @@ -101,7 +101,7 @@ public class VaultKeyValueTemplate extends KeyValueTemplate { if (adapter.contains(id, keyspace)) { throw new DuplicateKeyException( - String.format("Cannot insert existing object with id %s!. Please use update.", id)); + "Cannot insert existing object with id %s!. Please use update.".formatted(id)); } return (T) adapter.put(id, objectToInsert, keyspace); diff --git a/spring-vault-core/src/main/java/org/springframework/vault/repository/mapping/BasicVaultPersistentEntity.java b/spring-vault-core/src/main/java/org/springframework/vault/repository/mapping/BasicVaultPersistentEntity.java index 93b686b2..9b994a4e 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/repository/mapping/BasicVaultPersistentEntity.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/repository/mapping/BasicVaultPersistentEntity.java @@ -94,7 +94,7 @@ public class BasicVaultPersistentEntity extends BasicKeyValuePersistentEntity @Override public String getKeySpace() { - return String.format("%s/%s", getSecretBackend(), super.getKeySpace()); + return "%s/%s".formatted(getSecretBackend(), super.getKeySpace()); } @Override diff --git a/spring-vault-core/src/main/java/org/springframework/vault/repository/query/VaultQueryCreator.java b/spring-vault-core/src/main/java/org/springframework/vault/repository/query/VaultQueryCreator.java index c7e2ac49..8652aca9 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/repository/query/VaultQueryCreator.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/repository/query/VaultQueryCreator.java @@ -79,7 +79,7 @@ public class VaultQueryCreator extends AbstractQueryCreator implements Predicate { - - private final T value; - - private final BiPredicate predicate; - - public Criteria(T value, BiPredicate predicate) { - this.value = value; - this.predicate = predicate; - } + record Criteria(T value, BiPredicate predicate) implements Predicate { @Override public boolean test(String s) { return this.predicate.test(this.value, s); } - public T getValue() { - return this.value; - } - - public BiPredicate getPredicate() { - return this.predicate; - } - public boolean equals(final Object o) { if (o == this) return true; - if (!(o instanceof Criteria)) + if (!(o instanceof Criteria other)) return false; - final Criteria other = (Criteria) o; - final Object this$value = this.getValue(); - final Object other$value = other.getValue(); + final Object this$value = this.value(); + final Object other$value = other.value(); if (this$value == null ? other$value != null : !this$value.equals(other$value)) return false; - final Object this$predicate = this.getPredicate(); - final Object other$predicate = other.getPredicate(); + final Object this$predicate = this.predicate(); + final Object other$predicate = other.predicate(); if (this$predicate == null ? other$predicate != null : !this$predicate.equals(other$predicate)) return false; return true; @@ -215,9 +197,9 @@ public class VaultQueryCreator extends AbstractQueryCreator entity = (VaultPersistentEntity) this.operations.getMappingContext() .getRequiredPersistentEntity(metadata.getDomainType()); diff --git a/spring-vault-core/src/main/java/org/springframework/vault/security/VaultBytesKeyGenerator.java b/spring-vault-core/src/main/java/org/springframework/vault/security/VaultBytesKeyGenerator.java index 7f327b49..d61e7813 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/security/VaultBytesKeyGenerator.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/security/VaultBytesKeyGenerator.java @@ -77,8 +77,7 @@ public class VaultBytesKeyGenerator implements BytesKeyGenerator { @Override public byte[] generateKey() { - VaultResponse response = this.vaultOperations.write( - String.format("%s/random/%d", this.transitPath, getKeyLength()), + VaultResponse response = this.vaultOperations.write("%s/random/%d".formatted(this.transitPath, getKeyLength()), Collections.singletonMap("format", "base64")); String randomBytes = (String) response.getRequiredData().get("random_bytes"); diff --git a/spring-vault-core/src/main/java/org/springframework/vault/support/CertificateBundle.java b/spring-vault-core/src/main/java/org/springframework/vault/support/CertificateBundle.java index 9cfb91c7..9708ce1a 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/support/CertificateBundle.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/support/CertificateBundle.java @@ -325,15 +325,13 @@ public class CertificateBundle extends Certificate { private static KeySpec getPrivateKey(byte[] privateKey, String keyType) throws GeneralSecurityException, IOException { - switch (keyType.toLowerCase(Locale.ROOT)) { - case "rsa": - return KeyFactories.RSA_PRIVATE.getKey(privateKey); - case "ec": - return KeyFactories.EC.getKey(privateKey); - } + return switch (keyType.toLowerCase(Locale.ROOT)) { + case "rsa" -> KeyFactories.RSA_PRIVATE.getKey(privateKey); + case "ec" -> KeyFactories.EC.getKey(privateKey); + default -> throw new IllegalArgumentException( + "Key type %s not supported. Supported types are: rsa, ec.".formatted(keyType)); + }; - throw new IllegalArgumentException( - String.format("Key type %s not supported. Supported types are: rsa, ec.", keyType)); } } diff --git a/spring-vault-core/src/main/java/org/springframework/vault/support/Ciphertext.java b/spring-vault-core/src/main/java/org/springframework/vault/support/Ciphertext.java index cb6ad03c..8fdc7edb 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/support/Ciphertext.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/support/Ciphertext.java @@ -75,9 +75,8 @@ public class Ciphertext { public boolean equals(Object o) { if (this == o) return true; - if (!(o instanceof Ciphertext)) + if (!(o instanceof Ciphertext that)) return false; - Ciphertext that = (Ciphertext) o; return this.ciphertext.equals(that.ciphertext) && this.context.equals(that.context); } diff --git a/spring-vault-core/src/main/java/org/springframework/vault/support/DerParser.java b/spring-vault-core/src/main/java/org/springframework/vault/support/DerParser.java index b9ab6530..3f8d891d 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/support/DerParser.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/support/DerParser.java @@ -302,7 +302,7 @@ class DerParser { BigInteger getInteger() { if (this.type != INTEGER) { - throw new IllegalStateException(String.format("Invalid DER: object (%d) is not integer.", this.type)); + throw new IllegalStateException("Invalid DER: object (%d) is not integer.".formatted(this.type)); } return new BigInteger(this.value); @@ -343,8 +343,7 @@ class DerParser { case OID: return getObjectIdentifier(this.value); default: - throw new IllegalStateException( - String.format("Invalid DER: object (%d) is not a string", this.type)); + throw new IllegalStateException("Invalid DER: object (%d) is not a string".formatted(this.type)); } return new String(this.value, encoding); diff --git a/spring-vault-core/src/main/java/org/springframework/vault/support/DurationParser.java b/spring-vault-core/src/main/java/org/springframework/vault/support/DurationParser.java index a7f83b30..ad9508a0 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/support/DurationParser.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/support/DurationParser.java @@ -24,7 +24,6 @@ import java.util.regex.Pattern; import org.springframework.lang.Nullable; import org.springframework.util.ObjectUtils; -import org.springframework.util.StringUtils; /** * Utility to parse a Go format duration into {@link Duration}. @@ -57,7 +56,7 @@ public class DurationParser { } if (!VERIFY_PATTERN.matcher(duration.toLowerCase(Locale.ENGLISH)).matches()) { - throw new IllegalArgumentException(String.format("Cannot parse '%s' into a Duration", duration)); + throw new IllegalArgumentException("Cannot parse '%s' into a Duration".formatted(duration)); } Matcher matcher = PARSE_PATTERN.matcher(duration.toLowerCase(Locale.ENGLISH)); @@ -67,32 +66,17 @@ public class DurationParser { int num = Integer.parseInt(matcher.group(1)); String typ = matcher.group(2); - switch (typ) { - case "ns": - result = result.plus(Duration.ofNanos(num)); - break; - case "us": - result = result.plus(Duration.ofNanos(num * 1000)); - break; - case "ms": - result = result.plus(Duration.ofMillis(num)); - break; - case "s": - result = result.plus(Duration.ofSeconds(num)); - break; - case "m": - result = result.plus(Duration.ofMinutes(num)); - break; - case "h": - result = result.plus(Duration.ofHours(num)); - break; - case "d": - result = result.plus(Duration.ofDays(num)); - break; - case "w": - result = result.plus(Duration.ofDays(num * 7)); - break; - } + result = switch (typ) { + case "ns" -> result.plus(Duration.ofNanos(num)); + case "us" -> result.plus(Duration.ofNanos(num * 1000)); + case "ms" -> result.plus(Duration.ofMillis(num)); + case "s" -> result.plus(Duration.ofSeconds(num)); + case "m" -> result.plus(Duration.ofMinutes(num)); + case "h" -> result.plus(Duration.ofHours(num)); + case "d" -> result.plus(Duration.ofDays(num)); + case "w" -> result.plus(Duration.ofDays(num * 7)); + default -> result; + }; } return result; diff --git a/spring-vault-core/src/main/java/org/springframework/vault/support/Hmac.java b/spring-vault-core/src/main/java/org/springframework/vault/support/Hmac.java index 1b4eb0c4..0e2c82b2 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/support/Hmac.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/support/Hmac.java @@ -54,9 +54,8 @@ public class Hmac { public boolean equals(Object o) { if (this == o) return true; - if (!(o instanceof Hmac)) + if (!(o instanceof Hmac other)) return false; - Hmac other = (Hmac) o; return this.hmac.equals(other.hmac); } diff --git a/spring-vault-core/src/main/java/org/springframework/vault/support/KeystoreUtil.java b/spring-vault-core/src/main/java/org/springframework/vault/support/KeystoreUtil.java index 15ccd55a..edce2f7b 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/support/KeystoreUtil.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/support/KeystoreUtil.java @@ -127,7 +127,7 @@ class KeystoreUtil { int counter = 0; for (X509Certificate certificate : certificates) { - keyStore.setCertificateEntry(String.format("cert_%d", counter++), certificate); + keyStore.setCertificateEntry("cert_%d".formatted(counter++), certificate); } return keyStore; diff --git a/spring-vault-core/src/main/java/org/springframework/vault/support/PemObject.java b/spring-vault-core/src/main/java/org/springframework/vault/support/PemObject.java index 0b662095..c499363b 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/support/PemObject.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/support/PemObject.java @@ -162,7 +162,7 @@ public class PemObject { if (!endTitle.equals(title)) { throw new IllegalArgumentException( - String.format("end tag (%s) doesn't match begin tag (%s)", endTitle, title)); + "end tag (%s) doesn't match begin tag (%s)".formatted(endTitle, title)); } return new PemObject(PemObjectType.of(title), keyBuilder.toString()); } @@ -308,7 +308,7 @@ public class PemObject { } } - throw new IllegalArgumentException(String.format("No enum constant %s", identifier)); + throw new IllegalArgumentException("No enum constant %s".formatted(identifier)); } } diff --git a/spring-vault-core/src/main/java/org/springframework/vault/support/Plaintext.java b/spring-vault-core/src/main/java/org/springframework/vault/support/Plaintext.java index 732cd5f3..60695dea 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/support/Plaintext.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/support/Plaintext.java @@ -143,9 +143,8 @@ public class Plaintext { public boolean equals(Object o) { if (this == o) return true; - if (!(o instanceof Plaintext)) + if (!(o instanceof Plaintext plaintext1)) return false; - Plaintext plaintext1 = (Plaintext) o; return Arrays.equals(this.plaintext, plaintext1.plaintext) && this.context.equals(plaintext1.context); } diff --git a/spring-vault-core/src/main/java/org/springframework/vault/support/Policy.java b/spring-vault-core/src/main/java/org/springframework/vault/support/Policy.java index 1757970e..36d0c476 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/support/Policy.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/support/Policy.java @@ -156,9 +156,8 @@ public class Policy { public boolean equals(Object o) { if (this == o) return true; - if (!(o instanceof Policy)) + if (!(o instanceof Policy policy)) return false; - Policy policy = (Policy) o; return this.rules.equals(policy.rules); } @@ -297,9 +296,8 @@ public class Policy { public boolean equals(Object o) { if (this == o) return true; - if (!(o instanceof Rule)) + if (!(o instanceof Rule rule)) return false; - Rule rule = (Rule) o; return this.path.equals(rule.path); } @@ -490,17 +488,11 @@ public class Policy { Assert.state(StringUtils.hasText(this.path), "Path must not be empty"); Assert.state(!this.capabilities.isEmpty(), "Rule must define one or more capabilities"); - List capabilities; - switch (this.capabilities.size()) { - case 0: - capabilities = Collections.emptyList(); - break; - case 1: - capabilities = Collections.singletonList(this.capabilities.iterator().next()); - break; - default: - capabilities = Collections.unmodifiableList(new ArrayList<>(this.capabilities)); - } + List capabilities = switch (this.capabilities.size()) { + case 0 -> Collections.emptyList(); + case 1 -> Collections.singletonList(this.capabilities.iterator().next()); + default -> Collections.unmodifiableList(new ArrayList<>(this.capabilities)); + }; return new Rule(this.path, capabilities, this.minWrappingTtl, this.maxWrappingTtl, createMap(this.allowedParameters), createMap(this.deniedParameters)); diff --git a/spring-vault-core/src/main/java/org/springframework/vault/support/Signature.java b/spring-vault-core/src/main/java/org/springframework/vault/support/Signature.java index ebfd2d54..155d80ae 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/support/Signature.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/support/Signature.java @@ -54,9 +54,8 @@ public class Signature { public boolean equals(Object o) { if (this == o) return true; - if (!(o instanceof Signature)) + if (!(o instanceof Signature that)) return false; - Signature that = (Signature) o; return this.signature.equals(that.signature); } diff --git a/spring-vault-core/src/main/java/org/springframework/vault/support/SignatureValidation.java b/spring-vault-core/src/main/java/org/springframework/vault/support/SignatureValidation.java index a37c489e..dc45a0ba 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/support/SignatureValidation.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/support/SignatureValidation.java @@ -63,9 +63,8 @@ public class SignatureValidation { public boolean equals(Object o) { if (this == o) return true; - if (!(o instanceof SignatureValidation)) + if (!(o instanceof SignatureValidation that)) return false; - SignatureValidation that = (SignatureValidation) o; return this.state == that.state; } diff --git a/spring-vault-core/src/main/java/org/springframework/vault/support/SslConfiguration.java b/spring-vault-core/src/main/java/org/springframework/vault/support/SslConfiguration.java index dd890715..11d464c6 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/support/SslConfiguration.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/support/SslConfiguration.java @@ -163,7 +163,7 @@ public class SslConfiguration { public static SslConfiguration forTrustStore(Resource trustStore, @Nullable char[] trustStorePassword) { Assert.notNull(trustStore, "TrustStore must not be null"); - Assert.isTrue(trustStore.exists(), () -> String.format("TrustStore %s does not exist", trustStore)); + Assert.isTrue(trustStore.exists(), () -> "TrustStore %s does not exist".formatted(trustStore)); return new SslConfiguration(KeyStoreConfiguration.unconfigured(), KeyConfiguration.unconfigured(), new KeyStoreConfiguration(trustStore, trustStorePassword, DEFAULT_KEYSTORE_TYPE)); @@ -240,7 +240,7 @@ public class SslConfiguration { KeyConfiguration keyConfiguration) { Assert.notNull(keyStore, "KeyStore must not be null"); - Assert.isTrue(keyStore.exists(), () -> String.format("KeyStore %s does not exist", keyStore)); + Assert.isTrue(keyStore.exists(), () -> "KeyStore %s does not exist".formatted(keyStore)); Assert.notNull(keyConfiguration, "KeyConfiguration must not be null"); return new SslConfiguration(new KeyStoreConfiguration(keyStore, keyStorePassword, DEFAULT_KEYSTORE_TYPE), @@ -263,10 +263,10 @@ public class SslConfiguration { @Nullable char[] trustStorePassword) { Assert.notNull(keyStore, "KeyStore must not be null"); - Assert.isTrue(keyStore.exists(), () -> String.format("KeyStore %s does not exist", keyStore)); + Assert.isTrue(keyStore.exists(), () -> "KeyStore %s does not exist".formatted(keyStore)); Assert.notNull(trustStore, "TrustStore must not be null"); - Assert.isTrue(trustStore.exists(), String.format("TrustStore %s does not exist", trustStore)); + Assert.isTrue(trustStore.exists(), "TrustStore %s does not exist".formatted(trustStore)); return new SslConfiguration(new KeyStoreConfiguration(keyStore, keyStorePassword, DEFAULT_KEYSTORE_TYPE), new KeyStoreConfiguration(trustStore, trustStorePassword, DEFAULT_KEYSTORE_TYPE)); @@ -482,7 +482,7 @@ public class SslConfiguration { Assert.notNull(resource, "Resource must not be null"); Assert.isTrue(resource instanceof AbsentResource || resource.exists(), - () -> String.format("Resource %s does not exist", resource)); + () -> "Resource %s does not exist".formatted(resource)); Assert.notNull(storeType, "Keystore type must not be null"); this.resource = resource; diff --git a/spring-vault-core/src/main/java/org/springframework/vault/support/TransformCiphertext.java b/spring-vault-core/src/main/java/org/springframework/vault/support/TransformCiphertext.java index dc279875..d262a827 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/support/TransformCiphertext.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/support/TransformCiphertext.java @@ -15,10 +15,10 @@ */ package org.springframework.vault.support; -import org.springframework.util.Assert; - import java.util.Objects; +import org.springframework.util.Assert; + /** * Value object representing cipher text with an optional {@link VaultTransformContext}. * @@ -75,9 +75,8 @@ public class TransformCiphertext { public boolean equals(Object o) { if (this == o) return true; - if (!(o instanceof TransformCiphertext)) + if (!(o instanceof TransformCiphertext that)) return false; - TransformCiphertext that = (TransformCiphertext) o; return this.ciphertext.equals(that.ciphertext) && this.context.equals(that.context); } diff --git a/spring-vault-core/src/main/java/org/springframework/vault/support/TransformPlaintext.java b/spring-vault-core/src/main/java/org/springframework/vault/support/TransformPlaintext.java index a43cbc9b..e5541802 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/support/TransformPlaintext.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/support/TransformPlaintext.java @@ -140,9 +140,8 @@ public class TransformPlaintext { public boolean equals(Object o) { if (this == o) return true; - if (!(o instanceof TransformPlaintext)) + if (!(o instanceof TransformPlaintext that)) return false; - TransformPlaintext that = (TransformPlaintext) o; if (!ObjectUtils.nullSafeEquals(this.plaintext, that.plaintext)) { return false; } diff --git a/spring-vault-core/src/main/java/org/springframework/vault/support/VaultCertificateRequest.java b/spring-vault-core/src/main/java/org/springframework/vault/support/VaultCertificateRequest.java index 6966a28c..265d6ab2 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/support/VaultCertificateRequest.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/support/VaultCertificateRequest.java @@ -21,7 +21,6 @@ import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.Collection; import java.util.List; -import java.util.Locale; import java.util.concurrent.TimeUnit; import org.springframework.lang.Nullable; @@ -484,54 +483,29 @@ public class VaultCertificateRequest { Assert.notNull(this.commonName, "Common name must not be null"); Assert.hasText(this.commonName, "Common name must not be empty"); - List altNames; - switch (this.altNames.size()) { - case 0: - altNames = java.util.Collections.emptyList(); - break; - case 1: - altNames = java.util.Collections.singletonList(this.altNames.get(0)); - break; - default: - altNames = java.util.Collections.unmodifiableList(new ArrayList<>(this.altNames)); - } + List altNames = switch (this.altNames.size()) { + case 0 -> java.util.Collections.emptyList(); + case 1 -> java.util.Collections.singletonList(this.altNames.get(0)); + default -> java.util.Collections.unmodifiableList(new ArrayList<>(this.altNames)); + }; - List ipSubjectAltNames; - switch (this.ipSubjectAltNames.size()) { - case 0: - ipSubjectAltNames = java.util.Collections.emptyList(); - break; - case 1: - ipSubjectAltNames = java.util.Collections.singletonList(this.ipSubjectAltNames.get(0)); - break; - default: - ipSubjectAltNames = java.util.Collections.unmodifiableList(new ArrayList<>(this.ipSubjectAltNames)); - } + List ipSubjectAltNames = switch (this.ipSubjectAltNames.size()) { + case 0 -> java.util.Collections.emptyList(); + case 1 -> java.util.Collections.singletonList(this.ipSubjectAltNames.get(0)); + default -> java.util.Collections.unmodifiableList(new ArrayList<>(this.ipSubjectAltNames)); + }; - List uriSubjectAltNames; - switch (this.uriSubjectAltNames.size()) { - case 0: - uriSubjectAltNames = java.util.Collections.emptyList(); - break; - case 1: - uriSubjectAltNames = java.util.Collections.singletonList(this.uriSubjectAltNames.get(0)); - break; - default: - uriSubjectAltNames = java.util.Collections - .unmodifiableList(new ArrayList<>(this.uriSubjectAltNames)); - } + List uriSubjectAltNames = switch (this.uriSubjectAltNames.size()) { + case 0 -> java.util.Collections.emptyList(); + case 1 -> java.util.Collections.singletonList(this.uriSubjectAltNames.get(0)); + default -> java.util.Collections.unmodifiableList(new ArrayList<>(this.uriSubjectAltNames)); + }; - List otherSans; - switch (this.otherSans.size()) { - case 0: - otherSans = java.util.Collections.emptyList(); - break; - case 1: - otherSans = java.util.Collections.singletonList(this.otherSans.get(0)); - break; - default: - otherSans = java.util.Collections.unmodifiableList(new ArrayList<>(this.otherSans)); - } + List otherSans = switch (this.otherSans.size()) { + case 0 -> java.util.Collections.emptyList(); + case 1 -> java.util.Collections.singletonList(this.otherSans.get(0)); + default -> java.util.Collections.unmodifiableList(new ArrayList<>(this.otherSans)); + }; return new VaultCertificateRequest(this.commonName, this.excludeCommonNameFromSubjectAltNames, altNames, ipSubjectAltNames, uriSubjectAltNames, otherSans, this.ttl, notAfter, this.format, diff --git a/spring-vault-core/src/main/java/org/springframework/vault/support/VaultToken.java b/spring-vault-core/src/main/java/org/springframework/vault/support/VaultToken.java index 23888b5d..ff9ee64a 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/support/VaultToken.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/support/VaultToken.java @@ -78,9 +78,8 @@ public class VaultToken { public boolean equals(Object o) { if (this == o) return true; - if (!(o instanceof VaultToken)) + if (!(o instanceof VaultToken that)) return false; - VaultToken that = (VaultToken) o; return Arrays.equals(this.token, that.token); } diff --git a/spring-vault-core/src/main/java/org/springframework/vault/support/VaultTokenRequest.java b/spring-vault-core/src/main/java/org/springframework/vault/support/VaultTokenRequest.java index a2469df6..130a1555 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/support/VaultTokenRequest.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/support/VaultTokenRequest.java @@ -341,7 +341,7 @@ public class VaultTokenRequest { Assert.isTrue(ttl >= 0, "TTL must not be negative"); Assert.notNull(timeUnit, "TimeUnit must not be null"); - this.ttl = String.format("%ss", timeUnit.toSeconds(ttl)); + this.ttl = "%ss".formatted(timeUnit.toSeconds(ttl)); return this; } @@ -357,7 +357,7 @@ public class VaultTokenRequest { Assert.notNull(ttl, "TTL must not be null"); Assert.isTrue(!ttl.isNegative(), "TTL must not be negative"); - this.ttl = String.format("%ss", ttl.getSeconds()); + this.ttl = "%ss".formatted(ttl.getSeconds()); return this; } @@ -375,7 +375,7 @@ public class VaultTokenRequest { Assert.isTrue(explicitMaxTtl >= 0, "TTL must not be negative"); Assert.notNull(timeUnit, "TimeUnit must not be null"); - this.explicitMaxTtl = String.format("%ss", timeUnit.toSeconds(explicitMaxTtl)); + this.explicitMaxTtl = "%ss".formatted(timeUnit.toSeconds(explicitMaxTtl)); return this; } @@ -394,7 +394,7 @@ public class VaultTokenRequest { Assert.notNull(explicitMaxTtl, "Explicit max TTL must not be null"); Assert.isTrue(!explicitMaxTtl.isNegative(), "TTL must not be negative"); - this.explicitMaxTtl = String.format("%ss", explicitMaxTtl.getSeconds()); + this.explicitMaxTtl = "%ss".formatted(explicitMaxTtl.getSeconds()); return this; } diff --git a/spring-vault-core/src/main/java/org/springframework/vault/support/VaultTransformContext.java b/spring-vault-core/src/main/java/org/springframework/vault/support/VaultTransformContext.java index 01556675..9c9adce5 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/support/VaultTransformContext.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/support/VaultTransformContext.java @@ -19,7 +19,6 @@ import java.util.Arrays; import org.springframework.util.Assert; import org.springframework.util.ObjectUtils; -import org.springframework.util.StringUtils; /** * Transform backend encode/decode context object. @@ -103,9 +102,8 @@ public class VaultTransformContext { public boolean equals(Object o) { if (this == o) return true; - if (!(o instanceof VaultTransformContext)) + if (!(o instanceof VaultTransformContext that)) return false; - VaultTransformContext that = (VaultTransformContext) o; return this.transformation.equals(that.transformation) && Arrays.equals(this.tweak, that.tweak); } diff --git a/spring-vault-core/src/main/java/org/springframework/vault/support/VaultTransitContext.java b/spring-vault-core/src/main/java/org/springframework/vault/support/VaultTransitContext.java index 6ce781ba..016e7de3 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/support/VaultTransitContext.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/support/VaultTransitContext.java @@ -107,9 +107,8 @@ public class VaultTransitContext { public boolean equals(Object o) { if (this == o) return true; - if (!(o instanceof VaultTransitContext)) + if (!(o instanceof VaultTransitContext that)) return false; - VaultTransitContext that = (VaultTransitContext) o; return Arrays.equals(this.context, that.context) && Arrays.equals(this.nonce, that.nonce) && this.keyVersion == that.keyVersion; } diff --git a/spring-vault-core/src/main/java/org/springframework/vault/support/Versioned.java b/spring-vault-core/src/main/java/org/springframework/vault/support/Versioned.java index 37bd661f..f0e9497c 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/support/Versioned.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/support/Versioned.java @@ -200,9 +200,8 @@ public class Versioned { public boolean equals(Object o) { if (this == o) return true; - if (!(o instanceof Versioned)) + if (!(o instanceof Versioned versioned)) return false; - Versioned versioned = (Versioned) o; return Objects.equals(this.data, versioned.data) && Objects.equals(this.version, versioned.version) && Objects.equals(this.metadata, versioned.metadata); } @@ -488,7 +487,7 @@ public class Versioned { @Override public String toString() { - return String.format("Version[%d]", this.version); + return "Version[%d]".formatted(this.version); } } diff --git a/spring-vault-core/src/test/java/org/springframework/vault/authentication/AppRoleAuthenticationIntegrationTestBase.java b/spring-vault-core/src/test/java/org/springframework/vault/authentication/AppRoleAuthenticationIntegrationTestBase.java index 02d47554..d539a140 100644 --- a/spring-vault-core/src/test/java/org/springframework/vault/authentication/AppRoleAuthenticationIntegrationTestBase.java +++ b/spring-vault-core/src/test/java/org/springframework/vault/authentication/AppRoleAuthenticationIntegrationTestBase.java @@ -78,7 +78,7 @@ class AppRoleAuthenticationIntegrationTestBase extends IntegrationTestSupport { } String getRoleId(String roleName) { - return (String) getVaultOperations().read(String.format("auth/approle/role/%s/role-id", roleName)) + return (String) getVaultOperations().read("auth/approle/role/%s/role-id".formatted(roleName)) .getRequiredData() .get("role_id"); } diff --git a/spring-vault-core/src/test/java/org/springframework/vault/authentication/AppRoleAuthenticationIntegrationTests.java b/spring-vault-core/src/test/java/org/springframework/vault/authentication/AppRoleAuthenticationIntegrationTests.java index ddd6fa2c..d67cdc76 100644 --- a/spring-vault-core/src/test/java/org/springframework/vault/authentication/AppRoleAuthenticationIntegrationTests.java +++ b/spring-vault-core/src/test/java/org/springframework/vault/authentication/AppRoleAuthenticationIntegrationTests.java @@ -15,6 +15,8 @@ */ package org.springframework.vault.authentication; +import static org.assertj.core.api.Assertions.*; + import java.util.Collections; import org.junit.jupiter.api.Test; @@ -26,9 +28,6 @@ import org.springframework.vault.support.VaultResponse; import org.springframework.vault.support.VaultToken; import org.springframework.vault.util.Settings; -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatExceptionOfType; - /** * Integration tests for {@link AppRoleAuthentication}. * @@ -80,7 +79,7 @@ class AppRoleAuthenticationIntegrationTests extends AppRoleAuthenticationIntegra String roleId = getRoleId("with-secret-id"); String secretId = (String) getVaultOperations() - .write(String.format("auth/approle/role/%s/secret-id", "with-secret-id"), null) + .write("auth/approle/role/%s/secret-id".formatted("with-secret-id"), null) .getRequiredData() .get("secret_id"); diff --git a/spring-vault-core/src/test/java/org/springframework/vault/authentication/AppRoleAuthenticationStepsIntegrationTests.java b/spring-vault-core/src/test/java/org/springframework/vault/authentication/AppRoleAuthenticationStepsIntegrationTests.java index 09ac3e7d..0f5e7c06 100644 --- a/spring-vault-core/src/test/java/org/springframework/vault/authentication/AppRoleAuthenticationStepsIntegrationTests.java +++ b/spring-vault-core/src/test/java/org/springframework/vault/authentication/AppRoleAuthenticationStepsIntegrationTests.java @@ -15,6 +15,8 @@ */ package org.springframework.vault.authentication; +import static org.assertj.core.api.Assertions.*; + import java.util.Collections; import org.junit.jupiter.api.Test; @@ -26,9 +28,6 @@ import org.springframework.vault.support.VaultResponse; import org.springframework.vault.support.VaultToken; import org.springframework.vault.util.Settings; -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatExceptionOfType; - /** * Integration tests for {@link AppRoleAuthentication} using * {@link AuthenticationStepsExecutor}. @@ -74,7 +73,7 @@ class AppRoleAuthenticationStepsIntegrationTests extends AppRoleAuthenticationIn void authenticationStepsShouldAuthenticateWithWrappedRoleId() { String secretId = (String) getVaultOperations() - .write(String.format("auth/approle/role/%s/secret-id", "with-secret-id"), null) + .write("auth/approle/role/%s/secret-id".formatted("with-secret-id"), null) .getRequiredData() .get("secret_id"); @@ -128,7 +127,7 @@ class AppRoleAuthenticationStepsIntegrationTests extends AppRoleAuthenticationIn void authenticationStepsShouldAuthenticateWithPullRoleId() { String secretId = (String) getVaultOperations() - .write(String.format("auth/approle/role/%s/secret-id", "with-secret-id"), null) + .write("auth/approle/role/%s/secret-id".formatted("with-secret-id"), null) .getRequiredData() .get("secret_id"); diff --git a/spring-vault-core/src/test/java/org/springframework/vault/authentication/JwtAuthenticationIntegrationTest.java b/spring-vault-core/src/test/java/org/springframework/vault/authentication/JwtAuthenticationIntegrationTest.java index fea4e794..dfe49406 100644 --- a/spring-vault-core/src/test/java/org/springframework/vault/authentication/JwtAuthenticationIntegrationTest.java +++ b/spring-vault-core/src/test/java/org/springframework/vault/authentication/JwtAuthenticationIntegrationTest.java @@ -15,6 +15,9 @@ */ package org.springframework.vault.authentication; +import static org.assertj.core.api.Assertions.*; +import static org.springframework.vault.authentication.JwtAuthentication.*; + import java.security.KeyPair; import java.security.KeyPairGenerator; import java.time.Instant; @@ -38,10 +41,6 @@ import org.springframework.vault.util.Settings; import org.springframework.vault.util.TestRestTemplateFactory; import org.springframework.web.client.RestTemplate; -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatThrownBy; -import static org.springframework.vault.authentication.JwtAuthentication.DEFAULT_JWT_AUTHENTICATION_PATH; - /** * Integration tests for {@link KubernetesAuthentication} using * {@link AuthenticationStepsExecutor}. @@ -82,11 +81,11 @@ class JwtAuthenticationIntegrationTest extends IntegrationTestSupport { } private String encodePublicKey() { - return String.format(""" + return """ -----BEGIN PUBLIC KEY----- %s -----END PUBLIC KEY----- - """, Base64.getEncoder().encodeToString(keyPair.getPublic().getEncoded())); + """.formatted(Base64.getEncoder().encodeToString(keyPair.getPublic().getEncoded())); } private String createToken(String user) throws JOSEException { diff --git a/spring-vault-core/src/test/java/org/springframework/vault/authentication/KubernetesAuthenticationIntegrationTestBase.java b/spring-vault-core/src/test/java/org/springframework/vault/authentication/KubernetesAuthenticationIntegrationTestBase.java index 069ebe62..7e7adf1b 100644 --- a/spring-vault-core/src/test/java/org/springframework/vault/authentication/KubernetesAuthenticationIntegrationTestBase.java +++ b/spring-vault-core/src/test/java/org/springframework/vault/authentication/KubernetesAuthenticationIntegrationTestBase.java @@ -15,6 +15,9 @@ */ package org.springframework.vault.authentication; +import static org.junit.jupiter.api.Assumptions.*; +import static org.springframework.vault.util.Settings.*; + import java.io.File; import java.nio.charset.StandardCharsets; import java.util.HashMap; @@ -28,9 +31,6 @@ import org.springframework.vault.core.RestOperationsCallback; import org.springframework.vault.util.IntegrationTestSupport; import org.springframework.vault.util.RequiresVaultVersion; -import static org.junit.jupiter.api.Assumptions.assumeTrue; -import static org.springframework.vault.util.Settings.findWorkDir; - /** * Integration test base class for {@link KubernetesAuthentication} tests. * @@ -54,7 +54,7 @@ public abstract class KubernetesAuthenticationIntegrationTestBase extends Integr String certificate = Files.contentOf(new File(workDir, "minikube/ca.crt"), StandardCharsets.US_ASCII); - String host = String.format("https://%s:8443", minikubeIp); + String host = "https://%s:8443".formatted(minikubeIp); Map kubeConfig = new HashMap<>(); kubeConfig.put("kubernetes_ca_cert", certificate); diff --git a/spring-vault-core/src/test/java/org/springframework/vault/authentication/UsernamePasswordAuthenticationIntegrationTestBase.java b/spring-vault-core/src/test/java/org/springframework/vault/authentication/UsernamePasswordAuthenticationIntegrationTestBase.java index 6e155d13..cb8b5788 100644 --- a/spring-vault-core/src/test/java/org/springframework/vault/authentication/UsernamePasswordAuthenticationIntegrationTestBase.java +++ b/spring-vault-core/src/test/java/org/springframework/vault/authentication/UsernamePasswordAuthenticationIntegrationTestBase.java @@ -15,6 +15,10 @@ */ package org.springframework.vault.authentication; +import static java.util.Collections.*; +import static org.springframework.vault.authentication.UsernamePasswordAuthenticationOptions.*; +import static org.springframework.vault.support.Policy.BuiltinCapabilities.*; + import java.util.Map; import org.junit.jupiter.api.BeforeEach; @@ -22,10 +26,6 @@ import org.junit.jupiter.api.BeforeEach; import org.springframework.vault.support.Policy; import org.springframework.vault.util.IntegrationTestSupport; -import static java.util.Collections.*; -import static org.springframework.vault.authentication.UsernamePasswordAuthenticationOptions.*; -import static org.springframework.vault.support.Policy.BuiltinCapabilities.*; - /** * Integration test base class for {@link UsernamePasswordAuthentication} tests. * @@ -49,7 +49,7 @@ public abstract class UsernamePasswordAuthenticationIntegrationTestBase extends prepare().getVaultOperations().opsForSys().createOrUpdatePolicy(DEFAULT_USERPASS_AUTHENTICATION_PATH, POLICY); prepare().getVaultOperations() .doWithSession(restOperations -> restOperations.postForEntity( - String.format("auth/%s/users/%s", DEFAULT_USERPASS_AUTHENTICATION_PATH, username), + "auth/%s/users/%s".formatted(DEFAULT_USERPASS_AUTHENTICATION_PATH, username), singletonMap("password", password), Map.class)); } diff --git a/spring-vault-core/src/test/java/org/springframework/vault/core/VaultPkiTemplateIntegrationTests.java b/spring-vault-core/src/test/java/org/springframework/vault/core/VaultPkiTemplateIntegrationTests.java index 8f66ec96..e0696bc9 100644 --- a/spring-vault-core/src/test/java/org/springframework/vault/core/VaultPkiTemplateIntegrationTests.java +++ b/spring-vault-core/src/test/java/org/springframework/vault/core/VaultPkiTemplateIntegrationTests.java @@ -15,6 +15,9 @@ */ package org.springframework.vault.core; +import static org.assertj.core.api.Assertions.*; +import static org.springframework.vault.util.Settings.*; + import java.io.File; import java.io.InputStream; import java.math.BigInteger; @@ -59,11 +62,6 @@ import org.springframework.vault.util.RequiresVaultVersion; import org.springframework.vault.util.Version; import org.springframework.web.client.HttpClientErrorException; -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatExceptionOfType; -import static org.assertj.core.api.Assertions.assertThatThrownBy; -import static org.springframework.vault.util.Settings.findWorkDir; - /** * Integration tests for {@link VaultPkiTemplate} through {@link VaultPkiOperations}. * @@ -245,7 +243,7 @@ class VaultPkiTemplateIntegrationTests extends IntegrationTestSupport { @Override public String toString() { - return String.format("[%s, %s, %s]", this.format, this.privateKeyFormat, this.keyType); + return "[%s, %s, %s]".formatted(this.format, this.privateKeyFormat, this.keyType); } } diff --git a/spring-vault-core/src/test/java/org/springframework/vault/core/VaultTemplateTransformIntegrationTests.java b/spring-vault-core/src/test/java/org/springframework/vault/core/VaultTemplateTransformIntegrationTests.java index 5b0352c4..26fb2415 100644 --- a/spring-vault-core/src/test/java/org/springframework/vault/core/VaultTemplateTransformIntegrationTests.java +++ b/spring-vault-core/src/test/java/org/springframework/vault/core/VaultTemplateTransformIntegrationTests.java @@ -15,6 +15,10 @@ */ package org.springframework.vault.core; +import static org.assertj.core.api.Assertions.*; + +import java.util.Base64; + import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Assumptions; import org.junit.jupiter.api.BeforeEach; @@ -30,10 +34,6 @@ import org.springframework.vault.util.IntegrationTestSupport; import org.springframework.vault.util.RequiresVaultVersion; import org.springframework.vault.util.Version; -import static org.assertj.core.api.Assertions.assertThat; - -import java.util.Base64; - /** * Integration tests for {@link VaultTemplate} using the {@code transform} backend. * @@ -79,8 +79,8 @@ class VaultTemplateTransformIntegrationTests extends IntegrationTestSupport { void shouldEncode() { VaultResponse response = this.vaultOperations.write("transform/encode/myrole", - String.format("{\"value\": \"123-45-6789\", \"tweak\": \"%s\"}", - Base64.getEncoder().encodeToString("somenum".getBytes()))); + "{\"value\": \"123-45-6789\", \"tweak\": \"%s\"}" + .formatted(Base64.getEncoder().encodeToString("somenum".getBytes()))); assertThat((String) response.getRequiredData().get("encoded_value")).isNotEmpty(); } @@ -90,12 +90,12 @@ class VaultTemplateTransformIntegrationTests extends IntegrationTestSupport { String value = "123-45-6789"; VaultResponse response = this.vaultOperations.write("transform/encode/myrole", - String.format("{\"value\": \"%s\", \"tweak\": \"%s\"}", value, + "{\"value\": \"%s\", \"tweak\": \"%s\"}".formatted(value, Base64.getEncoder().encodeToString("somenum".getBytes()))); String encoded = (String) response.getRequiredData().get("encoded_value"); VaultResponse decoded = this.vaultOperations.write("transform/decode/myrole", - String.format("{\"value\": \"%s\", \"tweak\": \"%s\"}", encoded, + "{\"value\": \"%s\", \"tweak\": \"%s\"}".formatted(encoded, Base64.getEncoder().encodeToString("somenum".getBytes()))); assertThat((String) decoded.getRequiredData().get("decoded_value")).isEqualTo(value); diff --git a/spring-vault-core/src/test/java/org/springframework/vault/core/VaultWrappingTemplateIntegrationTests.java b/spring-vault-core/src/test/java/org/springframework/vault/core/VaultWrappingTemplateIntegrationTests.java index d890c336..af549fbe 100644 --- a/spring-vault-core/src/test/java/org/springframework/vault/core/VaultWrappingTemplateIntegrationTests.java +++ b/spring-vault-core/src/test/java/org/springframework/vault/core/VaultWrappingTemplateIntegrationTests.java @@ -15,6 +15,8 @@ */ package org.springframework.vault.core; +import static org.assertj.core.api.Assertions.*; + import java.time.Duration; import java.time.Instant; import java.util.Collections; @@ -36,9 +38,6 @@ import org.springframework.vault.support.WrappedMetadata; import org.springframework.vault.util.IntegrationTestSupport; import org.springframework.vault.util.RequiresVaultVersion; -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatExceptionOfType; - /** * Integration tests for {@link VaultWrappingTemplate} through * {@link VaultWrappingOperations}. @@ -149,30 +148,23 @@ class VaultWrappingTemplateIntegrationTests extends IntegrationTestSupport { .isThrownBy(() -> this.wrappingOperations.rewrap(VaultToken.of("foo"))); } - static final class Secret { - - private final String key; + record Secret(String key) { Secret(@JsonProperty("key") String key) { this.key = key; } - public String getKey() { - return this.key; - } - public String toString() { - return "VaultWrappingTemplateIntegrationTests.Secret(key=" + this.getKey() + ")"; + return "VaultWrappingTemplateIntegrationTests.Secret(key=" + this.key() + ")"; } public boolean equals(final Object o) { if (o == this) return true; - if (!(o instanceof Secret)) + if (!(o instanceof Secret other)) return false; - final Secret other = (Secret) o; - final Object this$key = this.getKey(); - final Object other$key = other.getKey(); + final Object this$key = this.key(); + final Object other$key = other.key(); if (this$key == null ? other$key != null : !this$key.equals(other$key)) return false; return true; @@ -181,7 +173,7 @@ class VaultWrappingTemplateIntegrationTests extends IntegrationTestSupport { public int hashCode() { final int PRIME = 59; int result = 1; - final Object $key = this.getKey(); + final Object $key = this.key(); result = result * PRIME + ($key == null ? 43 : $key.hashCode()); return result; } diff --git a/spring-vault-core/src/test/java/org/springframework/vault/domain/Person.java b/spring-vault-core/src/test/java/org/springframework/vault/domain/Person.java index 109ffdab..2b9d107d 100644 --- a/spring-vault-core/src/test/java/org/springframework/vault/domain/Person.java +++ b/spring-vault-core/src/test/java/org/springframework/vault/domain/Person.java @@ -69,9 +69,8 @@ public class Person { public boolean equals(Object o) { if (this == o) return true; - if (!(o instanceof Person)) + if (!(o instanceof Person person)) return false; - Person person = (Person) o; return Objects.equals(this.id, person.id) && Objects.equals(this.firstname, person.firstname) && Objects.equals(this.password, person.password); } diff --git a/spring-vault-core/src/test/java/org/springframework/vault/repository/VaultKv2RepositoryIntegrationTests.java b/spring-vault-core/src/test/java/org/springframework/vault/repository/VaultKv2RepositoryIntegrationTests.java index 119b7d74..9b7189fb 100644 --- a/spring-vault-core/src/test/java/org/springframework/vault/repository/VaultKv2RepositoryIntegrationTests.java +++ b/spring-vault-core/src/test/java/org/springframework/vault/repository/VaultKv2RepositoryIntegrationTests.java @@ -15,6 +15,8 @@ */ package org.springframework.vault.repository; +import static org.assertj.core.api.Assertions.*; + import java.util.Collections; import java.util.List; @@ -47,8 +49,6 @@ import org.springframework.vault.support.VaultMount; import org.springframework.vault.support.Versioned; import org.springframework.vault.util.IntegrationTestSupport; -import static org.assertj.core.api.Assertions.*; - /** * Integration tests for Vault repositories using KeyValue version 2. * @@ -300,10 +300,9 @@ class VaultKv2RepositoryIntegrationTests extends IntegrationTestSupport { if (this == o) { return true; } - if (!(o instanceof VersionedPerson)) { + if (!(o instanceof VersionedPerson that)) { return false; } - VersionedPerson that = (VersionedPerson) o; if (version != that.version) { return false; } @@ -363,10 +362,9 @@ class VaultKv2RepositoryIntegrationTests extends IntegrationTestSupport { if (this == o) { return true; } - if (!(o instanceof VersionedPerson)) { + if (!(o instanceof VersionedPerson that)) { return false; } - VersionedPerson that = (VersionedPerson) o; if (!ObjectUtils.nullSafeEquals(id, that.id)) { return false; } diff --git a/spring-vault-core/src/test/java/org/springframework/vault/repository/convert/MappingVaultConverterUnitTests.java b/spring-vault-core/src/test/java/org/springframework/vault/repository/convert/MappingVaultConverterUnitTests.java index 63a033d9..910e88ab 100644 --- a/spring-vault-core/src/test/java/org/springframework/vault/repository/convert/MappingVaultConverterUnitTests.java +++ b/spring-vault-core/src/test/java/org/springframework/vault/repository/convert/MappingVaultConverterUnitTests.java @@ -15,6 +15,8 @@ */ package org.springframework.vault.repository.convert; +import static org.assertj.core.api.Assertions.*; + import java.util.Arrays; import java.util.Collections; import java.util.LinkedHashMap; @@ -31,8 +33,6 @@ import org.springframework.data.annotation.Id; import org.springframework.data.annotation.Version; import org.springframework.vault.repository.mapping.VaultMappingContext; -import static org.assertj.core.api.Assertions.assertThat; - /** * Unit tests for {@link MappingVaultConverter}. * @@ -543,9 +543,8 @@ class MappingVaultConverterUnitTests { public boolean equals(Object o) { if (this == o) return true; - if (!(o instanceof NestedType)) + if (!(o instanceof NestedType that)) return false; - NestedType that = (NestedType) o; return Objects.equals(this.username, that.username) && Objects.equals(this.password, that.password); } diff --git a/spring-vault-core/src/test/java/org/springframework/vault/util/Settings.java b/spring-vault-core/src/test/java/org/springframework/vault/util/Settings.java index cebb7d08..918f71ef 100644 --- a/spring-vault-core/src/test/java/org/springframework/vault/util/Settings.java +++ b/spring-vault-core/src/test/java/org/springframework/vault/util/Settings.java @@ -68,8 +68,8 @@ public class Settings { searchLevel = searchLevel.getParentFile(); } - throw new IllegalStateException(String.format("Cannot find work directory in %s or any parent directories", - directory.getAbsoluteFile())); + throw new IllegalStateException( + "Cannot find work directory in %s or any parent directories".formatted(directory.getAbsoluteFile())); } /** diff --git a/spring-vault-core/src/test/java/org/springframework/vault/util/VaultInitializer.java b/spring-vault-core/src/test/java/org/springframework/vault/util/VaultInitializer.java index f58dcdff..fc8a6458 100644 --- a/spring-vault-core/src/test/java/org/springframework/vault/util/VaultInitializer.java +++ b/spring-vault-core/src/test/java/org/springframework/vault/util/VaultInitializer.java @@ -105,8 +105,8 @@ public class VaultInitializer { } catch (Exception ex) { throw new IllegalStateException( - String.format("Vault is not running on localhost:%d which is required to run a test using @Rule %s", - this.vaultEndpoint.getPort(), getClass().getSimpleName())); + "Vault is not running on localhost:%d which is required to run a test using @Rule %s" + .formatted(this.vaultEndpoint.getPort(), getClass().getSimpleName())); } } diff --git a/spring-vault-core/src/test/java/org/springframework/vault/util/VaultVersionExtension.java b/spring-vault-core/src/test/java/org/springframework/vault/util/VaultVersionExtension.java index ef2d047d..36f7c71b 100644 --- a/spring-vault-core/src/test/java/org/springframework/vault/util/VaultVersionExtension.java +++ b/spring-vault-core/src/test/java/org/springframework/vault/util/VaultVersionExtension.java @@ -66,13 +66,13 @@ class VaultVersionExtension implements ExecutionCondition { if (runningVersion.isGreaterThanOrEqualTo(requiredVersion)) { return ConditionEvaluationResult - .enabled(String.format("Test is enabled, @VaultVersion(%s) is met with Vault running version %s", - requiredVersion, runningVersion)); + .enabled("Test is enabled, @VaultVersion(%s) is met with Vault running version %s" + .formatted(requiredVersion, runningVersion)); } return ConditionEvaluationResult - .disabled(String.format("Test is disabled, @VaultVersion(%s) is not met with Vault running version %s", - requiredVersion, runningVersion)); + .disabled("Test is disabled, @VaultVersion(%s) is not met with Vault running version %s" + .formatted(requiredVersion, runningVersion)); } if (disabled.isPresent()) { @@ -80,14 +80,14 @@ class VaultVersionExtension implements ExecutionCondition { Version disabledVersion = Version.parse(disabled.get().value()); if (runningVersion.isGreaterThanOrEqualTo(disabledVersion)) { - return ConditionEvaluationResult.disabled(String.format( - "Test is disabled, @DisabledOnVaultVersion(%s) is met with Vault running version %s", - disabledVersion, runningVersion)); + return ConditionEvaluationResult + .disabled("Test is disabled, @DisabledOnVaultVersion(%s) is met with Vault running version %s" + .formatted(disabledVersion, runningVersion)); } - return ConditionEvaluationResult.enabled(String.format(String.format( - "Test is enabled, @DisabledOnVaultVersion(%s) is not met with Vault running version %s", - disabledVersion, runningVersion))); + return ConditionEvaluationResult + .enabled("Test is enabled, @DisabledOnVaultVersion(%s) is not met with Vault running version %s" + .formatted(disabledVersion, runningVersion)); } return ENABLED_BY_DEFAULT; diff --git a/spring-vault-core/src/test/java/org/springframework/vault/util/Version.java b/spring-vault-core/src/test/java/org/springframework/vault/util/Version.java index 245aec18..a5c973a9 100644 --- a/spring-vault-core/src/test/java/org/springframework/vault/util/Version.java +++ b/spring-vault-core/src/test/java/org/springframework/vault/util/Version.java @@ -85,7 +85,7 @@ public class Version implements Comparable { intParts[i] = Integer.parseInt(input); } catch (IllegalArgumentException o_O) { - throw new IllegalArgumentException(String.format(VERSION_PARSE_ERROR, input, version), o_O); + throw new IllegalArgumentException(VERSION_PARSE_ERROR.formatted(input, version), o_O); } } } @@ -201,9 +201,8 @@ public class Version implements Comparable { public boolean equals(Object o) { if (this == o) return true; - if (!(o instanceof Version)) + if (!(o instanceof Version version)) return false; - Version version = (Version) o; return this.major == version.major && this.minor == version.minor && this.bugfix == version.bugfix && this.build == version.build && this.enterprise == version.enterprise; }