diff --git a/CHANGELOG.md b/CHANGELOG.md index 5a9c328..d8d6ffd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,9 @@ ### Improvements * Replace deprecated `java.net.URL` usage with `java.net.URI` (#94) +### Fix +* Fix initialization from environment without explicit port + ### Dependencies * Updated Jackson to 2.18.3 (#90) diff --git a/src/main/java/de/stklcode/jvault/connector/HTTPVaultConnectorBuilder.java b/src/main/java/de/stklcode/jvault/connector/HTTPVaultConnectorBuilder.java index 7ff9340..1339ad9 100644 --- a/src/main/java/de/stklcode/jvault/connector/HTTPVaultConnectorBuilder.java +++ b/src/main/java/de/stklcode/jvault/connector/HTTPVaultConnectorBuilder.java @@ -31,7 +31,6 @@ import java.nio.file.Paths; import java.security.cert.CertificateException; import java.security.cert.CertificateFactory; import java.security.cert.X509Certificate; -import java.util.Objects; /** * Vault Connector Builder implementation for HTTP Vault connectors. @@ -96,10 +95,14 @@ public final class HTTPVaultConnectorBuilder { * @since 1.0 */ public HTTPVaultConnectorBuilder withBaseURL(final URI baseURL) { - return withTLS(!("http".equalsIgnoreCase(Objects.requireNonNullElse(baseURL.getScheme(), "")))) + String path = baseURL.getPath(); + if (path == null || path.isBlank()) { + path = DEFAULT_PREFIX; + } + return withTLS(!("http".equalsIgnoreCase(baseURL.getScheme()))) .withHost(baseURL.getHost()) .withPort(baseURL.getPort()) - .withPrefix(baseURL.getPath()); + .withPrefix(path); } /** @@ -303,10 +306,7 @@ public final class HTTPVaultConnectorBuilder { /* Parse URL from environment variable */ if (System.getenv(ENV_VAULT_ADDR) != null && !System.getenv(ENV_VAULT_ADDR).isBlank()) { try { - var uri = new URI(System.getenv(ENV_VAULT_ADDR)); - this.host = uri.getHost(); - this.port = uri.getPort(); - this.tls = uri.getScheme().equalsIgnoreCase("https"); + withBaseURL(System.getenv(ENV_VAULT_ADDR)); } catch (URISyntaxException e) { throw new ConnectionException("URL provided in environment variable malformed", e); } @@ -315,7 +315,7 @@ public final class HTTPVaultConnectorBuilder { /* Read number of retries */ if (System.getenv(ENV_VAULT_MAX_RETRIES) != null) { try { - numberOfRetries = Integer.parseInt(System.getenv(ENV_VAULT_MAX_RETRIES)); + withNumberOfRetries(Integer.parseInt(System.getenv(ENV_VAULT_MAX_RETRIES))); } catch (NumberFormatException ignored) { /* Ignore malformed values. */ } diff --git a/src/test/java/de/stklcode/jvault/connector/HTTPVaultConnectorBuilderTest.java b/src/test/java/de/stklcode/jvault/connector/HTTPVaultConnectorBuilderTest.java index 1b030e6..082ae96 100644 --- a/src/test/java/de/stklcode/jvault/connector/HTTPVaultConnectorBuilderTest.java +++ b/src/test/java/de/stklcode/jvault/connector/HTTPVaultConnectorBuilderTest.java @@ -41,6 +41,8 @@ import static org.junit.jupiter.api.Assertions.*; */ class HTTPVaultConnectorBuilderTest { private static final String VAULT_ADDR = "https://localhost:8201"; + private static final String VAULT_ADDR_2 = "http://localhost"; + private static final String VAULT_ADDR_3 = "https://localhost/vault/"; private static final Integer VAULT_MAX_RETRIES = 13; private static final String VAULT_TOKEN = "00001111-2222-3333-4444-555566667777"; @@ -115,6 +117,22 @@ class HTTPVaultConnectorBuilderTest { return null; }); + withVaultEnv(VAULT_ADDR_2, null, null, null).execute(() -> { + HTTPVaultConnectorBuilder builder = assertDoesNotThrow( + () -> HTTPVaultConnector.builder().fromEnv(), + "Factory creation from minimal environment failed" + ); + assertEquals(VAULT_ADDR_2 + "/v1/", getRequestHelperPrivate(builder.build(), "baseURL"), "URL without port not set correctly"); + return null; + }); + withVaultEnv(VAULT_ADDR_3, null, null, null).execute(() -> { + HTTPVaultConnectorBuilder builder = assertDoesNotThrow( + () -> HTTPVaultConnector.builder().fromEnv(), + "Factory creation from minimal environment failed" + ); + assertEquals(VAULT_ADDR_3, getRequestHelperPrivate(builder.build(), "baseURL"), "URL with custom path not set correctly"); + return null; + }); // Provide address and number of retries. withVaultEnv(VAULT_ADDR, null, VAULT_MAX_RETRIES.toString(), null).execute(() -> {