Skip to content

Commit a0fa0c8

Browse files
Ojdbc provider hashicorp (#142)
* Dedicated Vault centralized config * Fix compilation failure for dedicated Vault * restructure HashiCorp package to support dedicated and other types of vault * restructure HashiCorp package to support dedicated and other types of vault * Enhance Vault Secrets Manager Implementation with KEY Feature * Refactor DedicatedVault Implementation * Add unit test * Rename hashicorpvault to hcpdedicatedvault * HCP vault secrets centralized config * Add unit tests for HCP Vault Configuration Provider * Add javadocs and copyright for dedicated vault * Add javadocs and copyright for dedicated vault * Cleanup and Update authentication parsing to use switch-case logic * Optimize HCP Vault integration and enhance Javadocs for HCP Vault Secret * Fix Javadoc formatting in HcpVaultSecretsManagerFactory * Add error handling for missing secrets in configuration * Add example-test.properties file * Add Readme.md file * Update Readme * Add support for optional 'key' parameter in VaultDedicated and VaultSecrets to extract specific fields from JSON secrets. * Update targeted version in Readme.md * Enhance unit tests * Add samples for centralized configuration * rename HCP Vault providers and switch secret-name usage in hcpvaultsecret instead of application name * Implement caching mechanism for HCP Vault Secrets bearer token * Add userpass authentication method for hcp vault dedicated && update Readme and javadocs * Add new unit Tests for userpass authentication method && update the example-test.properties file * Added AppRole authentication, updated token caching to use the driver cache, and enhanced README with documentation. Included example properties and unit tests for validation. * Fix readme file and rename some classes * Add GitHub authentication to hcpvaultdedicated, refactor utils, update hcpvault secrets parameters, and fix README * Fix Javadoc formatting * Add Credentials File Authentication for HCP Vault Secret & Improve Field Extraction Logic in HCP Vault Dedicated * Add AUTO-DETECT authentication method for both hcp vault secret and hcp vault dedicated a long with unit tests * make 'admin' as VAULT_NAMESPACE parameter default value * Update unit tests for both hcp vault dedicated and vault secrets && fix a typo in auto_detect auth method * Integrate Hashicorp into GitHub Actions pipeline * debugging * debugging * debugging * debugging * integrate HashiCorp and clean up secrets handling in Github Action Pipeline * Improve the error messages and do some refactoring for both hcp vault dedicated and hcp vault secrets providers * set the HCP_ORG_ID, HCP_PROJECT_ID and HCP_APP_NAME as environment variables in github actions pipeline * remove the extra character '\n' * fix tests * Update Readme.md && update copyrights && update javadocs * Fix Javadoc issue * Address Review Comment * Fix javadocs * cleanup * Update GitHub Actions workflow to use actions/cache@v4 * Refactor parameter constants and enhance attribute methods and improve caching * cleanup * Update the auto-detect auth method && passe default values at parsing stage * cleanup * Address review comments * Address review comment
1 parent f10284a commit a0fa0c8

File tree

52 files changed

+5273
-11
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+5273
-11
lines changed

Diff for: .github/workflows/run-tests.yaml

+26
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ jobs:
1313
AWS_REGION: ${{ secrets.TEST_AWS_REGION }}
1414
AWS_ACCESS_KEY_ID: ${{ secrets.TEST_AWS_ACCESS_KEY_ID }}
1515
AWS_SECRET_ACCESS_KEY: ${{ secrets.TEST_AWS_SECRET_ACCESS_KEY }}
16+
VAULT_ADDR: ${{ secrets.TEST_VAULT_ADDR }}
17+
HCP_ORG_ID: ${{ secrets.TEST_HCP_ORG_ID }}
18+
HCP_PROJECT_ID: ${{ secrets.TEST_HCP_PROJECT_ID }}
19+
HCP_APP_NAME: ${{ secrets.TEST_HCP_APP_NAME }}
1620
steps:
1721
- name: Checkout the repository
1822
uses: actions/checkout@v4
@@ -127,6 +131,27 @@ jobs:
127131
AWS_SECRETS_MANAGER_URL=${{ secrets.TEST_AWS_SECRETS_MANAGER_URL }}\n
128132
" >> ojdbc-provider-aws/test.properties
129133
134+
135+
# Generate ojdbc-provider-hashicorp/test.properties
136+
echo -e "VAULT_ADDR=${{ secrets.TEST_VAULT_ADDR }}\n
137+
DEDICATED_VAULT_SECRET_PATH=${{ secrets.TEST_DEDICATED_VAULT_SECRET_PATH }}\n
138+
DEDICATED_VAULT_SECRET_PATH_WITH_MULTIPLE_KEYS=${{ secrets.TEST_DEDICATED_VAULT_SECRET_PATH_WITH_MULTIPLE_KEYS }}\n
139+
VAULT_USERNAME=${{ secrets.TEST_VAULT_USERNAME }}\n
140+
VAULT_PASSWORD=${{ secrets.TEST_VAULT_PASSWORD }}\n
141+
VAULT_NAMESPACE=${{ secrets.TEST_VAULT_NAMESPACE }}\n
142+
ROLE_ID=${{ secrets.TEST_ROLE_ID }}\n
143+
SECRET_ID=${{ secrets.TEST_SECRET_ID }}\n
144+
GITHUB_TOKEN=${{ secrets.TEST_GITHUB_TOKEN }}\n
145+
KEY=${{ secrets.TEST_KEY }}\n
146+
HCP_ORG_ID=${{ secrets.TEST_HCP_ORG_ID }}\n
147+
HCP_PROJECT_ID=${{ secrets.TEST_HCP_PROJECT_ID }}\n
148+
HCP_APP_NAME=${{ secrets.TEST_HCP_APP_NAME }}\n
149+
HCP_CLIENT_ID=${{ secrets.TEST_HCP_CLIENT_ID }}\n
150+
HCP_CLIENT_SECRET=${{ secrets.TEST_HCP_CLIENT_SECRET }}\n
151+
SECRET_NAME=${{ secrets.TEST_SECRET_NAME }}\n
152+
SECRET_NAME_WITH_MULTIPLE_KEYS=${{ secrets.TEST_SECRET_NAME_WITH_MULTIPLE_KEYS }}\n
153+
" >> ojdbc-provider-hashicorp/test.properties
154+
130155
- name: Run tests with Maven
131156
run: mvn -B test --file pom.xml
132157

@@ -143,3 +168,4 @@ jobs:
143168
rm ojdbc-provider-jackson-oson/test.properties
144169
145170
rm ojdbc-provider-aws/test.properties
171+
rm ojdbc-provider-hashicorp/test.properties

Diff for: README.md

+2
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ Each module of this project contains a set of providers.
1313
<dd>Providers for integration with Oracle Cloud Infrastructure (OCI).</dd>
1414
<dt><a href="ojdbc-provider-azure/README.md">Oracle JDBC Azure Providers</a></dt>
1515
<dd>Providers for integration with Microsoft Azure</dd>
16+
<dt><a href="ojdbc-provider-hashicorp/README.md">Oracle JDBC HashiCorp Providers</a></dt>
17+
<dd>Providers for integration with Hashicorp</dd>
1618
</dl>
1719
<u>The next one contains a provider for Open Telemetry:</u>
1820
<dl>

Diff for: ojdbc-provider-common/src/main/java/oracle/jdbc/provider/parameter/ParameterSet.java

+19-3
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,10 @@
4040

4141
import oracle.jdbc.provider.factory.ResourceFactory;
4242

43+
import java.util.Arrays;
44+
import java.util.Map;
45+
import java.util.stream.Collectors;
46+
4347
import static java.lang.String.format;
4448
import static java.util.Collections.emptyMap;
4549

@@ -137,11 +141,10 @@ default <T> T getRequired(Parameter<T> parameter)
137141

138142
if (value != null)
139143
return value;
140-
141144
String name = getName(parameter);
142145
throw new IllegalStateException(format(
143-
"No value defined for parameter \"%s\"",
144-
name != null ? name : parameter.toString()));
146+
"No value defined for parameter \"%s\"",
147+
name != null ? name : parameter.toString()));
145148
}
146149

147150
/**
@@ -159,4 +162,17 @@ default <T> T getRequired(Parameter<T> parameter)
159162
*/
160163
ParameterSetBuilder copyBuilder();
161164

165+
/**
166+
* Filters the parameters from the {@link ParameterSet} based on the provided
167+
* relevant keys.
168+
*
169+
* This method extracts only the parameters whose names are included
170+
* in the specified array.
171+
*
172+
* @param relevantKeys An array of parameter names to include in the filtered
173+
* result.
174+
* @return A map containing only the filtered parameters.
175+
*/
176+
Map<String, Object> filterParameters(String[] relevantKeys);
177+
162178
}

Diff for: ojdbc-provider-common/src/main/java/oracle/jdbc/provider/parameter/ParameterSetImpl.java

+24-4
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,7 @@
3838

3939
package oracle.jdbc.provider.parameter;
4040

41-
import java.util.Collections;
42-
import java.util.HashMap;
43-
import java.util.Map;
41+
import java.util.*;
4442
import java.util.stream.Collectors;
4543

4644
final class ParameterSetImpl implements ParameterSet {
@@ -102,7 +100,7 @@ public ParameterSetBuilder copyBuilder() {
102100
ParameterSetBuilder builder = ParameterSet.builder();
103101

104102
for (Map.Entry<Parameter<?>, Object> parameterValue
105-
: parameterValues.entrySet()) {
103+
: parameterValues.entrySet()) {
106104
@SuppressWarnings("unchecked")
107105
Parameter<Object> parameter = (Parameter<Object>) parameterValue.getKey();
108106
Object value = parameterValue.getValue();
@@ -124,6 +122,28 @@ public boolean equals(Object other) {
124122
&& ((ParameterSetImpl)other).parameterValues.equals(parameterValues);
125123
}
126124

125+
/**
126+
* Retrieves the relevant parameter key-value pairs.
127+
*/
128+
private Map<String, Object> getParameterKeyValuePairs() {
129+
return parameterNames.entrySet().stream()
130+
.filter(entry -> parameterValues.get(entry.getKey()) != null)
131+
.collect(Collectors.toMap(
132+
Map.Entry::getValue,
133+
entry -> parameterValues.get(entry.getKey())
134+
));
135+
}
136+
137+
@Override
138+
public Map<String, Object> filterParameters(String[] relevantKeys) {
139+
Map<String, Object> allParameters = getParameterKeyValuePairs();
140+
List<String> relevantKeysList = Arrays.asList(relevantKeys);
141+
142+
return allParameters.entrySet().stream()
143+
.filter(entry -> relevantKeysList.contains(entry.getKey()))
144+
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
145+
}
146+
127147
/**
128148
* Returns a key=value style text representation of this set, with parameter
129149
* names as keys, and the result of calling {@code toString()} on parameter

Diff for: ojdbc-provider-common/src/main/java/oracle/jdbc/provider/parameter/ParameterSetParserImpl.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -113,11 +113,11 @@ public Builder addParameter(String name, Parameter<String> parameter) {
113113

114114
@Override
115115
public Builder addParameter(
116-
String name, Parameter<String> parameter, String defaultValue) {
116+
String name, Parameter<String> parameter, String defaultValue) {
117117
addParameterParser(
118-
name,
119-
(builder) -> builder.add(name, parameter, defaultValue),
120-
(value, builder) -> builder.add(name, parameter, value));
118+
name,
119+
(builder) -> builder.add(name, parameter, defaultValue),
120+
(value, builder) -> builder.add(name, parameter, value));
121121
return this;
122122
}
123123

0 commit comments

Comments
 (0)