Skip to content

Commit e497be0

Browse files
Refactor DedicatedVault Implementation
1 parent e9ce2de commit e497be0

13 files changed

+166
-153
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package oracle.jdbc.provider.util;
2+
3+
import oracle.jdbc.provider.parameter.Parameter;
4+
import oracle.jdbc.provider.parameter.ParameterSet;
5+
6+
import java.util.Optional;
7+
8+
/**
9+
* Utility class for handling parameters and environment variables.
10+
*/
11+
public final class ParameterUtil {
12+
13+
private ParameterUtil() {
14+
// Prevent instantiation
15+
}
16+
17+
/**
18+
* Fetches a value from system properties or environment variables.
19+
*
20+
* @param key the name of the property or environment variable
21+
* @return the value of the property or environment variable, or null if not found
22+
*/
23+
public static String getEnvOrProperty(String key) {
24+
return System.getProperty(key, System.getenv(key));
25+
}
26+
27+
/**
28+
* Fetches a parameter from the ParameterSet or falls back to environment/system properties.
29+
*
30+
* @param parameterSet the ParameterSet to search for the parameter
31+
* @param parameter the Parameter to fetch from the ParameterSet
32+
* @param envKey the environment/system property key to use as fallback
33+
* @return the parameter value, or the environment/system property value if the parameter is not set
34+
*/
35+
public static String getRequiredOrFallback(ParameterSet parameterSet, Parameter<String> parameter, String envKey) {
36+
return Optional.ofNullable(parameterSet.getOptional(parameter))
37+
.orElse(getEnvOrProperty(envKey));
38+
}
39+
}

ojdbc-provider-hashicorp/src/main/java/oracle/jdbc/provider/hashicorp/dedicated/HashiVaultResourceFactory.java ojdbc-provider-hashicorp/src/main/java/oracle/jdbc/provider/hashicorp/dedicated/DedicatedVaultResourceFactory.java

+6-5
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,21 @@
22

33
import oracle.jdbc.provider.factory.Resource;
44
import oracle.jdbc.provider.factory.ResourceFactory;
5-
import oracle.jdbc.provider.hashicorp.dedicated.authentication.HashiCredentials;
6-
import oracle.jdbc.provider.hashicorp.dedicated.authentication.HashicorpCredentialsFactory;
5+
import oracle.jdbc.provider.hashicorp.dedicated.authentication.DedicatedVaultCredentials;
6+
import oracle.jdbc.provider.hashicorp.dedicated.authentication.DedicatedVaultCredentialsFactory;
77
import oracle.jdbc.provider.parameter.ParameterSet;
88

99
/**
1010
* Common super class for ResourceFactory implementations that request
1111
* a resource from Vault using HashiCredentials (Vault token).
1212
*/
13-
public abstract class HashiVaultResourceFactory<T> implements ResourceFactory<T> {
13+
public abstract class DedicatedVaultResourceFactory<T> implements ResourceFactory<T> {
1414

1515
@Override
1616
public final Resource<T> request(ParameterSet parameterSet) {
1717
// Retrieve the Vault credentials (token) from the credentials factory
18-
HashiCredentials credentials = HashicorpCredentialsFactory.getInstance()
18+
DedicatedVaultCredentials credentials = DedicatedVaultCredentialsFactory
19+
.getInstance()
1920
.request(parameterSet)
2021
.getContent();
2122

@@ -32,5 +33,5 @@ public final Resource<T> request(ParameterSet parameterSet) {
3233
* the given credentials and parameters.
3334
*/
3435
public abstract Resource<T> request(
35-
HashiCredentials credentials, ParameterSet parameterSet);
36+
DedicatedVaultCredentials credentials, ParameterSet parameterSet);
3637
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package oracle.jdbc.provider.hashicorp.dedicated.authentication;
2+
3+
/**
4+
* A method of authentication using Dedicated HashiCorp Vault.
5+
*/
6+
public enum DedicatedVaultAuthenticationMethod {
7+
8+
/**
9+
* Authentication using a Vault token, possibly read from a parameter,
10+
* system property, or environment variable.
11+
*/
12+
TOKEN
13+
}

ojdbc-provider-hashicorp/src/main/java/oracle/jdbc/provider/hashicorp/dedicated/authentication/HashiCredentials.java ojdbc-provider-hashicorp/src/main/java/oracle/jdbc/provider/hashicorp/dedicated/authentication/DedicatedVaultCredentials.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
package oracle.jdbc.provider.hashicorp.dedicated.authentication;
22

33
/**
4-
* Simple credentials object for HashiCorp Vault that holds a token.
4+
* Holds a Vault token for Dedicated Vault usage.
55
*/
6-
public final class HashiCredentials {
6+
public final class DedicatedVaultCredentials {
77
private final String vaultToken;
88

9-
public HashiCredentials(String vaultToken) {
9+
public DedicatedVaultCredentials(String vaultToken) {
1010
this.vaultToken = vaultToken;
1111
}
1212

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package oracle.jdbc.provider.hashicorp.dedicated.authentication;
2+
3+
import oracle.jdbc.provider.factory.Resource;
4+
import oracle.jdbc.provider.factory.ResourceFactory;
5+
import oracle.jdbc.provider.hashicorp.dedicated.secrets.DedicatedVaultSecretsManagerFactory;
6+
import oracle.jdbc.provider.parameter.Parameter;
7+
import oracle.jdbc.provider.parameter.ParameterSet;
8+
9+
import static oracle.jdbc.provider.parameter.Parameter.CommonAttribute.REQUIRED;
10+
import static oracle.jdbc.provider.util.ParameterUtil.getRequiredOrFallback;
11+
12+
/**
13+
* A factory for creating {@link DedicatedVaultCredentials} objects for Dedicated Vault.
14+
*/
15+
public final class DedicatedVaultCredentialsFactory implements ResourceFactory<DedicatedVaultCredentials> {
16+
17+
public static final Parameter<DedicatedVaultAuthenticationMethod> AUTHENTICATION_METHOD =
18+
Parameter.create(REQUIRED);
19+
20+
private static final DedicatedVaultCredentialsFactory INSTANCE =
21+
new DedicatedVaultCredentialsFactory();
22+
23+
private DedicatedVaultCredentialsFactory() { }
24+
25+
public static DedicatedVaultCredentialsFactory getInstance() {
26+
return INSTANCE;
27+
}
28+
29+
@Override
30+
public Resource<DedicatedVaultCredentials> request(ParameterSet parameterSet) {
31+
DedicatedVaultCredentials credentials = getCredential(parameterSet);
32+
return Resource.createPermanentResource(credentials, true);
33+
}
34+
35+
private static DedicatedVaultCredentials getCredential(ParameterSet parameterSet) {
36+
// Check which authentication method is requested
37+
DedicatedVaultAuthenticationMethod method =
38+
parameterSet.getRequired(AUTHENTICATION_METHOD);
39+
40+
switch (method) {
41+
case TOKEN:
42+
return createTokenCredentials(parameterSet);
43+
default:
44+
throw new IllegalArgumentException(
45+
"Unrecognized authentication method: " + method);
46+
}
47+
}
48+
49+
private static DedicatedVaultCredentials createTokenCredentials(ParameterSet parameterSet) {
50+
String vaultToken = getRequiredOrFallback(
51+
parameterSet,
52+
DedicatedVaultSecretsManagerFactory.VAULT_TOKEN,
53+
"VAULT_TOKEN"
54+
);
55+
56+
if (vaultToken == null || vaultToken.isEmpty()) {
57+
throw new IllegalStateException("Vault Token not found in parameters, " +
58+
"system properties, or environment variables");
59+
}
60+
61+
return new DedicatedVaultCredentials(vaultToken);
62+
}
63+
64+
}

ojdbc-provider-hashicorp/src/main/java/oracle/jdbc/provider/hashicorp/dedicated/authentication/HashicorpAuthenticationMethod.java

-11
This file was deleted.

ojdbc-provider-hashicorp/src/main/java/oracle/jdbc/provider/hashicorp/dedicated/authentication/HashicorpCredentialsFactory.java

-64
This file was deleted.
+9-10
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,31 @@
11
package oracle.jdbc.provider.hashicorp.dedicated.configuration;
22

3-
import oracle.jdbc.provider.hashicorp.dedicated.authentication.HashicorpAuthenticationMethod;
4-
import oracle.jdbc.provider.hashicorp.dedicated.authentication.HashicorpCredentialsFactory;
3+
import oracle.jdbc.provider.hashicorp.dedicated.authentication.DedicatedVaultAuthenticationMethod;
4+
import oracle.jdbc.provider.hashicorp.dedicated.authentication.DedicatedVaultCredentialsFactory;
55
import oracle.jdbc.provider.parameter.ParameterSetParser;
66

77
/**
88
* Defines how we parse common Vault parameters.
99
*/
10-
public final class HashicorpConfigurationParameters {
10+
public final class DedicatedVaultConfigurationParameters {
1111

12-
private HashicorpConfigurationParameters() {}
12+
private DedicatedVaultConfigurationParameters() {}
1313

1414
public static ParameterSetParser.Builder configureBuilder(ParameterSetParser.Builder builder) {
1515
return builder.addParameter(
1616
// The parameter name is "AUTHENTICATION"
1717
"AUTHENTICATION",
1818
// Tied to HashicorpCredentialsFactory.AUTHENTICATION_METHOD
19-
HashicorpCredentialsFactory.AUTHENTICATION_METHOD,
19+
DedicatedVaultCredentialsFactory.AUTHENTICATION_METHOD,
2020
// Default value if none is specified:
21-
HashicorpAuthenticationMethod.TOKEN,
22-
HashicorpConfigurationParameters::parseAuthentication)
21+
DedicatedVaultAuthenticationMethod.TOKEN,
22+
DedicatedVaultConfigurationParameters::parseAuthentication)
2323
;
2424
}
2525

26-
private static HashicorpAuthenticationMethod parseAuthentication(String value) {
27-
// Map user-provided string to enum
26+
private static DedicatedVaultAuthenticationMethod parseAuthentication(String value) {
2827
if ("TOKEN".equalsIgnoreCase(value) || "VAULT_TOKEN".equalsIgnoreCase(value)) {
29-
return HashicorpAuthenticationMethod.TOKEN;
28+
return DedicatedVaultAuthenticationMethod.TOKEN;
3029
}
3130
throw new IllegalArgumentException(
3231
"Unrecognized Hashicorp authentication value: " + value);

ojdbc-provider-hashicorp/src/main/java/oracle/jdbc/provider/hashicorp/dedicated/configuration/HashiJsonVaultProvider.java ojdbc-provider-hashicorp/src/main/java/oracle/jdbc/provider/hashicorp/dedicated/configuration/DedicatedVaultJsonSecretProvider.java

+8-9
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package oracle.jdbc.provider.hashicorp.dedicated.configuration;
22

33
import oracle.jdbc.provider.configuration.JsonSecretUtil;
4-
import oracle.jdbc.provider.hashicorp.dedicated.secrets.HashiVaultSecretsManagerFactory;
4+
import oracle.jdbc.provider.hashicorp.dedicated.secrets.DedicatedVaultSecretsManagerFactory;
55
import oracle.jdbc.provider.parameter.ParameterSet;
66
import oracle.jdbc.spi.OracleConfigurationJsonSecretProvider;
77
import oracle.sql.json.OracleJsonFactory;
@@ -11,26 +11,25 @@
1111
import java.nio.charset.StandardCharsets;
1212
import java.util.Base64;
1313

14-
import static oracle.jdbc.provider.hashicorp.dedicated.configuration.HashiVaultSecretsManagerConfigurationProvider.PARAMETER_SET_PARSER;
15-
import static oracle.jdbc.provider.hashicorp.dedicated.secrets.HashiVaultSecretsManagerFactory.FIELD_NAME;
14+
import static oracle.jdbc.provider.hashicorp.dedicated.configuration.DedicatedVaultSecretsManagerConfigurationProvider.PARAMETER_SET_PARSER;
15+
import static oracle.jdbc.provider.hashicorp.dedicated.secrets.DedicatedVaultSecretsManagerFactory.FIELD_NAME;
1616

17-
public class HashiJsonVaultProvider implements OracleConfigurationJsonSecretProvider {
17+
public class DedicatedVaultJsonSecretProvider implements OracleConfigurationJsonSecretProvider {
1818

1919
@Override
2020
public char[] getSecret(OracleJsonObject jsonObject) {
21-
// 1) Convert the JSON object to named key-value pairs
2221
ParameterSet parameterSet =
2322
PARAMETER_SET_PARSER.parseNamedValues(
2423
JsonSecretUtil.toNamedValues(jsonObject)
2524
);
2625

27-
// 2) Call the Vault factory to fetch the raw secret string
28-
String secretString = HashiVaultSecretsManagerFactory
26+
String secretString = DedicatedVaultSecretsManagerFactory
2927
.getInstance()
3028
.request(parameterSet)
3129
.getContent();
3230

33-
ByteArrayInputStream inputStream = new ByteArrayInputStream(secretString.getBytes(StandardCharsets.UTF_8));
31+
ByteArrayInputStream inputStream = new ByteArrayInputStream(
32+
secretString.getBytes(StandardCharsets.UTF_8));
3433

3534
OracleJsonObject secretJsonObj =
3635
new OracleJsonFactory()
@@ -48,6 +47,6 @@ public char[] getSecret(OracleJsonObject jsonObject) {
4847

4948
@Override
5049
public String getSecretType() {
51-
return "hashicorpvault";
50+
return "dedicatedvault";
5251
}
5352
}
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package oracle.jdbc.provider.hashicorp.dedicated.configuration;
22

33
import oracle.jdbc.driver.OracleConfigurationJsonProvider;
4-
import oracle.jdbc.provider.hashicorp.dedicated.secrets.HashiVaultSecretsManagerFactory;
4+
import oracle.jdbc.provider.hashicorp.dedicated.secrets.DedicatedVaultSecretsManagerFactory;
55
import oracle.jdbc.provider.parameter.ParameterSet;
66
import oracle.jdbc.provider.parameter.ParameterSetParser;
77
import oracle.jdbc.util.OracleConfigurationCache;
@@ -11,23 +11,23 @@
1111
import java.util.HashMap;
1212
import java.util.Map;
1313

14-
public class HashiVaultSecretsManagerConfigurationProvider extends OracleConfigurationJsonProvider {
14+
public class DedicatedVaultSecretsManagerConfigurationProvider extends OracleConfigurationJsonProvider {
1515

1616
static final ParameterSetParser PARAMETER_SET_PARSER =
17-
HashicorpConfigurationParameters.configureBuilder(
17+
DedicatedVaultConfigurationParameters.configureBuilder(
1818
ParameterSetParser.builder()
19-
.addParameter("value", HashiVaultSecretsManagerFactory.SECRET_PATH)
20-
.addParameter("key", HashiVaultSecretsManagerFactory.KEY)
19+
.addParameter("value", DedicatedVaultSecretsManagerFactory.SECRET_PATH)
20+
.addParameter("key", DedicatedVaultSecretsManagerFactory.KEY)
2121
.addParameter(
2222
"VAULT_ADDR",
23-
HashiVaultSecretsManagerFactory.VAULT_ADDR
23+
DedicatedVaultSecretsManagerFactory.VAULT_ADDR
2424
)
2525
.addParameter(
2626
"VAULT_TOKEN",
27-
HashiVaultSecretsManagerFactory.VAULT_TOKEN
27+
DedicatedVaultSecretsManagerFactory.VAULT_TOKEN
2828
)
2929
.addParameter("FILED_NAME",
30-
HashiVaultSecretsManagerFactory.FIELD_NAME)
30+
DedicatedVaultSecretsManagerFactory.FIELD_NAME)
3131
).build();
3232

3333
@Override
@@ -42,7 +42,7 @@ public InputStream getJson(String secretPath) {
4242
ParameterSet parameters = PARAMETER_SET_PARSER.parseNamedValues(optionsWithSecret);
4343

4444
// Fetch the secret from Vault
45-
String secretString = HashiVaultSecretsManagerFactory
45+
String secretString = DedicatedVaultSecretsManagerFactory
4646
.getInstance()
4747
.request(parameters)
4848
.getContent();
@@ -52,8 +52,8 @@ public InputStream getJson(String secretPath) {
5252

5353
@Override
5454
public String getType() {
55-
// We'll reference this in our JDBC URL, e.g. "jdbc:oracle:thin:@config-hashicorpvault://..."
56-
return "hashicorpvault";
55+
// We'll reference this in our JDBC URL, e.g. "jdbc:oracle:thin:@config-dedicatedvault://..."
56+
return "dedicatedvault";
5757
}
5858

5959
@Override

0 commit comments

Comments
 (0)