aboutsummaryrefslogtreecommitdiffstats
path: root/security-utils/src/main/java/com/yahoo/security/tls/CapabilitySet.java
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@yahooinc.com>2023-02-06 13:54:38 +0100
committerBjørn Christian Seime <bjorncs@yahooinc.com>2023-02-09 15:18:43 +0100
commitf0f9cee55960f20c0daef33991d01e77abbc8f1c (patch)
tree0943bbd01629e3e214b0a16a0817884e00c25b82 /security-utils/src/main/java/com/yahoo/security/tls/CapabilitySet.java
parent78140894d89392f2ccac84b3fd4d23c83b1d1104 (diff)
Move definition of predefined capability set to parent class
Introduce functional interface ToCapabilitySet to simplify construction of second order capability sets.
Diffstat (limited to 'security-utils/src/main/java/com/yahoo/security/tls/CapabilitySet.java')
-rw-r--r--security-utils/src/main/java/com/yahoo/security/tls/CapabilitySet.java62
1 files changed, 34 insertions, 28 deletions
diff --git a/security-utils/src/main/java/com/yahoo/security/tls/CapabilitySet.java b/security-utils/src/main/java/com/yahoo/security/tls/CapabilitySet.java
index 7e6c7f394cd..70217665241 100644
--- a/security-utils/src/main/java/com/yahoo/security/tls/CapabilitySet.java
+++ b/security-utils/src/main/java/com/yahoo/security/tls/CapabilitySet.java
@@ -5,9 +5,10 @@ import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.EnumSet;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.Objects;
-import java.util.Optional;
import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;
@@ -16,31 +17,30 @@ import java.util.stream.Collectors;
/**
* @author bjorncs
*/
-public class CapabilitySet {
- public enum Predefined {
- CONTENT_NODE("vespa.content_node",
- Capability.CONTENT__STORAGE_API, Capability.CONTENT__DOCUMENT_API, Capability.SLOBROK__API),
- CONTAINER_NODE("vespa.container_node",
- Capability.CONTENT__DOCUMENT_API, Capability.CONTENT__SEARCH_API, Capability.SLOBROK__API),
- TELEMETRY("vespa.telemetry",
- Capability.CONTENT__STATUS_PAGES, Capability.CONTENT__METRICS_API),
- CLUSTER_CONTROLLER_NODE("vespa.cluster_controller_node",
- Capability.CONTENT__CLUSTER_CONTROLLER__INTERNAL_STATE_API, Capability.SLOBROK__API),
- CONFIG_SERVER("vespa.config_server"),
- ;
-
- private final String name;
- private final CapabilitySet set;
-
- Predefined(String name, Capability... caps) {
- this.name = name;
- this.set = caps.length == 0 ? CapabilitySet.none() : CapabilitySet.from(caps); }
-
- public static Optional<Predefined> fromName(String name) {
- return Arrays.stream(values()).filter(p -> p.name.equals(name)).findAny();
- }
-
- public CapabilitySet capabilities() { return set; }
+public class CapabilitySet implements ToCapabilitySet {
+
+ private static final Map<String, CapabilitySet> PREDEFINED = new HashMap<>();
+
+ /* Predefined capability sets */
+ public static final CapabilitySet CONTENT_NODE = predefined(
+ "vespa.content_node",
+ Capability.CONTENT__STORAGE_API, Capability.CONTENT__DOCUMENT_API, Capability.SLOBROK__API);
+ public static final CapabilitySet CONTAINER_NODE = predefined(
+ "vespa.container_node",
+ Capability.CONTENT__DOCUMENT_API, Capability.CONTENT__SEARCH_API, Capability.SLOBROK__API);
+ public static final CapabilitySet TELEMETRY = predefined(
+ "vespa.telemetry",
+ Capability.CONTENT__STATUS_PAGES, Capability.CONTENT__METRICS_API);
+ public static final CapabilitySet CLUSTER_CONTROLLER_NODE = predefined(
+ "vespa.cluster_controller_node",
+ Capability.CONTENT__CLUSTER_CONTROLLER__INTERNAL_STATE_API, Capability.SLOBROK__API);
+ public static final CapabilitySet CONFIG_SERVER = predefined(
+ "vespa.config_server");
+
+ private static CapabilitySet predefined(String name, ToCapabilitySet... capabilities) {
+ var instance = CapabilitySet.from(capabilities);
+ PREDEFINED.put(name, instance);
+ return instance;
}
private static final CapabilitySet ALL_CAPABILITIES = new CapabilitySet(EnumSet.allOf(Capability.class));
@@ -50,11 +50,13 @@ public class CapabilitySet {
private CapabilitySet(EnumSet<Capability> caps) { this.caps = caps; }
+ @Override public CapabilitySet toCapabilitySet() { return this; }
+
public static CapabilitySet fromNames(Collection<String> names) {
EnumSet<Capability> caps = EnumSet.noneOf(Capability.class);
for (String name : names) {
- Predefined predefined = Predefined.fromName(name).orElse(null);
- if (predefined != null) caps.addAll(predefined.set.caps);
+ var predefined = PREDEFINED.get(name);
+ if (predefined != null) caps.addAll(predefined.caps);
else caps.add(Capability.fromName(name));
}
return new CapabilitySet(caps);
@@ -66,6 +68,10 @@ public class CapabilitySet {
return new CapabilitySet(union);
}
+ public static CapabilitySet from(ToCapabilitySet... capabilities) {
+ return CapabilitySet.unionOf(Arrays.stream(capabilities).map(ToCapabilitySet::toCapabilitySet).toList());
+ }
+
public static CapabilitySet from(EnumSet<Capability> caps) { return new CapabilitySet(EnumSet.copyOf(caps)); }
public static CapabilitySet from(Collection<Capability> caps) { return new CapabilitySet(EnumSet.copyOf(caps)); }
public static CapabilitySet from(Capability... caps) { return new CapabilitySet(EnumSet.copyOf(List.of(caps))); }