1
+ /*
2
+ ** Copyright (c) 2023 Oracle and/or its affiliates.
3
+ **
4
+ ** The Universal Permissive License (UPL), Version 1.0
5
+ **
6
+ ** Subject to the condition set forth below, permission is hereby granted to any
7
+ ** person obtaining a copy of this software, associated documentation and/or data
8
+ ** (collectively the "Software"), free of charge and under any and all copyright
9
+ ** rights in the Software, and any and all patent rights owned or freely
10
+ ** licensable by each licensor hereunder covering either (i) the unmodified
11
+ ** Software as contributed to or provided by such licensor, or (ii) the Larger
12
+ ** Works (as defined below), to deal in both
13
+ **
14
+ ** (a) the Software, and
15
+ ** (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if
16
+ ** one is included with the Software (each a "Larger Work" to which the Software
17
+ ** is contributed by such licensors),
18
+ **
19
+ ** without restriction, including without limitation the rights to copy, create
20
+ ** derivative works of, display, perform, and distribute the Software and make,
21
+ ** use, sell, offer for sale, import, export, have made, and have sold the
22
+ ** Software and the Larger Work(s), and to sublicense the foregoing rights on
23
+ ** either these or other terms.
24
+ **
25
+ ** This license is subject to the following condition:
26
+ ** The above copyright notice and either this complete permission notice or at
27
+ ** a minimum a reference to the UPL must be included in all copies or
28
+ ** substantial portions of the Software.
29
+ **
30
+ ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
31
+ ** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
32
+ ** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
33
+ ** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
34
+ ** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
35
+ ** OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
36
+ ** SOFTWARE.
37
+ */
38
+
1
39
package oracle .jdbc .provider .azure .configuration ;
2
40
41
+ import com .azure .security .keyvault .secrets .models .KeyVaultSecret ;
42
+ import oracle .jdbc .provider .azure .keyvault .KeyVaultSecretFactory ;
43
+ import oracle .jdbc .provider .parameter .ParameterSet ;
3
44
import oracle .jdbc .spi .OracleConfigurationSecretProvider ;
45
+ import oracle .sql .json .OracleJsonObject ;
4
46
47
+ import java .util .Base64 ;
48
+ import java .util .HashMap ;
5
49
import java .util .Map ;
6
50
7
- public class AzureVaultSecretProvider implements OracleConfigurationSecretProvider {
51
+ import static oracle .jdbc .provider .azure .configuration .AzureVaultURLParser .PARAMETER_SET_PARSER ;
52
+
53
+ /**
54
+ * A provider of Secret values from Azure Key Vault.
55
+ */
56
+ public final class AzureVaultSecretProvider
57
+ implements OracleConfigurationSecretProvider {
8
58
59
+ /**
60
+ * {@inheritDoc}
61
+ * <p>
62
+ * Returns the password of the Secret that is retrieved from Azure Key Vault.
63
+ * </p><p>
64
+ * The {@code secretJsonObject} has the following form:
65
+ * </p><pre>{@code
66
+ * "password": {
67
+ * "type": "azurevault",
68
+ * "value": "https://myvault.vault.azure.net/secrets/mysecret",
69
+ * "authentication": {
70
+ * "method": "AZURE_DEFAULT"
71
+ * }
72
+ * }
73
+ * }</pre>
74
+ *
75
+ * @param secretJsonObject json object to be parsed
76
+ * @return encoded char array in base64 format that represents the retrieved
77
+ * Secret.
78
+ */
9
79
@ Override
10
- public char [] getSecret (Map <String , String > map ) {
11
- return new char [0 ];
80
+ public char [] getSecret (Map <String , String > secretMap ) {
81
+ ParameterSet parameters = PARAMETER_SET_PARSER .parseNamedValues (secretMap );
82
+
83
+ String secretString = KeyVaultSecretFactory .getInstance ()
84
+ .request (parameters )
85
+ .getContent ()
86
+ .getValue ();
87
+
88
+ return Base64 .getEncoder ()
89
+ .encodeToString (secretString .getBytes ())
90
+ .toCharArray ();
12
91
}
13
92
93
+ /**
94
+ * {@inheritDoc}
95
+ *
96
+ * @return secret type. Not null.
97
+ */
14
98
@ Override
15
99
public String getSecretType () {
16
- return null ;
100
+ return "azurevault" ;
17
101
}
18
- }
102
+ }
0 commit comments