Skip to content

Commit 6a7fe19

Browse files
authored
Fix #1418 Expose AwsCredentialsProvider to AmazonS3InstallationService (#1419)
1 parent 253cffc commit 6a7fe19

File tree

2 files changed

+57
-8
lines changed

2 files changed

+57
-8
lines changed

bolt/src/main/java/com/slack/api/bolt/service/builtin/AmazonS3InstallationService.java

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,12 @@
1414
import software.amazon.awssdk.core.ResponseBytes;
1515
import software.amazon.awssdk.core.sync.RequestBody;
1616
import software.amazon.awssdk.core.sync.ResponseTransformer;
17+
import software.amazon.awssdk.regions.Region;
1718
import software.amazon.awssdk.services.s3.S3Client;
1819
import software.amazon.awssdk.services.s3.model.*;
1920

2021
import java.io.IOException;
22+
import java.net.URI;
2123
import java.nio.charset.StandardCharsets;
2224
import java.util.Map;
2325
import java.util.Optional;
@@ -26,19 +28,38 @@
2628
public class AmazonS3InstallationService implements InstallationService {
2729

2830
private final String bucketName;
29-
private AwsCredentialsProvider credentialsProvider;
31+
32+
private final AwsCredentialsProvider credentialsProvider;
33+
private final Region region;
34+
private final URI endpointOverride;
35+
3036
private boolean historicalDataEnabled;
3137

3238
public AmazonS3InstallationService(String bucketName) {
39+
this(bucketName, DefaultCredentialsProvider.create(), null, null);
40+
}
41+
42+
public AmazonS3InstallationService(String bucketName, AwsCredentialsProvider credentialsProvider) {
43+
this(bucketName, credentialsProvider, null, null);
44+
}
45+
46+
public AmazonS3InstallationService(
47+
String bucketName,
48+
AwsCredentialsProvider credentialsProvider,
49+
Region region,
50+
String endpointOverride
51+
) {
3352
this.bucketName = bucketName;
53+
this.credentialsProvider = credentialsProvider;
54+
this.region = (region != null || System.getenv("AWS_REGION") == null) ? region : Region.of(System.getenv("AWS_REGION"));
55+
this.endpointOverride = (endpointOverride != null && !endpointOverride.isEmpty()) ? URI.create(endpointOverride) : null;
3456
}
3557

3658
@Override
3759
public Initializer initializer() {
3860
return (app) -> {
3961
// The first access to S3 tends to be slow on AWS Lambda.
40-
this.credentialsProvider = DefaultCredentialsProvider.create();
41-
AwsCredentials credentials = createCredentials(credentialsProvider);
62+
AwsCredentials credentials = createCredentials(this.credentialsProvider);
4263
if (credentials == null || credentials.accessKeyId() == null) {
4364
throw new IllegalStateException("AWS credentials not found");
4465
}
@@ -304,7 +325,11 @@ protected AwsCredentials createCredentials(AwsCredentialsProvider provider) {
304325
}
305326

306327
protected S3Client createS3Client() {
307-
return S3Client.builder().credentialsProvider(this.credentialsProvider).build();
328+
return S3Client.builder()
329+
.credentialsProvider(this.credentialsProvider)
330+
.region(this.region)
331+
.endpointOverride(this.endpointOverride)
332+
.build();
308333
}
309334

310335
private String getInstallerKey(Installer i) {

bolt/src/main/java/com/slack/api/bolt/service/builtin/AmazonS3OAuthStateService.java

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,11 @@
99
import software.amazon.awssdk.core.ResponseBytes;
1010
import software.amazon.awssdk.core.sync.RequestBody;
1111
import software.amazon.awssdk.core.sync.ResponseTransformer;
12+
import software.amazon.awssdk.regions.Region;
1213
import software.amazon.awssdk.services.s3.S3Client;
1314
import software.amazon.awssdk.services.s3.model.*;
1415

16+
import java.net.URI;
1517
import java.nio.charset.StandardCharsets;
1618

1719
/**
@@ -23,18 +25,36 @@
2325
public class AmazonS3OAuthStateService implements OAuthStateService {
2426

2527
private final String bucketName;
26-
private AwsCredentialsProvider credentialsProvider;
28+
29+
private final AwsCredentialsProvider credentialsProvider;
30+
private final Region region;
31+
private final URI endpointOverride;
2732

2833
public AmazonS3OAuthStateService(String bucketName) {
34+
this(bucketName, DefaultCredentialsProvider.create());
35+
}
36+
37+
public AmazonS3OAuthStateService(String bucketName, AwsCredentialsProvider credentialsProvider) {
38+
this(bucketName, credentialsProvider, null, null);
39+
}
40+
41+
public AmazonS3OAuthStateService(
42+
String bucketName,
43+
AwsCredentialsProvider credentialsProvider,
44+
Region region,
45+
String endpointOverride
46+
) {
2947
this.bucketName = bucketName;
48+
this.credentialsProvider = credentialsProvider;
49+
this.region = (region != null || System.getenv("AWS_REGION") == null) ? region : Region.of(System.getenv("AWS_REGION"));
50+
this.endpointOverride = (endpointOverride != null && !endpointOverride.isEmpty()) ? URI.create(endpointOverride) : null;
3051
}
3152

3253
@Override
3354
public Initializer initializer() {
3455
return (app) -> {
3556
// The first access to S3 tends to be slow on AWS Lambda.
36-
this.credentialsProvider = DefaultCredentialsProvider.create();
37-
AwsCredentials credentials = createCredentials(credentialsProvider);
57+
AwsCredentials credentials = createCredentials(this.credentialsProvider);
3858
if (credentials == null || credentials.accessKeyId() == null) {
3959
throw new IllegalStateException("AWS credentials not found");
4060
}
@@ -103,7 +123,11 @@ protected AwsCredentials createCredentials(AwsCredentialsProvider provider) {
103123
}
104124

105125
protected S3Client createS3Client() {
106-
return S3Client.builder().credentialsProvider(this.credentialsProvider).build();
126+
return S3Client.builder()
127+
.credentialsProvider(this.credentialsProvider)
128+
.region(this.region)
129+
.endpointOverride(this.endpointOverride)
130+
.build();
107131
}
108132

109133
private String getKey(String state) {

0 commit comments

Comments
 (0)