From 712fab04e10238c073462ae7dba9f5f1f733c6a6 Mon Sep 17 00:00:00 2001 From: Stefan Kalscheuer Date: Mon, 21 Nov 2022 11:40:53 +0100 Subject: [PATCH] combine payload map creation into subroutines We create payload maps with conditional argument sets in several places. Combine the generation into subroutines, to keep the actual endpoint calls short and clear. --- .../jvault/connector/HTTPVaultConnector.java | 86 ++++++++++++------- 1 file changed, 56 insertions(+), 30 deletions(-) diff --git a/src/main/java/de/stklcode/jvault/connector/HTTPVaultConnector.java b/src/main/java/de/stklcode/jvault/connector/HTTPVaultConnector.java index b4fcdcf..9fb5272 100644 --- a/src/main/java/de/stklcode/jvault/connector/HTTPVaultConnector.java +++ b/src/main/java/de/stklcode/jvault/connector/HTTPVaultConnector.java @@ -145,11 +145,10 @@ public class HTTPVaultConnector implements VaultConnector { @Override public final SealResponse unseal(final String key, final Boolean reset) throws VaultConnectorException { - Map param = new HashMap<>(2, 1); - param.put("key", key); - if (reset != null) { - param.put("reset", reset.toString()); - } + Map param = mapOfStrings( + "key", key, + "reset", reset + ); return request.put(PATH_UNSEAL, param, token, SealResponse.class); } @@ -215,11 +214,10 @@ public class HTTPVaultConnector implements VaultConnector { @Override public final AuthResponse authAppRole(final String roleID, final String secretID) throws VaultConnectorException { - final Map payload = new HashMap<>(2, 1); - payload.put("role_id", roleID); - if (secretID != null) { - payload.put("secret_id", secretID); - } + final Map payload = mapOfStrings( + "role_id", roleID, + "secret_id", secretID + ); return queryAuth(PATH_AUTH_APPROLE + PATH_LOGIN, payload); } @@ -424,10 +422,7 @@ public class HTTPVaultConnector implements VaultConnector { public final SecretResponse readSecretVersion(final String mount, final String key, final Integer version) throws VaultConnectorException { requireAuth(); /* Request HTTP response and parse secret metadata */ - Map args = new HashMap<>(1, 1); - if (version != null) { - args.put("version", version.toString()); - } + Map args = mapOfStrings("version", version); return request.get(mount + PATH_DATA + key, args, token, MetaSecretResponse.class); } @@ -444,11 +439,10 @@ public class HTTPVaultConnector implements VaultConnector { public void updateSecretMetadata(final String mount, final String key, final Integer maxVersions, final boolean casRequired) throws VaultConnectorException { requireAuth(); - Map payload = new HashMap<>(2, 1); - if (maxVersions != null) { - payload.put("max_versions", maxVersions); - } - payload.put("cas_required", casRequired); + Map payload = mapOf( + "max_versions", maxVersions, + "cas_required", casRequired + ); write(mount + PATH_METADATA + key, payload); } @@ -462,12 +456,7 @@ public class HTTPVaultConnector implements VaultConnector { } // Add CAS value to options map if present. - Map options; - if (cas != null) { - options = singletonMap("cas", cas); - } else { - options = emptyMap(); - } + Map options = mapOf("cas", cas); /* Issue request and parse metadata response */ return request.post( @@ -578,11 +567,10 @@ public class HTTPVaultConnector implements VaultConnector { public final SecretResponse renew(final String leaseID, final Integer increment) throws VaultConnectorException { requireAuth(); - Map payload = new HashMap<>(2, 1); - payload.put("lease_id", leaseID); - if (increment != null) { - payload.put("increment", increment.toString()); - } + Map payload = mapOfStrings( + "lease_id", leaseID, + "increment", increment + ); /* Issue request and parse secret response */ return request.put(PATH_RENEW, payload, token, SecretResponse.class); @@ -701,4 +689,42 @@ public class HTTPVaultConnector implements VaultConnector { throw new AuthorizationRequiredException(); } } + + /** + * Generate a map of non-null {@link String} keys and values + * + * @param keyValues Key-value tuples as vararg. + * @return The map of non-null keys and values. + */ + private static Map mapOfStrings(Object... keyValues) { + Map map = new HashMap<>(keyValues.length / 2, 1); + for (int i = 0; i < keyValues.length -1; i = i + 2) { + Object key = keyValues[i]; + Object val = keyValues[i + 1]; + if (key instanceof String && val != null) { + map.put((String) key, val.toString()); + } + } + + return map; + } + + /** + * Generate a map of non-null {@link String} keys and {@link Object} values + * + * @param keyValues Key-value tuples as vararg. + * @return The map of non-null keys and values. + */ + private static Map mapOf(Object... keyValues) { + Map map = new HashMap<>(keyValues.length / 2, 1); + for (int i = 0; i < keyValues.length; i = i + 2) { + Object key = keyValues[i]; + Object val = keyValues[i + 1]; + if (key instanceof String && val != null) { + map.put((String) key, val); + } + } + + return map; + } }