Skip to content

Commit b60e077

Browse files
OCI Vault (#47)
* OCI Vault --------- Signed-off-by: Anders Swanson <anders.swanson@oracle.com>
1 parent 21b0d7c commit b60e077

File tree

19 files changed

+745
-0
lines changed

19 files changed

+745
-0
lines changed

pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ Licensed under the Universal Permissive License v 1.0 as shown at https://oss.or
5757
<module>spring-cloud-oci-logging</module>
5858
<module>spring-cloud-oci-function</module>
5959
<module>spring-cloud-oci-streaming</module>
60+
<module>spring-cloud-oci-vault</module>
6061
<module>spring-cloud-oci-queue</module>
6162
<module>docs</module>
6263
</modules>

spring-cloud-oci-autoconfigure/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,11 @@ Licensed under the Universal Permissive License v 1.0 as shown at https://oss.or
9999
<artifactId>spring-cloud-oci-streaming</artifactId>
100100
<optional>true</optional>
101101
</dependency>
102+
<dependency>
103+
<groupId>com.oracle.cloud.spring</groupId>
104+
<artifactId>spring-cloud-oci-vault</artifactId>
105+
<optional>true</optional>
106+
</dependency>
102107
<dependency>
103108
<groupId>com.oracle.cloud.spring</groupId>
104109
<artifactId>spring-cloud-oci-queue</artifactId>
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
// Copyright (c) 2024, Oracle and/or its affiliates.
2+
// Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
3+
package com.oracle.cloud.spring.vault;
4+
5+
6+
import com.oracle.bmc.auth.RegionProvider;
7+
import com.oracle.bmc.secrets.Secrets;
8+
import com.oracle.bmc.secrets.SecretsClient;
9+
import com.oracle.bmc.vault.Vaults;
10+
import com.oracle.bmc.vault.VaultsClient;
11+
import com.oracle.cloud.spring.autoconfigure.core.CredentialsProvider;
12+
import org.springframework.beans.factory.annotation.Qualifier;
13+
import org.springframework.boot.autoconfigure.AutoConfiguration;
14+
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
15+
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
16+
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
17+
import org.springframework.boot.context.properties.EnableConfigurationProperties;
18+
import org.springframework.cloud.context.config.annotation.RefreshScope;
19+
import org.springframework.context.annotation.Bean;
20+
21+
import static com.oracle.cloud.spring.autoconfigure.core.CredentialsProviderAutoConfiguration.credentialsProviderQualifier;
22+
import static com.oracle.cloud.spring.autoconfigure.core.RegionProviderAutoConfiguration.regionProviderQualifier;
23+
24+
/**
25+
* Auto-configuration for initializing the OCI Vault component.
26+
* Depends on {@link com.oracle.cloud.spring.autoconfigure.core.CredentialsProviderAutoConfiguration} and
27+
* {@link com.oracle.cloud.spring.autoconfigure.core.RegionProviderAutoConfiguration}
28+
* for loading the Authentication configuration
29+
*
30+
* @see Vault
31+
*/
32+
@AutoConfiguration
33+
@ConditionalOnClass({Vault.class})
34+
@EnableConfigurationProperties(VaultProperties.class)
35+
@ConditionalOnProperty(name = "spring.cloud.oci.vault.enabled", havingValue = "true", matchIfMissing = true)
36+
public class VaultAutoConfiguration {
37+
private final VaultProperties properties;
38+
39+
public VaultAutoConfiguration(VaultProperties properties) {
40+
this.properties = properties;
41+
}
42+
43+
@Bean
44+
@RefreshScope
45+
@ConditionalOnMissingBean(Vault.class)
46+
public Vault vault(Vaults vaults, Secrets secrets) {
47+
return new VaultImpl(vaults, secrets, properties.getVaultId(), properties.getCompartment());
48+
}
49+
50+
@Bean
51+
@RefreshScope
52+
@ConditionalOnMissingBean
53+
public Vaults vaults(@Qualifier(regionProviderQualifier) RegionProvider regionProvider,
54+
@Qualifier(credentialsProviderQualifier)
55+
CredentialsProvider cp) {
56+
Vaults vaults = VaultsClient.builder()
57+
.build(cp.getAuthenticationDetailsProvider());
58+
if (regionProvider.getRegion() != null) {
59+
vaults.setRegion(regionProvider.getRegion());
60+
}
61+
return vaults;
62+
}
63+
64+
@Bean
65+
@RefreshScope
66+
@ConditionalOnMissingBean
67+
public Secrets secrets(@Qualifier(regionProviderQualifier) RegionProvider regionProvider,
68+
@Qualifier(credentialsProviderQualifier)
69+
CredentialsProvider cp) {
70+
Secrets secrets = SecretsClient.builder()
71+
.build(cp.getAuthenticationDetailsProvider());
72+
if (regionProvider.getRegion() != null) {
73+
secrets.setRegion(regionProvider.getRegion());
74+
}
75+
return secrets;
76+
}
77+
}
78+
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
// Copyright (c) 2024, Oracle and/or its affiliates.
2+
// Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
3+
package com.oracle.cloud.spring.vault;
4+
5+
import org.springframework.boot.context.properties.ConfigurationProperties;
6+
7+
@ConfigurationProperties(prefix = VaultProperties.PREFIX)
8+
public class VaultProperties {
9+
public static final String PREFIX = "spring.cloud.oci.vault";
10+
11+
private String compartment;
12+
private String vaultId;
13+
14+
public String getCompartment() {
15+
return compartment;
16+
}
17+
18+
public void setCompartment(String compartment) {
19+
this.compartment = compartment;
20+
}
21+
22+
public String getVaultId() {
23+
return vaultId;
24+
}
25+
26+
public void setVaultId(String vaultId) {
27+
this.vaultId = vaultId;
28+
}
29+
}

spring-cloud-oci-autoconfigure/src/main/resources/META-INF/additional-spring-configuration-metadata.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,12 @@
4848
"description": "Auto-configure OCI Cloud streaming components.",
4949
"defaultValue": true
5050
},
51+
{
52+
"name": "spring.cloud.oci.vault.enabled",
53+
"type": "java.lang.Boolean",
54+
"description": "Auto-configure OCI Cloud vault components.",
55+
"defaultValue": true
56+
},
5157
{
5258
"name": "spring.cloud.oci.queue.enabled",
5359
"type": "java.lang.Boolean",

spring-cloud-oci-autoconfigure/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,4 @@ com.oracle.cloud.spring.function.FunctionAutoConfiguration
88
com.oracle.cloud.spring.streaming.StreamingAutoConfiguration
99
com.oracle.cloud.spring.queue.QueueAutoConfiguration
1010
com.oracle.cloud.spring.genai.GenAIAutoConfiguration
11+
com.oracle.cloud.spring.vault.VaultAutoConfiguration

spring-cloud-oci-dependencies/pom.xml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,11 @@
7070
<artifactId>spring-cloud-oci-storage</artifactId>
7171
<version>${project.version}</version>
7272
</dependency>
73+
<dependency>
74+
<groupId>com.oracle.cloud.spring</groupId>
75+
<artifactId>spring-cloud-oci-vault</artifactId>
76+
<version>${project.version}</version>
77+
</dependency>
7378
<dependency>
7479
<groupId>com.oracle.cloud.spring</groupId>
7580
<artifactId>spring-cloud-oci-function</artifactId>
@@ -105,6 +110,11 @@
105110
<artifactId>spring-cloud-oci-starter-streaming</artifactId>
106111
<version>${project.version}</version>
107112
</dependency>
113+
<dependency>
114+
<groupId>com.oracle.cloud.spring</groupId>
115+
<artifactId>spring-cloud-oci-starter-vault</artifactId>
116+
<version>${project.version}</version>
117+
</dependency>
108118
<dependency>
109119
<groupId>com.oracle.cloud.spring</groupId>
110120
<artifactId>spring-cloud-oci-starter-storage</artifactId>

spring-cloud-oci-samples/pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ Licensed under the Universal Permissive License v 1.0 as shown at https://oss.or
2121
<module>spring-cloud-oci-gen-ai-sample</module>
2222
<module>spring-cloud-oci-logging-sample</module>
2323
<module>spring-cloud-oci-streaming-sample</module>
24+
<module>spring-cloud-oci-vault-sample</module>
2425
<module>spring-cloud-oci-queue-sample</module>
2526
<module>spring-cloud-oci-function-sample</module>
2627
</modules>
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
Copyright (c) 2024, Oracle and/or its affiliates.
4+
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
5+
-->
6+
7+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
8+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
9+
<parent>
10+
<groupId>com.oracle.cloud.spring</groupId>
11+
<artifactId>spring-cloud-oci-samples</artifactId>
12+
<version>1.1.0-SNAPSHOT</version>
13+
</parent>
14+
<modelVersion>4.0.0</modelVersion>
15+
<groupId>com.oracle.cloud.spring.sample.genai</groupId>
16+
<artifactId>spring-cloud-oci-vault-sample</artifactId>
17+
<name>spring-cloud-oci-vault-sample</name>
18+
<description>spring-cloud-oci-vault-sample</description>
19+
<licenses>
20+
<license>
21+
<name>The Universal Permissive License (UPL), Version 1.0</name>
22+
<url>https://oss.oracle.com/licenses/upl/</url>
23+
<distribution>repo</distribution>
24+
</license>
25+
</licenses>
26+
<properties>
27+
<java.version>17</java.version>
28+
</properties>
29+
<dependencies>
30+
<dependency>
31+
<groupId>com.oracle.cloud.spring</groupId>
32+
<artifactId>spring-cloud-oci-starter-vault</artifactId>
33+
</dependency>
34+
<dependency>
35+
<groupId>com.oracle.cloud.spring.sample.common</groupId>
36+
<artifactId>spring-cloud-oci-common-samples-utils</artifactId>
37+
</dependency>
38+
<dependency>
39+
<groupId>com.oracle.cloud.spring.sample.common</groupId>
40+
<artifactId>spring-cloud-oci-common-samples-utils</artifactId>
41+
<type>test-jar</type>
42+
</dependency>
43+
</dependencies>
44+
45+
<build>
46+
<plugins>
47+
<plugin>
48+
<groupId>org.springframework.boot</groupId>
49+
<artifactId>spring-boot-maven-plugin</artifactId>
50+
</plugin>
51+
</plugins>
52+
</build>
53+
54+
55+
</project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
// Copyright (c) 2024, Oracle and/or its affiliates.
2+
// Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
3+
package com.oracle.cloud.spring.sample.vault.springcloudocivaultsample;
4+
5+
import org.springframework.boot.SpringApplication;
6+
import org.springframework.boot.autoconfigure.SpringBootApplication;
7+
8+
@SpringBootApplication
9+
public class SpringCloudOciVaultSampleApplication {
10+
public static void main(String[] args) {
11+
SpringApplication.run(SpringCloudOciVaultSampleApplication.class, args);
12+
}
13+
}

0 commit comments

Comments
 (0)