aboutsummaryrefslogtreecommitdiffstats
path: root/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/DataplaneTokenSerializer.java
diff options
context:
space:
mode:
Diffstat (limited to 'controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/DataplaneTokenSerializer.java')
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/DataplaneTokenSerializer.java65
1 files changed, 65 insertions, 0 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/DataplaneTokenSerializer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/DataplaneTokenSerializer.java
new file mode 100644
index 00000000000..90be14fd349
--- /dev/null
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/DataplaneTokenSerializer.java
@@ -0,0 +1,65 @@
+// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.hosted.controller.persistence;
+
+import com.yahoo.slime.Cursor;
+import com.yahoo.slime.Slime;
+import com.yahoo.slime.SlimeUtils;
+import com.yahoo.vespa.hosted.controller.api.integration.dataplanetoken.DataplaneTokenVersions;
+import com.yahoo.vespa.hosted.controller.api.integration.dataplanetoken.FingerPrint;
+import com.yahoo.vespa.hosted.controller.api.integration.dataplanetoken.TokenId;
+
+import java.time.Instant;
+import java.util.List;
+
+/**
+ * @author mortent
+ */
+public class DataplaneTokenSerializer {
+
+ private static final String dataplaneTokenField = "dataplaneToken";
+ private static final String idField = "id";
+ private static final String tokenVersionsField = "tokenVersions";
+ private static final String fingerPrintField = "fingerPrint";
+ private static final String checkAccessHashField = "checkAccessHash";
+ private static final String creationTimeField = "creationTime";
+ private static final String authorField = "author";
+
+ public static Slime toSlime(List<DataplaneTokenVersions> dataplaneTokenVersions) {
+ Slime slime = new Slime();
+ Cursor cursor = slime.setObject();
+ Cursor array = cursor.setArray(dataplaneTokenField);
+ dataplaneTokenVersions.forEach(tokenMetadata -> {
+ Cursor tokenCursor = array.addObject();
+ tokenCursor.setString(idField, tokenMetadata.tokenId().value());
+ Cursor versionArray = tokenCursor.setArray(tokenVersionsField);
+ tokenMetadata.tokenVersions().forEach(version -> {
+ Cursor versionCursor = versionArray.addObject();
+ versionCursor.setString(fingerPrintField, version.fingerPrint().value());
+ versionCursor.setString(checkAccessHashField, version.checkAccessHash());
+ versionCursor.setLong(creationTimeField, version.creationTime().toEpochMilli());
+ versionCursor.setString(creationTimeField, version.creationTime().toString());
+ versionCursor.setString(authorField, version.author());
+ });
+ });
+ return slime;
+ }
+
+ public static List<DataplaneTokenVersions> fromSlime(Slime slime) {
+ Cursor cursor = slime.get();
+ return SlimeUtils.entriesStream(cursor.field(dataplaneTokenField))
+ .map(entry -> {
+ TokenId id = TokenId.of(entry.field(idField).asString());
+ List<DataplaneTokenVersions.Version> versions = SlimeUtils.entriesStream(entry.field(tokenVersionsField))
+ .map(versionCursor -> {
+ FingerPrint fingerPrint = FingerPrint.of(versionCursor.field(fingerPrintField).asString());
+ String checkAccessHash = versionCursor.field(checkAccessHashField).asString();
+ Instant creationTime = SlimeUtils.instant(versionCursor.field(creationTimeField));
+ String author = versionCursor.field(authorField).asString();
+ return new DataplaneTokenVersions.Version(fingerPrint, checkAccessHash, creationTime, author);
+ })
+ .toList();
+ return new DataplaneTokenVersions(id, versions);
+ })
+ .toList();
+ }
+}