From 92c210ad0d41c62313875e3505059b0b9ef8d7fb Mon Sep 17 00:00:00 2001 From: Thomas Collett Date: Fri, 26 Jan 2018 15:18:37 +0000 Subject: [PATCH 1/2] Added support for specifying custom credentials provider --- .../com/upplication/s3fs/AmazonS3Factory.java | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/upplication/s3fs/AmazonS3Factory.java b/src/main/java/com/upplication/s3fs/AmazonS3Factory.java index 3de6557..b741b15 100644 --- a/src/main/java/com/upplication/s3fs/AmazonS3Factory.java +++ b/src/main/java/com/upplication/s3fs/AmazonS3Factory.java @@ -3,6 +3,7 @@ import com.amazonaws.ClientConfiguration; import com.amazonaws.Protocol; import com.amazonaws.auth.AWSCredentialsProvider; +import com.amazonaws.auth.AWSSessionCredentialsProvider; import com.amazonaws.auth.AWSStaticCredentialsProvider; import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.auth.DefaultAWSCredentialsProviderChain; @@ -13,6 +14,8 @@ import java.net.URI; import java.util.Properties; +import org.apache.http.client.CredentialsProvider; + /** * Factory base class to create a new AmazonS3 instance. @@ -21,6 +24,7 @@ public abstract class AmazonS3Factory { public static final String ACCESS_KEY = "s3fs_access_key"; public static final String SECRET_KEY = "s3fs_secret_key"; + public static final String CREDENTIALS_PROVIDER = "s3fs_credentials_provider"; public static final String REQUEST_METRIC_COLLECTOR_CLASS = "s3fs_request_metric_collector_class"; public static final String CONNECTION_TIMEOUT = "s3fs_connection_timeout"; public static final String MAX_CONNECTIONS = "s3fs_max_connections"; @@ -70,12 +74,16 @@ public AmazonS3 getAmazonS3(URI uri, Properties props) { protected abstract AmazonS3 createAmazonS3(AWSCredentialsProvider credentialsProvider, ClientConfiguration clientConfiguration, RequestMetricCollector requestMetricsCollector); protected AWSCredentialsProvider getCredentialsProvider(Properties props) { - AWSCredentialsProvider credentialsProvider; - if (props.getProperty(ACCESS_KEY) == null && props.getProperty(SECRET_KEY) == null) - credentialsProvider = new DefaultAWSCredentialsProviderChain(); - else - credentialsProvider = new AWSStaticCredentialsProvider(getAWSCredentials(props)); - return credentialsProvider; + AWSCredentialsProvider credentialsProvider; + Object userCredentialsProvider = props.get(CREDENTIALS_PROVIDER); + if (userCredentialsProvider != null && userCredentialsProvider instanceof AWSCredentialsProvider) { + credentialsProvider = (AWSCredentialsProvider) userCredentialsProvider; + } else if (props.getProperty(ACCESS_KEY) == null && props.getProperty(SECRET_KEY) == null) { + credentialsProvider = new DefaultAWSCredentialsProviderChain(); + } else { + credentialsProvider = new AWSStaticCredentialsProvider(getAWSCredentials(props)); + } + return credentialsProvider; } protected RequestMetricCollector getRequestMetricsCollector(Properties props) { @@ -140,4 +148,4 @@ protected ClientConfiguration getClientConfiguration(Properties props) { protected BasicAWSCredentials getAWSCredentials(Properties props) { return new BasicAWSCredentials(props.getProperty(ACCESS_KEY), props.getProperty(SECRET_KEY)); } -} \ No newline at end of file +} From 3ee959521508a205a4940f185ef1413d3b5e4771 Mon Sep 17 00:00:00 2001 From: Thomas Collett Date: Fri, 26 Jan 2018 16:07:33 +0000 Subject: [PATCH 2/2] Updated readme --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 33ff61d..ad09bcb 100644 --- a/README.md +++ b/README.md @@ -63,6 +63,7 @@ Complete settings lists: * s3fs_access_key * s3fs_secret_key +* s3fs_credentials_provider * s3fs_request_metric_collector_class * s3fs_connection_timeout * s3fs_max_connections @@ -163,7 +164,7 @@ private FileSystem s3FileSystem; #### Roadmap: -* Performance issue (slow querys with virtual folders, add multipart submit...) +* Performance issue (slow queries with virtual folders, add multipart submit...) * Disallow upload binary files with same name as folders and vice versa #### Out of Roadmap: