/*
* Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License").
* You may not use this file except in compliance with the License.
* A copy of the License is located at
*
* http://aws.amazon.com/apache2.0
*
* or in the "license" file accompanying this file. This file is distributed
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the License for the specific language governing
* permissions and limitations under the License.
*/
package com.amazonaws.codepipeline.jenkinsplugin;
import java.util.Objects;
import com.amazonaws.ClientConfiguration;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.AWSCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.regions.Region;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.codepipeline.AWSCodePipeline;
import com.amazonaws.services.codepipeline.AWSCodePipelineClient;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3Client;
public class AWSClients {
private final AWSCodePipeline codePipelineClient;
private final ClientConfiguration clientCfg;
private final Region region;
private final S3ClientFactory s3ClientFactory;
public AWSClients(
final Region region,
final AWSCredentials credentials,
final String proxyHost,
final int proxyPort,
final String pluginVersion,
final CodePipelineClientFactory codePipelineClientFactory,
final S3ClientFactory s3ClientFactory) {
if (region == null) {
this.region = Region.getRegion(Regions.US_EAST_1);
} else {
this.region = region;
}
this.clientCfg = new ClientConfiguration().withUserAgent(pluginVersion);
if (proxyHost != null && proxyPort > 0) {
clientCfg.setProxyHost(proxyHost);
clientCfg.setProxyPort(proxyPort);
}
this.codePipelineClient = codePipelineClientFactory.getAWSCodePipelineClient(credentials, clientCfg);
this.codePipelineClient.setRegion(this.region);
this.s3ClientFactory = s3ClientFactory;
}
public static AWSClients fromDefaultCredentialChain(
final Region region,
final String proxyHost,
final int proxyPort,
final String pluginVersion) {
return new AWSClients(region, null, proxyHost, proxyPort, pluginVersion, new CodePipelineClientFactory(), new S3ClientFactory());
}
public static AWSClients fromBasicCredentials(
final Region region,
final String awsAccessKey,
final String awsSecretKey,
final String proxyHost,
final int proxyPort,
final String pluginVersion) {
return new AWSClients(
region,
new BasicAWSCredentials(awsAccessKey, awsSecretKey),
proxyHost,
proxyPort,
pluginVersion,
new CodePipelineClientFactory(),
new S3ClientFactory());
}
public AmazonS3 getS3Client(final AWSCredentialsProvider credentialsProvider) {
Objects.requireNonNull(credentialsProvider, "credentialsProvider must not be null");
Objects.requireNonNull(region, "region must not be null");
final AmazonS3 client = s3ClientFactory.getS3Client(credentialsProvider, new ClientConfiguration(clientCfg).withSignerOverride("AWSS3V4SignerType"));
client.setRegion(region);
return client;
}
public AWSCodePipeline getCodePipelineClient() {
return codePipelineClient;
}
public static class CodePipelineClientFactory {
public AWSCodePipeline getAWSCodePipelineClient(final AWSCredentials credentials, final ClientConfiguration clientCfg) {
if (credentials == null) {
return new AWSCodePipelineClient(clientCfg);
} else {
return new AWSCodePipelineClient(credentials, clientCfg);
}
}
}
public static class S3ClientFactory {
public AmazonS3 getS3Client(final AWSCredentialsProvider credentialsProvider, final ClientConfiguration clientCfg) {
return new AmazonS3Client(credentialsProvider, clientCfg);
}
}
}