diff --git a/src/main/java/de/stklcode/jvault/connector/HTTPVaultConnector.java b/src/main/java/de/stklcode/jvault/connector/HTTPVaultConnector.java index 2573a59..6e23abc 100644 --- a/src/main/java/de/stklcode/jvault/connector/HTTPVaultConnector.java +++ b/src/main/java/de/stklcode/jvault/connector/HTTPVaultConnector.java @@ -50,6 +50,7 @@ public class HTTPVaultConnector implements VaultConnector { private static final String PATH_SEAL = "sys/seal"; private static final String PATH_UNSEAL = "sys/unseal"; private static final String PATH_INIT = "sys/init"; + private static final String PATH_RENEW = "sys/renew"; private static final String PATH_AUTH = "sys/auth"; private static final String PATH_TOKEN = "auth/token"; private static final String PATH_LOOKUP = "/lookup"; @@ -541,9 +542,22 @@ public class HTTPVaultConnector implements VaultConnector { } @Override - public VaultResponse renew(String leaseID, Integer seconds) { - /* TODO */ - return null; + public SecretResponse renew(String leaseID, Integer increment) throws VaultConnectorException { + if (!isAuthorized()) + throw new AuthorizationRequiredException(); + + Map payload = new HashMap<>(); + payload.put("lease_id", leaseID); + if (increment != null) + payload.put("increment", increment.toString()); + + /* Request HTTP response and parse Secret */ + try { + String response = requestPut(PATH_RENEW, payload); + return jsonMapper.readValue(response, SecretResponse.class); + } catch (IOException e) { + throw new InvalidResponseException("Unable to parse response", e); + } } @Override @@ -587,6 +601,23 @@ public class HTTPVaultConnector implements VaultConnector { } } + @Override + public TokenResponse lookupToken(final String token) throws VaultConnectorException { + if (!isAuthorized()) + throw new AuthorizationRequiredException(); + /* Request HTTP response and parse Secret */ + try { + String response = requestGet(PATH_TOKEN + "/lookup/" + token, new HashMap<>()); + return jsonMapper.readValue(response, TokenResponse.class); + } catch (IOException e) { + throw new InvalidResponseException("Unable to parse response", e); + } catch (URISyntaxException ignored) { + /* this should never occur and may leak sensible information */ + throw new InvalidRequestException("Invalid URI format."); + } + + } + /** * Execute HTTP request using POST method. diff --git a/src/main/java/de/stklcode/jvault/connector/VaultConnector.java b/src/main/java/de/stklcode/jvault/connector/VaultConnector.java index c7d2fd9..829ff7b 100644 --- a/src/main/java/de/stklcode/jvault/connector/VaultConnector.java +++ b/src/main/java/de/stklcode/jvault/connector/VaultConnector.java @@ -16,6 +16,7 @@ package de.stklcode.jvault.connector; +import de.stklcode.jvault.connector.exception.AuthorizationRequiredException; import de.stklcode.jvault.connector.exception.VaultConnectorException; import de.stklcode.jvault.connector.model.*; import de.stklcode.jvault.connector.model.response.*; @@ -412,11 +413,21 @@ public interface VaultConnector { /** * Renew lease with given ID. * - * @param leaseID the lase ID - * @param seconds number of seconds to extend lease time + * @param leaseID the lase ID * @return Renewed lease */ - VaultResponse renew(final String leaseID, final Integer seconds); + default SecretResponse renew(final String leaseID) throws VaultConnectorException { + return renew(leaseID, null); + } + + /** + * Renew lease with given ID. + * + * @param leaseID the lase ID + * @param increment number of seconds to extend lease time + * @return Renewed lease + */ + SecretResponse renew(final String leaseID, final Integer increment) throws VaultConnectorException; /** * Create a new token. @@ -446,4 +457,13 @@ public interface VaultConnector { * @throws VaultConnectorException on error */ AuthResponse createToken(final Token token, final String role) throws VaultConnectorException; + + /** + * Lookup token information. + * + * @param token the token + * @return the result response + * @throws VaultConnectorException on error + */ + TokenResponse lookupToken(final String token) throws VaultConnectorException; } diff --git a/src/test/java/de/stklcode/jvault/connector/HTTPVaultConnectorTest.java b/src/test/java/de/stklcode/jvault/connector/HTTPVaultConnectorTest.java index 35bcf8e..667d6e0 100644 --- a/src/test/java/de/stklcode/jvault/connector/HTTPVaultConnectorTest.java +++ b/src/test/java/de/stklcode/jvault/connector/HTTPVaultConnectorTest.java @@ -531,7 +531,7 @@ public class HTTPVaultConnectorTest { * Test deletion of secrets. */ @Test - public void deleteTest() { + public void deleteSecretTest() { authUser(); assumeTrue(connector.isAuthorized());