package org.rakam.aws; import com.amazonaws.auth.AWSCredentialsProvider; import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.auth.DefaultAWSCredentialsProviderChain; import com.amazonaws.internal.StaticCredentialsProvider; import com.amazonaws.regions.Region; import com.amazonaws.regions.Regions; import io.airlift.configuration.Config; public class AWSConfig { private String accessKey; private String secretAccessKey; private String eventStoreStreamName; private String region; private String eventStoreBulkS3Bucket; private String s3Endpoint; private String kinesisEndpoint; private String dynamodbEndpoint; private String lambdaEndpoint; public String getEventStoreStreamName() { return eventStoreStreamName; } @Config("event.store.kinesis.stream") public AWSConfig setEventStoreStreamName(String eventStoreStreamName) { this.eventStoreStreamName = eventStoreStreamName; return this; } @Config("event.store.bulk.s3-bucket") public AWSConfig setEventStoreBulkS3Bucket(String eventStoreBulkS3Bucket) { this.eventStoreBulkS3Bucket = eventStoreBulkS3Bucket; return this; } public String getEventStoreBulkS3Bucket() { return eventStoreBulkS3Bucket; } @Config("aws.access-key") public AWSConfig setAccessKey(String accessKey) { this.accessKey = accessKey; return this; } public String getAccessKey() { return accessKey; } @Config("aws.secret-access-key") public AWSConfig setSecretAccessKey(String secretAccessKey) { this.secretAccessKey = secretAccessKey; return this; } @Config("aws.region") public AWSConfig setRegion(String region) { this.region = region; return this; } public String getRegion() { return region; } @Config("aws.s3-endpoint") public AWSConfig setS3Endpoint(String s3Endpoint) { this.s3Endpoint = s3Endpoint; return this; } public String getS3Endpoint() { return s3Endpoint; } @Config("aws.kinesis-endpoint") public AWSConfig setKinesisEndpoint(String kinesisEndpoint) { this.kinesisEndpoint = kinesisEndpoint; return this; } public String getKinesisEndpoint() { return kinesisEndpoint; } @Config("aws.lambda-endpoint") public AWSConfig setLambdaEndpoint(String lambdaEndpoint) { this.lambdaEndpoint = lambdaEndpoint; return this; } public String getLambdaEndpoint() { return lambdaEndpoint; } public Region getAWSRegion() { return Region.getRegion(region == null || region.isEmpty() ? Regions.DEFAULT_REGION : Regions.fromName(region)); } public String getSecretAccessKey() { return secretAccessKey; } public AWSCredentialsProvider getCredentials() { // TODO: add an extra option the allow these values to be NULL. if(accessKey == null || secretAccessKey == null) { return new DefaultAWSCredentialsProviderChain(); } return new StaticCredentialsProvider(new BasicAWSCredentials(getAccessKey(), getSecretAccessKey())); } @Config("aws.dynamodb-endpoint") public AWSConfig setDynamodbEndpoint(String dynamodbEndpoint) { this.dynamodbEndpoint = dynamodbEndpoint; return this; } public String getDynamodbEndpoint() { return dynamodbEndpoint; } }