Skip to content

Commit f057b09

Browse files
tdferreirafroque
authored andcommitted
fix: Handle directory paths explicitly when loading Vault token/config/certificate files
1 parent f2e6606 commit f057b09

3 files changed

Lines changed: 44 additions & 0 deletions

File tree

src/main/java/com/premiumminds/vault/client/DefaultVaultTokenLoader.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,19 +34,22 @@ public DefaultVaultTokenLoader(Optional<Path> tokenFile, String vaultAddress) {
3434
public String get() throws Exception {
3535
if (tokenFile.isPresent() && !tokenFile.toString().isBlank()) {
3636
if (tokenFile.get().toFile().exists()){
37+
assertRegularFile(tokenFile.get(), "Vault token file");
3738
return Files.readString(tokenFile.get());
3839
}
3940
}
4041

4142
final var vaultConfigFile = getConfigFile();
4243
if (vaultConfigFile.toFile().exists()){
44+
assertRegularFile(vaultConfigFile, "Vault config file");
4345
final String token = getTokenFromVaultTokenHelper(vaultConfigFile, vaultAddress);
4446
if (token != null){
4547
return token;
4648
}
4749
}
4850
final var defaultTokenFilePath = Paths.get(System.getProperty("user.home"), DEFAULT_VAULT_TOKEN_FILE);
4951
if (defaultTokenFilePath.toFile().exists()){
52+
assertRegularFile(defaultTokenFilePath, "Vault token file");
5053
return Files.readString(defaultTokenFilePath);
5154
}
5255

@@ -64,6 +67,12 @@ private Path getConfigFile(){
6467
return vaultConfigPath;
6568
}
6669

70+
private static void assertRegularFile(Path path, String description) {
71+
if (!Files.isRegularFile(path)) {
72+
throw new IllegalArgumentException(description + " path is not a file: " + path);
73+
}
74+
}
75+
6776
private String getTokenFromVaultTokenHelper(Path configFile, String vaultAddress)
6877
throws IOException, InterruptedException
6978
{

src/main/java/com/premiumminds/vault/client/VaultClient.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import java.net.http.HttpClient;
1414
import java.net.http.HttpRequest;
1515
import java.net.http.HttpResponse;
16+
import java.nio.file.Files;
1617
import java.nio.file.Path;
1718
import java.security.KeyStore;
1819
import java.security.SecureRandom;
@@ -189,6 +190,9 @@ private HttpClient getClient(Optional<Path> certificate) throws Exception {
189190
}
190191

191192
private SSLContext getSSLContext(Path certificate) throws Exception {
193+
if (!Files.isRegularFile(certificate)) {
194+
throw new IllegalArgumentException("Vault certificate path is not a file: " + certificate);
195+
}
192196

193197
CertificateFactory cf = CertificateFactory.getInstance("X.509");
194198

src/test/java/com/premiumminds/vault/client/VaultClientTest.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,16 @@
88
import org.testcontainers.containers.Network;
99
import org.testcontainers.utility.DockerImageName;
1010

11+
import java.nio.file.Files;
1112
import java.nio.file.Path;
1213
import java.sql.Connection;
1314
import java.sql.DriverManager;
1415
import java.sql.ResultSet;
1516
import java.util.Map;
1617

18+
import static org.junit.jupiter.api.Assertions.assertEquals;
1719
import static org.junit.jupiter.api.Assertions.assertFalse;
20+
import static org.junit.jupiter.api.Assertions.assertThrows;
1821
import static org.junit.jupiter.api.Assertions.assertTrue;
1922
import static org.junit.jupiter.api.Assertions.fail;
2023

@@ -23,6 +26,34 @@ class VaultClientTest {
2326
@TempDir
2427
Path tempDir;
2528

29+
@Test
30+
void tokenFileDirectoryReturnsExplicitError() throws Exception {
31+
final var tokenDir = tempDir.resolve("token-dir");
32+
Files.createDirectory(tokenDir);
33+
final var loader = new DefaultVaultTokenLoader(java.util.Optional.of(tokenDir), "http://localhost:8200");
34+
35+
final var exception = assertThrows(IllegalArgumentException.class, loader::get);
36+
assertEquals("Vault token file path is not a file: " + tokenDir, exception.getMessage());
37+
}
38+
39+
@Test
40+
void vaultConfigDirectoryReturnsExplicitError() throws Exception {
41+
final var originalUserHome = System.getProperty("user.home");
42+
final var vaultConfigDir = tempDir.resolve(".vault");
43+
Files.createDirectory(vaultConfigDir);
44+
45+
try {
46+
System.setProperty("user.home", tempDir.toString());
47+
48+
final var loader = new DefaultVaultTokenLoader(java.util.Optional.empty(), "http://localhost:8200");
49+
final var exception = assertThrows(IllegalArgumentException.class, loader::get);
50+
51+
assertEquals("Vault config file path is not a file: " + vaultConfigDir, exception.getMessage());
52+
} finally {
53+
System.setProperty("user.home", originalUserHome);
54+
}
55+
}
56+
2657
@Test
2758
void dynamicCredentials() throws Exception {
2859

0 commit comments

Comments
 (0)