diff --git a/spring-vault-core/src/main/java/org/springframework/vault/core/VaultOperations.java b/spring-vault-core/src/main/java/org/springframework/vault/core/VaultOperations.java
index eebe7440..227c7413 100644
--- a/spring-vault-core/src/main/java/org/springframework/vault/core/VaultOperations.java
+++ b/spring-vault-core/src/main/java/org/springframework/vault/core/VaultOperations.java
@@ -34,6 +34,7 @@ import org.springframework.web.client.RestClientException;
* the {@link #doWithVault(RestOperationsCallback) without a session}.
*
* @author Mark Paluch
+ * @author Lauren Voswinkel
* @see #doWithSession(RestOperationsCallback)
* @see #doWithVault(RestOperationsCallback)
* @see org.springframework.web.client.RestOperations
diff --git a/spring-vault-core/src/main/java/org/springframework/vault/core/VaultTransformOperations.java b/spring-vault-core/src/main/java/org/springframework/vault/core/VaultTransformOperations.java
index 79f240af..37b665c5 100644
--- a/spring-vault-core/src/main/java/org/springframework/vault/core/VaultTransformOperations.java
+++ b/spring-vault-core/src/main/java/org/springframework/vault/core/VaultTransformOperations.java
@@ -15,21 +15,29 @@
*/
package org.springframework.vault.core;
-import org.springframework.vault.support.*;
-
import java.util.List;
+import org.springframework.vault.support.Ciphertext;
+import org.springframework.vault.support.Plaintext;
+import org.springframework.vault.support.TransformCiphertext;
+import org.springframework.vault.support.TransformPlaintext;
+import org.springframework.vault.support.VaultTransformContext;
+import org.springframework.vault.support.VaultTransformDecodeResult;
+import org.springframework.vault.support.VaultTransformEncodeResult;
+
/**
* Interface that specifies operations using the {@code transform} backend.
*
* @author Lauren Voswinkel
+ * @author Mark Paluch
+ * @since 2.3
* @see Transform
* Secrets Engine
- * @since 2.3
*/
public interface VaultTransformOperations {
+
/**
- * Encodes the provided plaintext using the named role.
+ * Encode the provided plaintext using the named role.
* @param roleName must not be empty or {@literal null}.
* @param plaintext must not be empty or {@literal null}.
* @return cipher text.
@@ -37,7 +45,7 @@ public interface VaultTransformOperations {
String encode(String roleName, String plaintext);
/**
- * Encodes the provided plaintext using the named role.
+ * Encode the provided plaintext using the named role.
* @param roleName must not be empty or {@literal null}.
* @param plaintext must not be {@literal null}.
* @return cipher text.
@@ -45,14 +53,16 @@ public interface VaultTransformOperations {
TransformCiphertext encode(String roleName, TransformPlaintext plaintext);
/**
- * Encodes the provided plaintext using the named role.
+ * Encode the provided plaintext using the named role.
* @param roleName must not be empty or {@literal null}.
* @param plaintext must not be empty or {@literal null}.
* @param transformRequest must not be {@literal null}. Use
* {@link VaultTransformContext#empty()} if no request options provided.
* @return cipher text.
*/
- String encode(String roleName, byte[] plaintext, VaultTransformContext transformRequest);
+ default TransformCiphertext encode(String roleName, byte[] plaintext, VaultTransformContext transformRequest) {
+ return encode(roleName, TransformPlaintext.of(plaintext).with(transformRequest));
+ }
/**
* Encode the provided batch of plaintext using the role given and transformation in
@@ -71,7 +81,9 @@ public interface VaultTransformOperations {
* @param ciphertext must not be empty or {@literal null}.
* @return plain text.
*/
- String decode(String roleName, String ciphertext);
+ default String decode(String roleName, String ciphertext) {
+ return decode(roleName, TransformCiphertext.of(ciphertext)).asString();
+ }
/**
* Decode the provided ciphertext using the named role.
@@ -101,4 +113,5 @@ public interface VaultTransformOperations {
* @return the decrypted result in the order of {@code batchRequest} ciphertexts.
*/
List decode(String roleName, List batchRequest);
+
}
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 feab723c..406a8ed9 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
@@ -15,20 +15,29 @@
*/
package org.springframework.vault.core;
-import org.springframework.lang.Nullable;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
import org.springframework.util.Assert;
import org.springframework.util.Base64Utils;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import org.springframework.vault.VaultException;
-import org.springframework.vault.support.*;
-
-import java.util.*;
+import org.springframework.vault.support.TransformCiphertext;
+import org.springframework.vault.support.TransformPlaintext;
+import org.springframework.vault.support.VaultResponse;
+import org.springframework.vault.support.VaultTransformContext;
+import org.springframework.vault.support.VaultTransformDecodeResult;
+import org.springframework.vault.support.VaultTransformEncodeResult;
/**
* Default implementation of {@link VaultTransformOperations}.
*
* @author Lauren Voswinkel
+ * @author Mark Paluch
* @since 2.3
*/
public class VaultTransformTemplate implements VaultTransformOperations {
@@ -72,27 +81,16 @@ public class VaultTransformTemplate implements VaultTransformOperations {
Assert.hasText(roleName, "Role name must not be empty");
Assert.notNull(plaintext, "Plaintext must not be null");
- String ciphertext = encode(roleName, plaintext.getPlaintext(), plaintext.getContext());
-
- return toCiphertext(ciphertext, plaintext.getContext());
- }
-
- @Override
- public String encode(String roleName, byte[] plaintext, VaultTransformContext transformContext) {
-
- Assert.hasText(roleName, "Role name must not be empty");
- Assert.notNull(plaintext, "Plaintext must not be null");
- Assert.notNull(transformContext, "VaultTransformContext must not be null");
-
Map request = new LinkedHashMap<>();
- String value = new String(plaintext);
- request.put("value", value);
+ request.put("value", plaintext.asString());
- applyTransformOptions(transformContext, request);
+ applyTransformOptions(plaintext.getContext(), request);
- return (String) this.vaultOperations.write(String.format("%s/encode/%s", this.path, roleName), request)
- .getRequiredData().get("encoded_value");
+ Map data = this.vaultOperations
+ .write(String.format("%s/encode/%s", this.path, roleName), request).getRequiredData();
+
+ return toCiphertext(data, plaintext.getContext());
}
@Override
@@ -109,9 +107,7 @@ public class VaultTransformTemplate implements VaultTransformOperations {
vaultRequest.put("value", request.asString());
- if (request.getContext() != null) {
- applyTransformOptions(request.getContext(), vaultRequest);
- }
+ applyTransformOptions(request.getContext(), vaultRequest);
batch.add(vaultRequest);
}
@@ -122,22 +118,6 @@ public class VaultTransformTemplate implements VaultTransformOperations {
return toEncodedResults(vaultResponse, batchRequest);
}
- @Override
- public String decode(String roleName, String ciphertext) {
-
- Assert.hasText(roleName, "Key name must not be empty");
- Assert.hasText(ciphertext, "Ciphertext must not be empty");
-
- Map request = new LinkedHashMap<>();
-
- request.put("value", ciphertext);
-
- String plaintext = (String) this.vaultOperations
- .write(String.format("%s/decode/%s", this.path, roleName), request).getRequiredData().get("decoded_value");
-
- return new String(plaintext);
- }
-
@Override
public TransformPlaintext decode(String roleName, TransformCiphertext ciphertext) {
@@ -162,10 +142,8 @@ public class VaultTransformTemplate implements VaultTransformOperations {
applyTransformOptions(transformContext, request);
- String plaintext = (String) this.vaultOperations
- .write(String.format("%s/decode/%s", this.path, roleName), request).getRequiredData().get("decoded_value");
-
- return plaintext;
+ return (String) this.vaultOperations.write(String.format("%s/decode/%s", this.path, roleName), request)
+ .getRequiredData().get("decoded_value");
}
@Override
@@ -181,10 +159,7 @@ public class VaultTransformTemplate implements VaultTransformOperations {
Map vaultRequest = new LinkedHashMap<>(2);
vaultRequest.put("value", request.getCiphertext());
-
- if (request.getContext() != null) {
- applyTransformOptions(request.getContext(), vaultRequest);
- }
+ applyTransformOptions(request.getContext(), vaultRequest);
batch.add(vaultRequest);
}
@@ -207,7 +182,7 @@ public class VaultTransformTemplate implements VaultTransformOperations {
}
private static List toEncodedResults(VaultResponse vaultResponse,
- List batchRequest) {
+ List batchRequest) {
List result = new ArrayList<>(batchRequest.size());
List