Skip to content

Commit a357255

Browse files
committed
Move secrets out
1 parent a4d019a commit a357255

File tree

13 files changed

+190
-98
lines changed

13 files changed

+190
-98
lines changed

examples/powertools-examples-parameters/pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,12 @@
2424
<artifactId>powertools-parameters-ssm</artifactId>
2525
<version>${project.version}</version>
2626
</dependency>
27+
<dependency>
28+
<groupId>software.amazon.lambda</groupId>
29+
<artifactId>powertools-parameters-secrets</artifactId>
30+
<version>${project.version}</version>
31+
</dependency>
32+
2733
<dependency>
2834
<groupId>com.amazonaws</groupId>
2935
<artifactId>aws-lambda-java-core</artifactId>

examples/powertools-examples-parameters/src/main/java/org/demo/parameters/ParametersFunction.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,16 +32,18 @@
3232
import org.apache.logging.log4j.LogManager;
3333
import org.apache.logging.log4j.Logger;
3434
import software.amazon.lambda.powertools.parameters.ParamManager;
35+
import software.amazon.lambda.powertools.parameters.secrets.SecretsProvider;
3536
import software.amazon.lambda.powertools.parameters.ssm.SSMProvider;
36-
import software.amazon.lambda.powertools.parameters.SecretsProvider;
3737

3838
public class ParametersFunction implements RequestHandler<APIGatewayProxyRequestEvent, APIGatewayProxyResponseEvent> {
3939
private final static Logger log = LogManager.getLogger(ParametersFunction.class);
4040

4141
SSMProvider ssmProvider = SSMProvider
4242
.builder()
4343
.build();
44-
SecretsProvider secretsProvider = ParamManager.getSecretsProvider();
44+
SecretsProvider secretsProvider = SecretsProvider
45+
.builder()
46+
.build();
4547

4648
String simpleValue = ssmProvider.defaultMaxAge(30, SECONDS).get("/powertools-java/sample/simplekey");
4749
String listValue = ssmProvider.withMaxAge(60, SECONDS).get("/powertools-java/sample/keylist");

pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
<module>examples</module>
5757
<module>powertools-parameters/powertools-parameters-ssm</module>
5858
<module>powertools-parameters/powertools-parameters-tests</module>
59+
<module>powertools-parameters/powertools-parameters-secrets</module>
5960
</modules>
6061

6162
<scm>

powertools-parameters/pom.xml

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -58,20 +58,6 @@
5858
<groupId>software.amazon.lambda</groupId>
5959
<artifactId>powertools-common</artifactId>
6060
</dependency>
61-
<dependency>
62-
<groupId>software.amazon.awssdk</groupId>
63-
<artifactId>secretsmanager</artifactId>
64-
<exclusions>
65-
<exclusion>
66-
<groupId>software.amazon.awssdk</groupId>
67-
<artifactId>apache-client</artifactId>
68-
</exclusion>
69-
<exclusion>
70-
<groupId>software.amazon.awssdk</groupId>
71-
<artifactId>netty-nio-client</artifactId>
72-
</exclusion>
73-
</exclusions>
74-
</dependency>
7561
<dependency>
7662
<groupId>software.amazon.awssdk</groupId>
7763
<artifactId>url-connection-client</artifactId>
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<modelVersion>4.0.0</modelVersion>
6+
7+
<parent>
8+
<groupId>software.amazon.lambda</groupId>
9+
<artifactId>powertools-parent</artifactId>
10+
<version>2.0.0-SNAPSHOT</version>
11+
<relativePath>../../pom.xml</relativePath>
12+
</parent>
13+
14+
<artifactId>powertools-parameters-secrets</artifactId>
15+
<name>Powertools for AWS Lambda (Java) library Parameters - Secrets Manager</name>
16+
<description>Secrets Manager implementation for the Parameters module</description>
17+
18+
<issueManagement>
19+
<system>GitHub Issues</system>
20+
<url>https://github.com/aws-powertools/powertools-lambda-java/issues</url>
21+
</issueManagement>
22+
<scm>
23+
<url>https://github.com/aws-powertools/powertools-lambda-java.git</url>
24+
</scm>
25+
<developers>
26+
<developer>
27+
<name>Powertools for AWS Lambda team</name>
28+
<organization>Amazon Web Services</organization>
29+
<organizationUrl>https://aws.amazon.com/</organizationUrl>
30+
</developer>
31+
</developers>
32+
33+
<distributionManagement>
34+
<snapshotRepository>
35+
<id>ossrh</id>
36+
<url>https://aws.oss.sonatype.org/content/repositories/snapshots</url>
37+
</snapshotRepository>
38+
</distributionManagement>
39+
40+
<dependencies>
41+
<dependency>
42+
<groupId>software.amazon.lambda</groupId>
43+
<artifactId>powertools-parameters</artifactId>
44+
<version>${project.version}</version>
45+
</dependency>
46+
47+
<dependency>
48+
<groupId>software.amazon.awssdk</groupId>
49+
<artifactId>secretsmanager</artifactId>
50+
<exclusions>
51+
<exclusion>
52+
<groupId>software.amazon.awssdk</groupId>
53+
<artifactId>apache-client</artifactId>
54+
</exclusion>
55+
<exclusion>
56+
<groupId>software.amazon.awssdk</groupId>
57+
<artifactId>netty-nio-client</artifactId>
58+
</exclusion>
59+
</exclusions>
60+
</dependency>
61+
62+
<!-- Test dependencies -->
63+
<dependency>
64+
<groupId>org.junit.jupiter</groupId>
65+
<artifactId>junit-jupiter-api</artifactId>
66+
<scope>test</scope>
67+
</dependency>
68+
<dependency>
69+
<groupId>org.junit.jupiter</groupId>
70+
<artifactId>junit-jupiter-engine</artifactId>
71+
<scope>test</scope>
72+
</dependency>
73+
<dependency>
74+
<groupId>org.mockito</groupId>
75+
<artifactId>mockito-core</artifactId>
76+
<scope>test</scope>
77+
</dependency>
78+
<dependency>
79+
<groupId>org.mockito</groupId>
80+
<artifactId>mockito-inline</artifactId>
81+
<scope>test</scope>
82+
</dependency>
83+
<dependency>
84+
<groupId>org.apache.commons</groupId>
85+
<artifactId>commons-lang3</artifactId>
86+
<scope>test</scope>
87+
</dependency>
88+
<dependency>
89+
<groupId>org.assertj</groupId>
90+
<artifactId>assertj-core</artifactId>
91+
<scope>test</scope>
92+
</dependency>
93+
<dependency>
94+
<groupId>org.aspectj</groupId>
95+
<artifactId>aspectjweaver</artifactId>
96+
<scope>test</scope>
97+
</dependency>
98+
</dependencies>
99+
100+
<build>
101+
<plugins>
102+
<plugin>
103+
<artifactId>maven-surefire-plugin</artifactId>
104+
<version>3.1.2</version>
105+
<configuration>
106+
<environmentVariables>
107+
<AWS_REGION>eu-central-1</AWS_REGION>
108+
</environmentVariables>
109+
</configuration>
110+
</plugin>
111+
<plugin>
112+
<groupId>org.apache.maven.plugins</groupId>
113+
<artifactId>maven-checkstyle-plugin</artifactId>
114+
</plugin>
115+
</plugins>
116+
</build>
117+
</project>

powertools-parameters/src/main/java/software/amazon/lambda/powertools/parameters/SecretsProvider.java renamed to powertools-parameters/powertools-parameters-secrets/src/main/java/software/amazon/lambda/powertools/parameters/secrets/SecretsProvider.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
*
1313
*/
1414

15-
package software.amazon.lambda.powertools.parameters;
15+
package software.amazon.lambda.powertools.parameters.secrets;
1616

1717
import static java.nio.charset.StandardCharsets.UTF_8;
1818

@@ -27,6 +27,7 @@
2727
import software.amazon.awssdk.services.secretsmanager.SecretsManagerClient;
2828
import software.amazon.awssdk.services.secretsmanager.model.GetSecretValueRequest;
2929
import software.amazon.lambda.powertools.common.internal.UserAgentConfigurator;
30+
import software.amazon.lambda.powertools.parameters.BaseProvider;
3031
import software.amazon.lambda.powertools.parameters.cache.CacheManager;
3132
import software.amazon.lambda.powertools.parameters.transform.TransformationManager;
3233
import software.amazon.lambda.powertools.parameters.transform.Transformer;
@@ -151,7 +152,7 @@ SecretsManagerClient getClient() {
151152
return client;
152153
}
153154

154-
static class Builder {
155+
public static class Builder {
155156

156157
private SecretsManagerClient client;
157158
private CacheManager cacheManager;
@@ -163,7 +164,7 @@ private static SecretsManagerClient createClient() {
163164
.region(Region.of(System.getenv(SdkSystemSetting.AWS_REGION.environmentVariable())))
164165
.overrideConfiguration(ClientOverrideConfiguration.builder()
165166
.putAdvancedOption(SdkAdvancedClientOption.USER_AGENT_SUFFIX,
166-
UserAgentConfigurator.getUserAgent(PARAMETERS)).build())
167+
UserAgentConfigurator.getUserAgent(BaseProvider.PARAMETERS)).build())
167168
.build();
168169
}
169170

@@ -174,7 +175,8 @@ private static SecretsManagerClient createClient() {
174175
*/
175176
public SecretsProvider build() {
176177
if (cacheManager == null) {
177-
throw new IllegalStateException("No CacheManager provided, please provide one");
178+
// TODO - what should we do with this
179+
cacheManager = new CacheManager();
178180
}
179181
SecretsProvider provider;
180182
if (client == null) {
Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,21 +12,24 @@
1212
*
1313
*/
1414

15-
package software.amazon.lambda.powertools.parameters;
15+
package software.amazon.lambda.powertools.parameters.secrets;
1616

1717
import static org.assertj.core.api.Assertions.assertThat;
1818
import static org.assertj.core.api.Assertions.assertThatIllegalStateException;
1919
import static org.assertj.core.api.Assertions.assertThatRuntimeException;
20+
import static org.junit.jupiter.api.Assertions.assertNotNull;
2021
import static org.mockito.MockitoAnnotations.openMocks;
2122

2223
import java.time.temporal.ChronoUnit;
2324
import java.util.Base64;
25+
import org.assertj.core.api.Assertions;
2426
import org.junit.jupiter.api.BeforeEach;
2527
import org.junit.jupiter.api.Test;
2628
import org.mockito.ArgumentCaptor;
2729
import org.mockito.Captor;
2830
import org.mockito.Mock;
2931
import org.mockito.Mockito;
32+
import org.mockito.MockitoAnnotations;
3033
import software.amazon.awssdk.core.SdkBytes;
3134
import software.amazon.awssdk.services.secretsmanager.SecretsManagerClient;
3235
import software.amazon.awssdk.services.secretsmanager.model.GetSecretValueRequest;
@@ -51,7 +54,7 @@ public class SecretsProviderTest {
5154

5255
@BeforeEach
5356
public void init() {
54-
openMocks(this);
57+
MockitoAnnotations.openMocks(this);
5558
cacheManager = new CacheManager();
5659
provider = new SecretsProvider(cacheManager, client);
5760
}
@@ -67,8 +70,8 @@ public void getValue() {
6770

6871
String value = provider.getValue(key);
6972

70-
assertThat(value).isEqualTo(expectedValue);
71-
assertThat(paramCaptor.getValue().secretId()).isEqualTo(key);
73+
Assertions.assertThat(value).isEqualTo(expectedValue);
74+
Assertions.assertThat(paramCaptor.getValue().secretId()).isEqualTo(key);
7275
}
7376

7477
@Test
@@ -82,27 +85,28 @@ public void getValueBase64() {
8285

8386
String value = provider.getValue(key);
8487

85-
assertThat(value).isEqualTo(expectedValue);
86-
assertThat(paramCaptor.getValue().secretId()).isEqualTo(key);
88+
Assertions.assertThat(value).isEqualTo(expectedValue);
89+
Assertions.assertThat(paramCaptor.getValue().secretId()).isEqualTo(key);
8790
}
8891

8992
@Test
9093
public void getMultipleValuesThrowsException() {
9194

9295
// Act & Assert
93-
assertThatRuntimeException().isThrownBy(() -> provider.getMultipleValues("path"))
96+
Assertions.assertThatRuntimeException().isThrownBy(() -> provider.getMultipleValues("path"))
9497
.withMessage("Impossible to get multiple values from AWS Secrets Manager");
9598

9699
}
97100

98101
@Test
99-
public void testSecretsProviderBuilderMissingCacheManager_throwsException() {
102+
public void testGetSecretsProvider_withoutParameter_shouldCreateDefaultClient() {
100103

101-
// Act & Assert
102-
assertThatIllegalStateException().isThrownBy(() -> SecretsProvider.builder()
103-
.withClient(client)
104-
.withTransformationManager(transformationManager)
105-
.build())
106-
.withMessage("No CacheManager provided, please provide one");
104+
// Act
105+
SecretsProvider secretsProvider = SecretsProvider.builder()
106+
.build();
107+
108+
// Assert
109+
assertNotNull(secretsProvider);
110+
assertNotNull(secretsProvider.getClient());
107111
}
108112
}

powertools-parameters/powertools-parameters-ssm/pom.xml

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,21 @@
4444
<version>${project.version}</version>
4545
</dependency>
4646

47+
<dependency>
48+
<groupId>software.amazon.awssdk</groupId>
49+
<artifactId>ssm</artifactId>
50+
<exclusions>
51+
<exclusion>
52+
<groupId>software.amazon.awssdk</groupId>
53+
<artifactId>apache-client</artifactId>
54+
</exclusion>
55+
<exclusion>
56+
<groupId>software.amazon.awssdk</groupId>
57+
<artifactId>netty-nio-client</artifactId>
58+
</exclusion>
59+
</exclusions>
60+
</dependency>
61+
4762
<!-- Test dependencies -->
4863
<dependency>
4964
<groupId>org.junit.jupiter</groupId>
@@ -80,20 +95,6 @@
8095
<artifactId>aspectjweaver</artifactId>
8196
<scope>test</scope>
8297
</dependency>
83-
<dependency>
84-
<groupId>software.amazon.awssdk</groupId>
85-
<artifactId>ssm</artifactId>
86-
<exclusions>
87-
<exclusion>
88-
<groupId>software.amazon.awssdk</groupId>
89-
<artifactId>apache-client</artifactId>
90-
</exclusion>
91-
<exclusion>
92-
<groupId>software.amazon.awssdk</groupId>
93-
<artifactId>netty-nio-client</artifactId>
94-
</exclusion>
95-
</exclusions>
96-
</dependency>
9798
</dependencies>
9899

99100
<build>

powertools-parameters/powertools-parameters-tests/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@
2323
<artifactId>powertools-parameters-ssm</artifactId>
2424
<version>${project.version}</version>
2525
</dependency>
26+
<dependency>
27+
<groupId>software.amazon.lambda</groupId>
28+
<artifactId>powertools-parameters-secrets</artifactId>
29+
<version>${project.version}</version>
30+
</dependency>
2631

2732
<!-- Test dependencies -->
2833
<dependency>

powertools-parameters/powertools-parameters-tests/src/test/java/software/amazon/lambda/powertools/parameters/LambdaParametersAspectTest.java

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -63,18 +63,19 @@ public void init() {
6363
}
6464

6565
@Test
66-
public void testDefault_ShouldUseSSMProvider() {
67-
try (MockedStatic<ParamManager> mocked = Mockito.mockStatic(ParamManager.class)) {
68-
mocked.when(() -> ParamManager.getProvider(SSMProvider.class)).thenReturn(defaultProvider);
69-
Mockito.when(defaultProvider.get("/default")).thenReturn("value");
70-
71-
Assertions.assertThat(defaultValue).isEqualTo("value");
72-
mocked.verify(() -> ParamManager.getProvider(SSMProvider.class), Mockito.times(1));
73-
Mockito.verify(defaultProvider, Mockito.times(1)).get("/default");
74-
75-
mocked.reset();
76-
}
77-
}
66+
// TODO - no more defaults!
67+
// public void testDefault_ShouldUseSSMProvider() {
68+
// try (MockedStatic<ParamManager> mocked = Mockito.mockStatic(ParamManager.class)) {
69+
// mocked.when(() -> ParamManager.getProvider(SSMProvider.class)).thenReturn(defaultProvider);
70+
// Mockito.when(defaultProvider.get("/default")).thenReturn("value");
71+
//
72+
// Assertions.assertThat(defaultValue).isEqualTo("value");
73+
// mocked.verify(() -> ParamManager.getProvider(SSMProvider.class), Mockito.times(1));
74+
// Mockito.verify(defaultProvider, Mockito.times(1)).get("/default");
75+
//
76+
// mocked.reset();
77+
// }
78+
// }
7879

7980
@Test
8081
public void testSimple() {

0 commit comments

Comments
 (0)