Skip to content
This repository was archived by the owner on Feb 26, 2025. It is now read-only.

Support for user-specified AWS credential providers #97

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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:
Expand Down
22 changes: 15 additions & 7 deletions src/main/java/com/upplication/s3fs/AmazonS3Factory.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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.
Expand All @@ -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";
Expand Down Expand Up @@ -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) {
Expand Down Expand Up @@ -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));
}
}
}