diff --git a/build.gradle b/build.gradle index 0777cc89..c347044b 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ apply plugin: 'signing' group 'com.bettercloud' archivesBaseName = 'vault-java-driver' -version '3.1.0' +version '3.2.0' ext.isReleaseVersion = !version.endsWith('SNAPSHOT') compileJava { @@ -177,4 +177,3 @@ uploadArchives { } } } - diff --git a/src/main/java/com/bettercloud/vault/api/Logical.java b/src/main/java/com/bettercloud/vault/api/Logical.java index 9c45f4c8..20e66997 100644 --- a/src/main/java/com/bettercloud/vault/api/Logical.java +++ b/src/main/java/com/bettercloud/vault/api/Logical.java @@ -47,10 +47,14 @@ public Logical(final VaultConfig config) { * @throws VaultException If any errors occurs with the REST request (e.g. non-200 status code, invalid JSON payload, etc), and the maximum number of retries is exceeded. */ public LogicalResponse read(final String path) throws VaultException { - return read(path, true); + return read(path, true, true); } public LogicalResponse read(final String path, boolean shouldRetry) throws VaultException { + return read(path, shouldRetry, true); + } + + public LogicalResponse read(final String path, boolean shouldRetry, boolean isNested) throws VaultException { int retryCount = 0; while (true) { try { @@ -70,7 +74,7 @@ public LogicalResponse read(final String path, boolean shouldRetry) throws Vault + "\nResponse body: " + new String(restResponse.getBody(), "UTF-8"), restResponse.getStatus()); } - return new LogicalResponse(restResponse, retryCount); + return new LogicalResponse(restResponse, retryCount, isNested); } catch (RuntimeException | VaultException | RestException | UnsupportedEncodingException e) { if(shouldRetry == false) throw new VaultException(e); @@ -143,6 +147,9 @@ public LogicalResponse write(final String path, final Map nameVa } } + // nesting data + requestJson = Json.object().add("data", requestJson); + final RestResponse restResponse = new Rest()//NOPMD .url(config.getAddress() + "/v1/" + path) .body(requestJson.toString().getBytes("UTF-8")) @@ -198,7 +205,7 @@ public List list(final String path) throws VaultException { final String fullPath = path == null ? "list=true" : path + "?list=true"; LogicalResponse response = null; try { - response = read(fullPath); + response = read(fullPath, true, false); } catch (final VaultException e) { if (e.getHttpStatusCode() != 404) { throw e; diff --git a/src/main/java/com/bettercloud/vault/response/LogicalResponse.java b/src/main/java/com/bettercloud/vault/response/LogicalResponse.java index c3e361b7..13bbee13 100644 --- a/src/main/java/com/bettercloud/vault/response/LogicalResponse.java +++ b/src/main/java/com/bettercloud/vault/response/LogicalResponse.java @@ -24,9 +24,13 @@ public class LogicalResponse extends VaultResponse { * @param retries The number of retry attempts that occurred during the API call (can be zero). */ public LogicalResponse(final RestResponse restResponse, final int retries) { + this(restResponse, retries, false); + } + + public LogicalResponse(final RestResponse restResponse, final int retries, boolean isNested) { super(restResponse, retries); parseMetadataFields(); - parseResponseData(); + parseResponseData(isNested); } public Map getData() { @@ -57,11 +61,18 @@ private void parseMetadataFields() { } } - private void parseResponseData() { + private void parseResponseData(boolean isNested) { try { final String jsonString = new String(getRestResponse().getBody(), "UTF-8"); - final JsonObject jsonObject = Json.parse(jsonString).asObject(); + JsonObject jsonObject = Json.parse(jsonString).asObject(); + + // get to nested data data = new HashMap<>(); + + if(isNested) { + jsonObject = jsonObject.get("data").asObject(); + } + for (final JsonObject.Member member : jsonObject.get("data").asObject()) { final JsonValue jsonValue = member.getValue(); if (jsonValue == null || jsonValue.isNull()) { diff --git a/src/test-integration/java/com/bettercloud/vault/api/AuthBackendAppRoleTests.java b/src/test-integration/java/com/bettercloud/vault/api/AuthBackendAppRoleTests.java index a8cb46b6..a4e43909 100644 --- a/src/test-integration/java/com/bettercloud/vault/api/AuthBackendAppRoleTests.java +++ b/src/test-integration/java/com/bettercloud/vault/api/AuthBackendAppRoleTests.java @@ -29,7 +29,7 @@ public static void setupClass() throws IOException, InterruptedException, VaultE final Vault vault = container.getRootVault(); - final LogicalResponse roleIdResponse = vault.logical().read("auth/approle/role/testrole/role-id"); + final LogicalResponse roleIdResponse = vault.logical().read("auth/approle/role/testrole/role-id", false, false); appRoleId = roleIdResponse.getData().get("role_id"); final LogicalResponse secretIdResponse = vault.logical().write("auth/approle/role/testrole/secret-id", null); secretId = secretIdResponse.getData().get("secret_id"); diff --git a/src/test/java/com/bettercloud/vault/RetryTests.java b/src/test/java/com/bettercloud/vault/RetryTests.java index 2197e0d9..ab081d6f 100644 --- a/src/test/java/com/bettercloud/vault/RetryTests.java +++ b/src/test/java/com/bettercloud/vault/RetryTests.java @@ -19,7 +19,7 @@ public class RetryTests { @Test public void testRetries_Read() throws Exception { - final RetriesMockVault retriesMockVault = new RetriesMockVault(5, 200, "{\"lease_id\":\"12345\",\"renewable\":false,\"lease_duration\":10000,\"data\":{\"value\":\"mock\"}}"); + final RetriesMockVault retriesMockVault = new RetriesMockVault(5, 200, "{\"lease_id\":\"12345\",\"renewable\":false,\"lease_duration\":10000,\"data\":{\"data\":{\"value\":\"mock\"}}}"); final Server server = VaultTestUtils.initHttpMockVault(retriesMockVault); server.start(); diff --git a/src/test/java/com/bettercloud/vault/SSLTests.java b/src/test/java/com/bettercloud/vault/SSLTests.java index 13130030..642a3976 100644 --- a/src/test/java/com/bettercloud/vault/SSLTests.java +++ b/src/test/java/com/bettercloud/vault/SSLTests.java @@ -24,7 +24,7 @@ public class SSLTests { @Test public void testSslVerify_Enabled_Get() throws Exception { - final MockVault mockVault = new MockVault(200, "{\"data\":{\"value\":\"mock\"}}"); + final MockVault mockVault = new MockVault(200, "{\"data\":{\"data\":{\"value\":\"mock\"}}}"); final Server server = VaultTestUtils.initHttpsMockVault(mockVault); server.start(); @@ -44,7 +44,7 @@ public void testSslVerify_Enabled_Get() throws Exception { @Test(expected = VaultException.class) public void testSslVerify_Disabled_Get() throws Exception { - final MockVault mockVault = new MockVault(200, "{\"data\":{\"value\":\"mock\"}}"); + final MockVault mockVault = new MockVault(200, "{\"data\":{\"data\":{\"value\":\"mock\"}}}"); final Server server = VaultTestUtils.initHttpsMockVault(mockVault); server.start(); @@ -99,7 +99,7 @@ public void testSslVerify_Disabled_Post() throws Exception { @Test public void testSslPem_File() throws Exception { - final MockVault mockVault = new MockVault(200, "{\"data\":{\"value\":\"mock\"}}"); + final MockVault mockVault = new MockVault(200, "{\"data\":{\"data\":{\"value\":\"mock\"}}}"); final Server server = VaultTestUtils.initHttpsMockVault(mockVault); server.start(); @@ -127,7 +127,7 @@ public void testSslPem_File() throws Exception { @Test public void testSslPem_Resource_Get() throws Exception { - final MockVault mockVault = new MockVault(200, "{\"data\":{\"value\":\"mock\"}}"); + final MockVault mockVault = new MockVault(200, "{\"data\":{\"data\":{\"value\":\"mock\"}}}"); final Server server = VaultTestUtils.initHttpsMockVault(mockVault); server.start(); @@ -162,7 +162,7 @@ public void testSslPem_Resource_Post() throws Exception { @Test public void testSslPem_UTF8() throws Exception { - final MockVault mockVault = new MockVault(200, "{\"data\":{\"value\":\"mock\"}}"); + final MockVault mockVault = new MockVault(200, "{\"data\":{\"data\":{\"value\":\"mock\"}}}"); final Server server = VaultTestUtils.initHttpsMockVault(mockVault); server.start(); @@ -189,7 +189,7 @@ public void testSslPem_UTF8() throws Exception { @Test public void testSslJks_loadTrustStoreFromClasspath() throws Exception { - final MockVault mockVault = new MockVault(200, "{\"data\":{\"value\":\"mock\"}}"); + final MockVault mockVault = new MockVault(200, "{\"data\":{\"data\":{\"value\":\"mock\"}}}"); final Server server = VaultTestUtils.initHttpsMockVault(mockVault); server.start(); @@ -220,7 +220,7 @@ public void testSslJks_loadTrustStoreFromFile() throws Exception { outputStream.write(buffer, 0, noOfBytes); } - final MockVault mockVault = new MockVault(200, "{\"data\":{\"value\":\"mock\"}}"); + final MockVault mockVault = new MockVault(200, "{\"data\":{\"data\":{\"value\":\"mock\"}}}"); final Server server = VaultTestUtils.initHttpsMockVault(mockVault); server.start(); @@ -237,7 +237,7 @@ public void testSslJks_loadTrustStoreFromFile() throws Exception { @Test public void testSslJks_loadTrustStoreFromMemory() throws Exception { - final MockVault mockVault = new MockVault(200, "{\"data\":{\"value\":\"mock\"}}"); + final MockVault mockVault = new MockVault(200, "{\"data\":{\"data\":{\"value\":\"mock\"}}}"); final Server server = VaultTestUtils.initHttpsMockVault(mockVault); server.start(); @@ -257,7 +257,7 @@ public void testSslJks_loadTrustStoreFromMemory() throws Exception { @Test public void testSslJks_loadKeyStoreAndTrustStore() throws Exception { - final MockVault mockVault = new MockVault(200, "{\"data\":{\"value\":\"mock\"}}"); + final MockVault mockVault = new MockVault(200, "{\"data\":{\"data\":{\"value\":\"mock\"}}}"); final Server server = VaultTestUtils.initHttpsMockVault(mockVault); server.start(); diff --git a/src/test/java/com/bettercloud/vault/TimeoutTests.java b/src/test/java/com/bettercloud/vault/TimeoutTests.java index e903e4b7..a6dfbab0 100644 --- a/src/test/java/com/bettercloud/vault/TimeoutTests.java +++ b/src/test/java/com/bettercloud/vault/TimeoutTests.java @@ -16,7 +16,7 @@ public class TimeoutTests { @Test public void testOpenTimeout_WithinThreshold() throws Exception { // Mock Vault takes 2 seconds to respond - final OpenTimeoutsMockVault openTimeoutsMockVault = new OpenTimeoutsMockVault(2, 200, "{\"data\":{\"value\":\"mock\"}}"); + final OpenTimeoutsMockVault openTimeoutsMockVault = new OpenTimeoutsMockVault(2, 200, "{\"data\":{\"data\":{\"value\":\"mock\"}}}"); final Server server = VaultTestUtils.initHttpMockVault(openTimeoutsMockVault); server.start(); @@ -37,7 +37,7 @@ public void testOpenTimeout_WithinThreshold() throws Exception { @Test(expected = VaultException.class) public void testOpenTimeout_BeyondThreshold() throws Exception { // Mock Vault takes 2 seconds to respond - final OpenTimeoutsMockVault openTimeoutsMockVault = new OpenTimeoutsMockVault(2, 200, "{\"data\":{\"value\":\"mock\"}}"); + final OpenTimeoutsMockVault openTimeoutsMockVault = new OpenTimeoutsMockVault(2, 200, "{\"data\":{\"data\":{\"value\":\"mock\"}}}"); final Server server = VaultTestUtils.initHttpMockVault(openTimeoutsMockVault); server.start(); @@ -61,7 +61,7 @@ public void testOpenTimeout_BeyondThreshold() throws Exception { @Test public void testReadTimeout_WithinThreshold() throws Exception { // Mock Vault takes 2 seconds to respond - final ReadTimeoutsMockVault readTimeoutsMockVault = new ReadTimeoutsMockVault(2, 200, "{\"data\":{\"value\":\"mock\"}}"); + final ReadTimeoutsMockVault readTimeoutsMockVault = new ReadTimeoutsMockVault(2, 200, "{\"data\":{\"data\":{\"value\":\"mock\"}}}"); final Server server = VaultTestUtils.initHttpMockVault(readTimeoutsMockVault); server.start(); @@ -82,7 +82,7 @@ public void testReadTimeout_WithinThreshold() throws Exception { @Test(expected = VaultException.class) public void testReadTimeout_BeyondThreshold() throws Exception { // Mock Vault takes 2 seconds to respond - final ReadTimeoutsMockVault readTimeoutsMockVault = new ReadTimeoutsMockVault(3, 200, "{\"data\":{\"value\":\"mock\"}}"); + final ReadTimeoutsMockVault readTimeoutsMockVault = new ReadTimeoutsMockVault(3, 200, "{\"data\":{\"data\":{\"value\":\"mock\"}}}"); final Server server = VaultTestUtils.initHttpMockVault(readTimeoutsMockVault); server.start(); diff --git a/src/test/java/com/bettercloud/vault/vault/mock/MockVault.java b/src/test/java/com/bettercloud/vault/vault/mock/MockVault.java index 7df77a40..96cabe55 100644 --- a/src/test/java/com/bettercloud/vault/vault/mock/MockVault.java +++ b/src/test/java/com/bettercloud/vault/vault/mock/MockVault.java @@ -26,7 +26,7 @@ *
*
{@code
  * final Server server = new Server(8999);
- * server.setHandler( new MockVault(200, "{\"data\":{\"value\":\"mock\"}}") );
+ * server.setHandler( new MockVault(200, "{\"data\":{\"data\":{\"value\":\"mock\"}}}") );
  * server.start();
  *
  * final VaultConfig vaultConfig = new VaultConfig().address("http://127.0.0.1:8999").token("mock_token").build();
diff --git a/src/test/java/com/bettercloud/vault/vault/mock/OpenTimeoutsMockVault.java b/src/test/java/com/bettercloud/vault/vault/mock/OpenTimeoutsMockVault.java
index 7257b27d..2082d30d 100644
--- a/src/test/java/com/bettercloud/vault/vault/mock/OpenTimeoutsMockVault.java
+++ b/src/test/java/com/bettercloud/vault/vault/mock/OpenTimeoutsMockVault.java
@@ -30,7 +30,7 @@
  * 
*
{@code
  * final Server server = new Server(8999);
- * server.setHandler( new OpenTimeoutsMockVault(2, 200, "{\"data\":{\"value\":\"mock\"}}") );
+ * server.setHandler( new OpenTimeoutsMockVault(2, 200, "{\"data\":{\"data\":{\"value\":\"mock\"}}}") );
  * server.start();
  *
  * final VaultConfig vaultConfig = new VaultConfig("http://127.0.0.1:8999", "mock_token");
diff --git a/src/test/java/com/bettercloud/vault/vault/mock/ReadTimeoutsMockVault.java b/src/test/java/com/bettercloud/vault/vault/mock/ReadTimeoutsMockVault.java
index f408cdb0..1420391d 100644
--- a/src/test/java/com/bettercloud/vault/vault/mock/ReadTimeoutsMockVault.java
+++ b/src/test/java/com/bettercloud/vault/vault/mock/ReadTimeoutsMockVault.java
@@ -33,7 +33,7 @@
  * 
*
{@code
  * final Server server = new Server(8999);
- * server.setHandler( new ReadTimeoutsMockVault(2, 200, "{\"data\":{\"value\":\"mock\"}}") );
+ * server.setHandler( new ReadTimeoutsMockVault(2, 200, "{\"data\":{\"data\":{\"value\":\"mock\"}}}") );
  * server.start();
  *
  * final VaultConfig vaultConfig = new VaultConfig("http://127.0.0.1:8999", "mock_token");
diff --git a/src/test/java/com/bettercloud/vault/vault/mock/RetriesMockVault.java b/src/test/java/com/bettercloud/vault/vault/mock/RetriesMockVault.java
index 87a5c5c8..12e42f91 100644
--- a/src/test/java/com/bettercloud/vault/vault/mock/RetriesMockVault.java
+++ b/src/test/java/com/bettercloud/vault/vault/mock/RetriesMockVault.java
@@ -30,7 +30,7 @@
  * 
*
{@code
  * final Server server = new Server(8999);
- * server.setHandler( new RetriesMockVault(5, 200, "{\"data\":{\"value\":\"mock\"}}") );
+ * server.setHandler( new RetriesMockVault(5, 200, "{\"data\":{\"data\":{\"value\":\"mock\"}}}") );
  * server.start();
  *
  * final VaultConfig vaultConfig = new VaultConfig("http://127.0.0.1:8999", "mock_token");