summaryrefslogtreecommitdiffstats
path: root/controller-server
diff options
context:
space:
mode:
authorandreer <andreer@verizonmedia.com>2020-02-05 17:55:44 +0100
committerandreer <andreer@verizonmedia.com>2020-02-05 17:59:37 +0100
commitff007f2c92962583c824d105c023e7fd918410fa (patch)
treeff9e02ca2995c5456ba2a778d533904dc4ed53e5 /controller-server
parentfde5808fdecd1f08afbca417bcaccd65105f8e2f (diff)
read request_id from cameo response and store in ZK (store SANs too)
Diffstat (limited to 'controller-server')
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/EndpointCertificateMetadataSerializer.java32
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/EndpointCertificateMetadataSerializerTest.java53
2 files changed, 82 insertions, 3 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/EndpointCertificateMetadataSerializer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/EndpointCertificateMetadataSerializer.java
index 702234b7634..8537118d309 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/EndpointCertificateMetadataSerializer.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/EndpointCertificateMetadataSerializer.java
@@ -6,6 +6,11 @@ import com.yahoo.slime.Slime;
import com.yahoo.vespa.config.SlimeUtils;
import com.yahoo.vespa.hosted.controller.api.integration.certificates.EndpointCertificateMetadata;
+import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
+
/**
* (de)serializes endpoint certificate metadata
* <p>
@@ -26,6 +31,8 @@ public class EndpointCertificateMetadataSerializer {
private final static String keyNameField = "keyName";
private final static String certNameField = "certName";
private final static String versionField = "version";
+ private final static String requestIdField = "requestId";
+ private final static String requestedDnsSansField = "requestedDnsSans";
public static Slime toSlime(EndpointCertificateMetadata metadata) {
Slime slime = new Slime();
@@ -33,6 +40,13 @@ public class EndpointCertificateMetadataSerializer {
object.setString(keyNameField, metadata.keyName());
object.setString(certNameField, metadata.certName());
object.setLong(versionField, metadata.version());
+
+ metadata.request_id().ifPresent(id -> object.setString(requestIdField, id));
+ metadata.requestedDnsSans().ifPresent(sans -> {
+ Cursor cursor = object.setArray(requestedDnsSansField);
+ sans.forEach(cursor::addString);
+ });
+
return slime;
}
@@ -44,12 +58,24 @@ public class EndpointCertificateMetadataSerializer {
inspector.asString() + "-cert",
0
);
- case OBJECT:
+ case OBJECT: {
+ Optional<String> request_id = inspector.field(requestIdField).valid() ?
+ Optional.of(inspector.field(requestIdField).asString()) :
+ Optional.empty();
+
+ Optional<List<String>> requestedDnsSans = inspector.field(requestedDnsSansField).valid() ?
+ Optional.of(IntStream.range(0, inspector.field(requestedDnsSansField).entries())
+ .mapToObj(i -> inspector.field(requestedDnsSansField).entry(i).asString()).collect(Collectors.toList())) :
+ Optional.empty();
+
return new EndpointCertificateMetadata(
inspector.field(keyNameField).asString(),
inspector.field(certNameField).asString(),
- Math.toIntExact(inspector.field(versionField).asLong())
+ Math.toIntExact(inspector.field(versionField).asLong()),
+ request_id,
+ requestedDnsSans
);
+ }
default:
throw new IllegalArgumentException("Unknown format encountered for endpoint certificate metadata!");
@@ -61,7 +87,7 @@ public class EndpointCertificateMetadataSerializer {
}
public static EndpointCertificateMetadata fromJsonOrTlsSecretsKeysString(String zkdata) {
- if(zkdata.strip().startsWith("{")) {
+ if (zkdata.strip().startsWith("{")) {
return fromSlime(SlimeUtils.jsonToSlime(zkdata).get());
} else {
return fromTlsSecretsKeysString(zkdata);
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/EndpointCertificateMetadataSerializerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/EndpointCertificateMetadataSerializerTest.java
new file mode 100644
index 00000000000..7428b9901a2
--- /dev/null
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/EndpointCertificateMetadataSerializerTest.java
@@ -0,0 +1,53 @@
+package com.yahoo.vespa.hosted.controller.persistence;
+
+import com.yahoo.vespa.hosted.controller.api.integration.certificates.EndpointCertificateMetadata;
+import org.junit.Test;
+
+import java.util.List;
+
+import static org.junit.Assert.*;
+
+public class EndpointCertificateMetadataSerializerTest {
+
+ private EndpointCertificateMetadata sample =
+ new EndpointCertificateMetadata("keyName", "certName", 1);
+ private EndpointCertificateMetadata sampleWithRequestMetadata =
+ new EndpointCertificateMetadata("keyName", "certName", 1, "requestId", List.of("SAN1", "SAN2"));
+
+ @Test
+ public void serialize() {
+ assertEquals(
+ "{\"keyName\":\"keyName\",\"certName\":\"certName\",\"version\":1}",
+ EndpointCertificateMetadataSerializer.toSlime(sample).toString());
+ }
+
+ @Test
+ public void serializeWithRequestMetadata() {
+ assertEquals(
+ "{\"keyName\":\"keyName\",\"certName\":\"certName\",\"version\":1,\"requestId\":\"requestId\",\"requestedDnsSans\":[\"SAN1\",\"SAN2\"]}",
+ EndpointCertificateMetadataSerializer.toSlime(sampleWithRequestMetadata).toString());
+ }
+
+ @Test
+ public void deserializeFromString() {
+ assertEquals(
+ new EndpointCertificateMetadata("foo-key", "foo-cert", 0),
+ EndpointCertificateMetadataSerializer.fromJsonOrTlsSecretsKeysString("foo"));
+ }
+
+ @Test
+ public void deserializeFromJson() {
+ assertEquals(
+ sample,
+ EndpointCertificateMetadataSerializer.fromJsonOrTlsSecretsKeysString(
+ "{\"keyName\":\"keyName\",\"certName\":\"certName\",\"version\":1}"));
+ }
+
+ @Test
+ public void deserializeFromJsonWithRequestMetadata() {
+ assertEquals(
+ sampleWithRequestMetadata,
+ EndpointCertificateMetadataSerializer.fromJsonOrTlsSecretsKeysString(
+ "{\"keyName\":\"keyName\",\"certName\":\"certName\",\"version\":1,\"requestId\":\"requestId\",\"requestedDnsSans\":[\"SAN1\",\"SAN2\"]}"));
+ }
+} \ No newline at end of file