Polishing.

Introduce convenience methods for Policy and VaultEndpoint creation.

See gh-816
This commit is contained in:
Mark Paluch
2023-09-21 12:05:26 +02:00
parent 03a114b538
commit c9a2deceb7
3 changed files with 37 additions and 13 deletions

View File

@@ -75,6 +75,18 @@ public class VaultEndpoint implements Serializable {
return vaultEndpoint;
}
/**
* Create a {@link VaultEndpoint} given a {@link String URI}.
* @param uri must contain hostname, port and scheme, must not be empty or
* {@literal null}.
* @return a new {@link VaultEndpoint}.
* @see #from(URI)
* @since 3.1
*/
public static VaultEndpoint from(String uri) {
return from(URI.create(uri));
}
/**
* Create a {@link VaultEndpoint} given a {@link URI}.
* @param uri must contain hostname, port and scheme, must not be empty or

View File

@@ -19,6 +19,7 @@ import java.io.IOException;
import java.time.Duration;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
@@ -59,9 +60,9 @@ import org.springframework.vault.support.Policy.PolicySerializer;
* {@link Policy} support JSON serialization and deserialization using Jackson.
*
* @author Mark Paluch
* @since 2.0
* @see Rule
* @see com.fasterxml.jackson.databind.ObjectMapper
* @since 2.0
*/
@JsonSerialize(using = PolicySerializer.class)
@JsonDeserialize(using = PolicyDeserializer.class)
@@ -356,7 +357,7 @@ public class Policy {
}
/**
* Configure capabilities. apabilities are added when calling this method and
* Configure capabilities. Capabilities are added when calling this method and
* do not replace already configured capabilities.
* @param capabilities must not be {@literal null}.
* @return {@code this} {@link RuleBuilder}.
@@ -369,6 +370,25 @@ public class Policy {
return capabilities(Arrays.asList(capabilities));
}
/**
* Configure capabilities. Capabilities are added when calling this method and
* do not replace already configured capabilities.
* @param capabilities must not be {@literal null}.
* @return {@code this} {@link RuleBuilder}.
* @since 3.1
*/
public RuleBuilder capabilities(Collection<? extends Capability> capabilities) {
Assert.notNull(capabilities, "Capabilities must not be null");
Assert.noNullElements(capabilities, "Capabilities must not contain null elements");
for (Capability capability : capabilities) {
this.capabilities.add(capability);
}
return this;
}
/**
* Configure capabilities represented as {@link String} literals. This method
* resolves capabilities using {@link BuiltinCapabilities}. Capabilities are
@@ -397,15 +417,6 @@ public class Policy {
return capabilities(mapped);
}
private RuleBuilder capabilities(Iterable<Capability> capabilities) {
for (Capability capability : capabilities) {
this.capabilities.add(capability);
}
return this;
}
/**
* Configure a min TTL for response wrapping.
* @param ttl must not be {@literal null}.
@@ -749,7 +760,9 @@ public class Policy {
static class StringToDurationConverter implements Converter<String, Duration> {
static Pattern SECONDS = Pattern.compile("(\\d+)s");
static Pattern MINUTES = Pattern.compile("(\\d+)m");
static Pattern HOURS = Pattern.compile("(\\d+)h");
@Override

View File

@@ -81,8 +81,7 @@ class TokenExpiryRotatingSecretsIntegrationTests extends IntegrationTestSupport
VaultOperations vaultOperations = prepare.getVaultOperations();
Policy policy = Policy
.of(Rule.builder().capabilities(BuiltinCapabilities.crud().toArray(new Capability[0])).path("/*").build());
Policy policy = Policy.of(Rule.builder().capabilities(BuiltinCapabilities.crud()).path("/*").build());
vaultOperations.opsForSys().createOrUpdatePolicy("TokenExpiryRotatingSecretsIntegrationTests", policy);
vaultOperations.write("auth/userpass/users/token-expiry", Map.of("password", "token-expiry", "token_ttl", 8,