Skip to content
Merged
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
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
import software.amazon.awssdk.profiles.ProfileFile;

/**
* Context class that defines the required properties for creation of a Credentials provider*
* Context class that defines the required properties for creation of a Credentials provider.
*/
@SdkProtectedApi
public final class ProfileProviderCredentialsContext {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.function.Supplier;
import software.amazon.awssdk.annotations.SdkProtectedApi;
import software.amazon.awssdk.annotations.SdkTestInternalApi;
import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider;
Expand Down Expand Up @@ -245,7 +246,7 @@ private URI resolveEndpoint(SdkClientConfiguration config) {
private URI endpointFromConfig(SdkClientConfiguration config) {
return new DefaultServiceEndpointBuilder(serviceEndpointPrefix(), DEFAULT_ENDPOINT_PROTOCOL)
.withRegion(config.option(AwsClientOption.AWS_REGION))
.withProfileFile(() -> config.option(SdkClientOption.PROFILE_FILE))
.withProfileFile(profileFileSupplierOrFallbackToProfileFile(config))
.withProfileName(config.option(SdkClientOption.PROFILE_NAME))
.putAdvancedOption(ServiceMetadataAdvancedOption.DEFAULT_S3_US_EAST_1_REGIONAL_ENDPOINT,
config.option(ServiceMetadataAdvancedOption.DEFAULT_S3_US_EAST_1_REGIONAL_ENDPOINT))
Expand All @@ -272,10 +273,10 @@ private Region regionFromDefaultProvider(SdkClientConfiguration config) {
throw new IllegalStateException("No region was configured, and use-region-provider-chain was disabled.");
}

ProfileFile profileFile = config.option(SdkClientOption.PROFILE_FILE);
Supplier<ProfileFile> profileFile = profileFileSupplierOrFallbackToProfileFile(config);
String profileName = config.option(SdkClientOption.PROFILE_NAME);
return DefaultAwsRegionProviderChain.builder()
.profileFile(() -> profileFile)
.profileFile(profileFile)
.profileName(profileName)
.build()
.getRegion();
Expand All @@ -286,7 +287,7 @@ private DefaultsMode resolveDefaultsMode(SdkClientConfiguration config) {
config.option(AwsClientOption.DEFAULTS_MODE) != null ?
config.option(AwsClientOption.DEFAULTS_MODE) :
DefaultsModeResolver.create()
.profileFile(() -> config.option(SdkClientOption.PROFILE_FILE))
.profileFile(profileFileSupplierOrFallbackToProfileFile(config))
.profileName(config.option(SdkClientOption.PROFILE_NAME))
.resolve();

Expand All @@ -313,10 +314,10 @@ private Boolean resolveDualstackEndpointEnabled(SdkClientConfiguration config) {
* Load the dualstack endpoint setting from the default provider logic.
*/
private Boolean resolveUseDualstackFromDefaultProvider(SdkClientConfiguration config) {
ProfileFile profileFile = config.option(SdkClientOption.PROFILE_FILE);
Supplier<ProfileFile> profileFile = profileFileSupplierOrFallbackToProfileFile(config);
String profileName = config.option(SdkClientOption.PROFILE_NAME);
return DualstackEnabledProvider.builder()
.profileFile(() -> profileFile)
.profileFile(profileFile)
.profileName(profileName)
.build()
.isDualstackEnabled()
Expand All @@ -336,10 +337,10 @@ private Boolean resolveFipsEndpointEnabled(SdkClientConfiguration config) {
* Load the dualstack endpoint setting from the default provider logic.
*/
private Boolean resolveUseFipsFromDefaultProvider(SdkClientConfiguration config) {
ProfileFile profileFile = config.option(SdkClientOption.PROFILE_FILE);
Supplier<ProfileFile> profileFile = profileFileSupplierOrFallbackToProfileFile(config);
String profileName = config.option(SdkClientOption.PROFILE_NAME);
return FipsEnabledProvider.builder()
.profileFile(() -> profileFile)
.profileFile(profileFile)
.profileName(profileName)
.build()
.isFipsEnabled()
Expand All @@ -353,7 +354,7 @@ private AwsCredentialsProvider resolveCredentials(SdkClientConfiguration config)
return config.option(AwsClientOption.CREDENTIALS_PROVIDER) != null
? config.option(AwsClientOption.CREDENTIALS_PROVIDER)
: DefaultCredentialsProvider.builder()
.profileFile(config.option(SdkClientOption.PROFILE_FILE))
.profileFile(config.option(SdkClientOption.PROFILE_FILE_SUPPLIER))
.profileName(config.option(SdkClientOption.PROFILE_NAME))
.build();
}
Expand All @@ -370,7 +371,7 @@ private RetryPolicy resolveAwsRetryPolicy(SdkClientConfiguration config) {
}

RetryMode retryMode = RetryMode.resolver()
.profileFile(() -> config.option(SdkClientOption.PROFILE_FILE))
.profileFile(profileFileSupplierOrFallbackToProfileFile(config))
.profileName(config.option(SdkClientOption.PROFILE_NAME))
.defaultRetryMode(config.option(SdkClientOption.DEFAULT_RETRY_MODE))
.resolve();
Expand Down Expand Up @@ -466,4 +467,13 @@ private static Pair<Region, Optional<Boolean>> transformFipsPseudoRegionIfNecess

return Pair.of(region, Optional.empty());
}

private Supplier<ProfileFile> profileFileSupplierOrFallbackToProfileFile(SdkClientConfiguration config) {
Supplier<ProfileFile> profileFile = config.option(SdkClientOption.PROFILE_FILE_SUPPLIER);
if (profileFile != null) {
return profileFile;
}

return () -> config.option(SdkClientOption.PROFILE_FILE);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ private AwsExecutionContextBuilder() {
.putAttribute(SdkExecutionAttribute.CLIENT_TYPE, clientConfig.option(SdkClientOption.CLIENT_TYPE))
.putAttribute(SdkExecutionAttribute.SERVICE_NAME, clientConfig.option(SdkClientOption.SERVICE_NAME))
.putAttribute(SdkExecutionAttribute.PROFILE_FILE, clientConfig.option(SdkClientOption.PROFILE_FILE))
.putAttribute(SdkExecutionAttribute.PROFILE_FILE_SUPPLIER, clientConfig.option(SdkClientOption.PROFILE_FILE_SUPPLIER))
.putAttribute(SdkExecutionAttribute.PROFILE_NAME, clientConfig.option(SdkClientOption.PROFILE_NAME))
.putAttribute(AwsExecutionAttribute.DUALSTACK_ENDPOINT_ENABLED,
clientConfig.option(AwsClientOption.DUALSTACK_ENDPOINT_ENABLED))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import java.util.Collections;
import java.util.List;
import java.util.Optional;
import java.util.function.Supplier;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
Expand All @@ -48,6 +49,7 @@
import software.amazon.awssdk.core.interceptor.trait.HttpChecksum;
import software.amazon.awssdk.core.internal.util.HttpChecksumUtils;
import software.amazon.awssdk.core.signer.Signer;
import software.amazon.awssdk.profiles.ProfileFile;

@RunWith(MockitoJUnitRunner.class)
public class AwsExecutionContextBuilderTest {
Expand Down Expand Up @@ -178,6 +180,22 @@ public void invokeInterceptorsAndCreateExecutionContext_multipleExecutionContext
assertThat(checksumSpecs1).isNotSameAs(checksumSpecs2);
assertThat(checksumSpecs2).isSameAs(checksumSpecs3);
}

@Test
public void invokeInterceptorsAndCreateExecutionContext_profileFileSupplier_storesValueInExecutionAttributes() {
ClientExecutionParams<SdkRequest, SdkResponse> executionParams = clientExecutionParams();
Supplier<ProfileFile> profileFileSupplier = () -> null;
SdkClientConfiguration clientConfig = testClientConfiguration()
.option(SdkClientOption.PROFILE_FILE_SUPPLIER, profileFileSupplier)
.build();

ExecutionContext executionContext =
AwsExecutionContextBuilder.invokeInterceptorsAndCreateExecutionContext(executionParams, clientConfig);

ExecutionAttributes executionAttributes = executionContext.executionAttributes();

assertThat(profileFileSupplier).isSameAs(executionAttributes.getAttribute(SdkExecutionAttribute.PROFILE_FILE_SUPPLIER));
}

private ClientExecutionParams<SdkRequest, SdkResponse> clientExecutionParams() {
return new ClientExecutionParams<SdkRequest, SdkResponse>()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
import static software.amazon.awssdk.core.client.config.SdkClientOption.INTERNAL_USER_AGENT;
import static software.amazon.awssdk.core.client.config.SdkClientOption.METRIC_PUBLISHERS;
import static software.amazon.awssdk.core.client.config.SdkClientOption.PROFILE_FILE;
import static software.amazon.awssdk.core.client.config.SdkClientOption.PROFILE_FILE_SUPPLIER;
import static software.amazon.awssdk.core.client.config.SdkClientOption.PROFILE_NAME;
import static software.amazon.awssdk.core.client.config.SdkClientOption.RETRY_POLICY;
import static software.amazon.awssdk.core.client.config.SdkClientOption.SCHEDULED_EXECUTOR_SERVICE;
Expand Down Expand Up @@ -86,6 +87,7 @@
import software.amazon.awssdk.http.async.SdkAsyncHttpClient;
import software.amazon.awssdk.metrics.MetricPublisher;
import software.amazon.awssdk.profiles.ProfileFile;
import software.amazon.awssdk.profiles.ProfileFileSupplier;
import software.amazon.awssdk.profiles.ProfileFileSystemSetting;
import software.amazon.awssdk.utils.AttributeMap;
import software.amazon.awssdk.utils.Either;
Expand Down Expand Up @@ -231,6 +233,9 @@ private SdkClientConfiguration setOverrides(SdkClientConfiguration configuration
builder.option(DISABLE_HOST_PREFIX_INJECTION,
clientOverrideConfiguration.advancedOption(DISABLE_HOST_PREFIX_INJECTION).orElse(null));
builder.option(PROFILE_FILE, clientOverrideConfiguration.defaultProfileFile().orElse(null));
builder.option(PROFILE_FILE_SUPPLIER, clientOverrideConfiguration.defaultProfileFile()
.map(ProfileFileSupplier::fixedProfileFile)
.orElse(null));
builder.option(PROFILE_NAME, clientOverrideConfiguration.defaultProfileName().orElse(null));
builder.option(METRIC_PUBLISHERS, clientOverrideConfiguration.metricPublishers());
builder.option(EXECUTION_ATTRIBUTES, clientOverrideConfiguration.executionAttributes());
Expand Down Expand Up @@ -261,11 +266,15 @@ protected SdkClientConfiguration mergeChildDefaults(SdkClientConfiguration confi
private SdkClientConfiguration mergeGlobalDefaults(SdkClientConfiguration configuration) {
// Don't load the default profile file if the customer already gave us one.
ProfileFile configuredProfileFile = configuration.option(PROFILE_FILE);
ProfileFile profileFile = configuredProfileFile != null ? configuredProfileFile : ProfileFile.defaultProfileFile();
ProfileFile profileFile = Optional.ofNullable(configuredProfileFile).orElse(ProfileFile.defaultProfileFile());

Supplier<ProfileFile> configuredProfileFileSupplier = configuration.option(PROFILE_FILE_SUPPLIER);
Supplier<ProfileFile> profileFileSupplier = Optional.ofNullable(configuredProfileFileSupplier).orElse(() -> profileFile);

return configuration.merge(c -> c.option(EXECUTION_INTERCEPTORS, new ArrayList<>())
.option(ADDITIONAL_HTTP_HEADERS, new LinkedHashMap<>())
.option(PROFILE_FILE, profileFile)
.option(PROFILE_FILE_SUPPLIER, profileFileSupplier)
.option(PROFILE_NAME, ProfileFileSystemSetting.AWS_PROFILE.getStringValueOrThrow())
.option(USER_AGENT_PREFIX, SdkUserAgent.create().userAgent())
.option(USER_AGENT_SUFFIX, "")
Expand Down Expand Up @@ -330,7 +339,9 @@ private RetryPolicy resolveRetryPolicy(SdkClientConfiguration config) {
}

RetryMode retryMode = RetryMode.resolver()
.profileFile(() -> config.option(SdkClientOption.PROFILE_FILE))
.profileFile(config.option(SdkClientOption.PROFILE_FILE_SUPPLIER) != null ?
config.option(SdkClientOption.PROFILE_FILE_SUPPLIER) :
() -> config.option(SdkClientOption.PROFILE_FILE))
.profileName(config.option(SdkClientOption.PROFILE_NAME))
.defaultRetryMode(config.option(SdkClientOption.DEFAULT_RETRY_MODE))
.resolve();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,9 @@ public DefaultEndpointDiscoveryProviderChain() {
}

public DefaultEndpointDiscoveryProviderChain(SdkClientConfiguration clientConfiguration) {
this(() -> clientConfiguration.option(SdkClientOption.PROFILE_FILE),
this(clientConfiguration.option(SdkClientOption.PROFILE_FILE_SUPPLIER) != null ?
clientConfiguration.option(SdkClientOption.PROFILE_FILE_SUPPLIER) :
() -> clientConfiguration.option(SdkClientOption.PROFILE_FILE),
clientConfiguration.option(SdkClientOption.PROFILE_NAME));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
package software.amazon.awssdk.core.interceptor;

import java.net.URI;
import java.util.function.Supplier;
import software.amazon.awssdk.annotations.SdkPublicApi;
import software.amazon.awssdk.core.ClientType;
import software.amazon.awssdk.core.ServiceConfiguration;
Expand Down Expand Up @@ -77,6 +78,9 @@ public class SdkExecutionAttribute {

public static final ExecutionAttribute<ProfileFile> PROFILE_FILE = new ExecutionAttribute<>("ProfileFile");

public static final ExecutionAttribute<Supplier<ProfileFile>> PROFILE_FILE_SUPPLIER =
new ExecutionAttribute<>("ProfileFileSupplier");

public static final ExecutionAttribute<String> PROFILE_NAME = new ExecutionAttribute<>("ProfileName");

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -201,6 +201,8 @@ private static InterceptorContext runModifyHttpRequestAndHttpContentInterceptors
clientConfiguration.option(SdkClientOption.SERVICE_CONFIGURATION))
.putAttribute(SdkExecutionAttribute.SERVICE_NAME, clientConfiguration.option(SdkClientOption.SERVICE_NAME))
.putAttribute(SdkExecutionAttribute.PROFILE_FILE, clientConfiguration.option(SdkClientOption.PROFILE_FILE))
.putAttribute(SdkExecutionAttribute.PROFILE_FILE_SUPPLIER,
clientConfiguration.option(SdkClientOption.PROFILE_FILE_SUPPLIER))
.putAttribute(SdkExecutionAttribute.PROFILE_NAME, clientConfiguration.option(SdkClientOption.PROFILE_NAME));

ExecutionInterceptorChain interceptorChain =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
import static software.amazon.awssdk.core.client.config.SdkClientOption.EXECUTION_INTERCEPTORS;
import static software.amazon.awssdk.core.client.config.SdkClientOption.METRIC_PUBLISHERS;
import static software.amazon.awssdk.core.client.config.SdkClientOption.PROFILE_FILE;
import static software.amazon.awssdk.core.client.config.SdkClientOption.PROFILE_FILE_SUPPLIER;
import static software.amazon.awssdk.core.client.config.SdkClientOption.PROFILE_NAME;
import static software.amazon.awssdk.core.client.config.SdkClientOption.RETRY_POLICY;
import static software.amazon.awssdk.core.internal.SdkInternalTestAdvancedClientOption.ENDPOINT_OVERRIDDEN_OVERRIDE;
Expand All @@ -59,12 +60,11 @@
import org.mockito.junit.MockitoJUnitRunner;
import software.amazon.awssdk.core.client.config.ClientOverrideConfiguration;
import software.amazon.awssdk.core.client.config.SdkAdvancedClientOption;
import software.amazon.awssdk.core.client.config.SdkClientOption;
import software.amazon.awssdk.core.client.config.SdkClientConfiguration;
import software.amazon.awssdk.core.client.config.SdkClientOption;
import software.amazon.awssdk.core.interceptor.ExecutionAttribute;
import software.amazon.awssdk.core.interceptor.ExecutionAttributes;
import software.amazon.awssdk.core.interceptor.ExecutionInterceptor;
import software.amazon.awssdk.core.retry.RetryMode;
import software.amazon.awssdk.core.retry.RetryPolicy;
import software.amazon.awssdk.core.signer.NoOpSigner;
import software.amazon.awssdk.core.signer.Signer;
Expand Down Expand Up @@ -261,6 +261,7 @@ public void close() {
assertThat(config.option(API_CALL_ATTEMPT_TIMEOUT)).isEqualTo(apiCallAttemptTimeout);
assertThat(config.option(DISABLE_HOST_PREFIX_INJECTION)).isEqualTo(Boolean.TRUE);
assertThat(config.option(PROFILE_FILE)).isEqualTo(profileFile);
assertThat(config.option(PROFILE_FILE_SUPPLIER).get()).isEqualTo(profileFile);
assertThat(config.option(PROFILE_NAME)).isEqualTo(profileName);
assertThat(config.option(METRIC_PUBLISHERS)).contains(metricPublisher);
assertThat(config.option(EXECUTION_ATTRIBUTES).getAttribute(execAttribute)).isEqualTo("value");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,9 @@ private URI createEndpoint(String regionName, String serviceName, ExecutionAttri

return new DefaultServiceEndpointBuilder(SERVICE_NAME, Protocol.HTTPS.toString())
.withRegion(region)
.withProfileFile(() -> attributes.getAttribute(SdkExecutionAttribute.PROFILE_FILE))
.withProfileFile(attributes.getAttribute(SdkExecutionAttribute.PROFILE_FILE_SUPPLIER) != null ?
attributes.getAttribute(SdkExecutionAttribute.PROFILE_FILE_SUPPLIER) :
() -> attributes.getAttribute(SdkExecutionAttribute.PROFILE_FILE))
.withProfileName(attributes.getAttribute(SdkExecutionAttribute.PROFILE_NAME))
.withDualstackEnabled(attributes.getAttribute(AwsExecutionAttribute.DUALSTACK_ENDPOINT_ENABLED))
.withFipsEnabled(attributes.getAttribute(AwsExecutionAttribute.FIPS_ENDPOINT_ENABLED))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,8 @@ private ExecutionAttributes executionAttributes() {
return new ExecutionAttributes().putAttribute(AwsSignerExecutionAttribute.AWS_CREDENTIALS, CREDENTIALS)
.putAttribute(AwsSignerExecutionAttribute.SIGNING_REGION, DESTINATION_REGION)
.putAttribute(SdkExecutionAttribute.PROFILE_FILE, ProfileFile.defaultProfileFile())
.putAttribute(SdkExecutionAttribute.PROFILE_FILE_SUPPLIER,
ProfileFile::defaultProfileFile)
.putAttribute(SdkExecutionAttribute.PROFILE_NAME, "default");
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,9 @@ public static RetryPolicy resolveRetryPolicy(SdkClientConfiguration config) {
}

RetryMode retryMode = RetryMode.resolver()
.profileFile(() -> config.option(SdkClientOption.PROFILE_FILE))
.profileFile(config.option(SdkClientOption.PROFILE_FILE_SUPPLIER) != null ?
config.option(SdkClientOption.PROFILE_FILE_SUPPLIER) :
() -> config.option(SdkClientOption.PROFILE_FILE))
.profileName(config.option(SdkClientOption.PROFILE_NAME))
.defaultRetryMode(config.option(SdkClientOption.DEFAULT_RETRY_MODE))
.resolve();
Expand Down
Loading