Skip to content

Commit 5e53be5

Browse files
committed
override buildinparameters
1 parent 968fc51 commit 5e53be5

File tree

7 files changed

+63
-10
lines changed

7 files changed

+63
-10
lines changed

generated/src/aws-cpp-sdk-s3/source/S3Client.cpp

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
#include <aws/core/auth/AWSCredentialsProviderChain.h>
88
#include <aws/core/client/CoreErrors.h>
99
#include <aws/core/client/RetryStrategy.h>
10-
#include <aws/core/config/EndpointResolver.h>
1110
#include <aws/core/http/HttpClient.h>
1211
#include <aws/core/http/HttpClientFactory.h>
1312
#include <aws/core/http/HttpResponse.h>
@@ -306,10 +305,7 @@ void S3Client::init(const S3::S3ClientConfiguration& config) {
306305
m_clientConfiguration.executor = m_clientConfiguration.configFactories.executorCreateFn();
307306
}
308307
AWS_CHECK_PTR(SERVICE_NAME, m_endpointProvider);
309-
m_endpointProvider->InitBuiltInParameters(config);
310-
if (config.endpointOverride.empty()) {
311-
Aws::Config::EndpointResolver::EndpointSource("s3", config.profileName, *m_endpointProvider);
312-
}
308+
m_endpointProvider->InitBuiltInParameters(config, "s3");
313309
}
314310

315311
void S3Client::OverrideEndpoint(const Aws::String& endpoint) {

src/aws-cpp-sdk-core/include/aws/core/endpoint/BuiltInParameters.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ namespace Aws
2626

2727
virtual void SetFromClientConfiguration(const Client::ClientConfiguration& config);
2828
virtual void SetFromClientConfiguration(const Client::GenericClientConfiguration& config);
29+
virtual void SetFromClientConfiguration(const Client::ClientConfiguration& config, const Aws::String& serviceName);
30+
virtual void SetFromClientConfiguration(const Client::GenericClientConfiguration& config, const Aws::String& serviceName);
2931

3032
virtual void OverrideEndpoint(const Aws::String& endpoint, const Aws::Http::Scheme& scheme = Aws::Http::Scheme::HTTPS);
3133

src/aws-cpp-sdk-core/include/aws/core/endpoint/DefaultEndpointProvider.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,11 @@ namespace Aws
6767
m_builtInParameters.SetFromClientConfiguration(config);
6868
}
6969

70+
void InitBuiltInParameters(const ClientConfigurationT& config, const Aws::String& serviceName) override
71+
{
72+
m_builtInParameters.SetFromClientConfiguration(config, serviceName);
73+
}
74+
7075
/**
7176
* Default implementation of the ResolveEndpoint
7277
*/

src/aws-cpp-sdk-core/include/aws/core/endpoint/EndpointProviderBase.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,14 @@ namespace Aws
4949
*/
5050
virtual void InitBuiltInParameters(const ClientConfigurationT& config) = 0;
5151

52+
/**
53+
* Initialize client context parameters from a ClientConfiguration with service name
54+
*/
55+
virtual void InitBuiltInParameters(const ClientConfigurationT& config, const Aws::String&)
56+
{
57+
InitBuiltInParameters(config);
58+
}
59+
5260
/**
5361
* Function to override endpoint, i.e. to set built-in parameter "AWS::Endpoint"
5462
*/

src/aws-cpp-sdk-core/source/endpoint/BuiltInParameters.cpp

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
#include <aws/core/endpoint/BuiltInParameters.h>
77
#include <aws/core/utils/logging/LogMacros.h>
8+
#include <aws/core/config/EndpointResolver.h>
89

910
static const char ENDPOINT_BUILTIN_LOG_TAG[] = "EndpointBuiltInParameters";
1011

@@ -78,6 +79,51 @@ namespace Endpoint
7879
return SetFromClientConfiguration(static_cast<const Client::ClientConfiguration&>(config));
7980
}
8081

82+
void BuiltInParameters::SetFromClientConfiguration(const Client::ClientConfiguration& config, const Aws::String& serviceName)
83+
{
84+
bool forceFIPS = false;
85+
static const char* AWS_REGION = "Region";
86+
if (!config.region.empty()) {
87+
static const char* FIPS_PREFIX = "fips-";
88+
static const char* FIPS_SUFFIX = "-fips";
89+
if (config.region.rfind(FIPS_PREFIX, 0) == 0) {
90+
Aws::String regionOverride = config.region.substr(strlen(FIPS_PREFIX));
91+
forceFIPS = true;
92+
SetStringParameter(AWS_REGION, regionOverride);
93+
} else if (StringEndsWith(config.region, FIPS_SUFFIX)) {
94+
Aws::String regionOverride = config.region.substr(0, config.region.size() - strlen(FIPS_SUFFIX));
95+
forceFIPS = true;
96+
SetStringParameter(AWS_REGION, regionOverride);
97+
} else {
98+
SetStringParameter(AWS_REGION, config.region);
99+
}
100+
}
101+
102+
static const char* AWS_USE_FIPS = "UseFIPS";
103+
SetBooleanParameter(AWS_USE_FIPS, config.useFIPS || forceFIPS);
104+
105+
static const char* AWS_USE_DUAL_STACK = "UseDualStack";
106+
SetBooleanParameter(AWS_USE_DUAL_STACK, config.useDualStack);
107+
108+
if (!config.endpointOverride.empty()) {
109+
OverrideEndpoint(config.endpointOverride, config.scheme);
110+
if (config.region.empty()) {
111+
AWS_LOGSTREAM_WARN(ENDPOINT_BUILTIN_LOG_TAG,
112+
"Endpoint is overridden but region is not set. "
113+
"Region is required my many endpoint rule sets to resolve the endpoint. "
114+
"And it is required to compute an aws signature.");
115+
SetStringParameter(AWS_REGION, "region-not-set");
116+
}
117+
} else if (!serviceName.empty()) {
118+
Aws::Config::EndpointResolver::EndpointSource(serviceName, config.profileName, *this);
119+
}
120+
}
121+
122+
void BuiltInParameters::SetFromClientConfiguration(const Client::GenericClientConfiguration& config, const Aws::String& serviceName)
123+
{
124+
return SetFromClientConfiguration(static_cast<const Client::ClientConfiguration&>(config), serviceName);
125+
}
126+
81127
const BuiltInParameters::EndpointParameter& BuiltInParameters::GetParameter(const Aws::String& name) const
82128
{
83129
const auto foundIt = std::find_if(m_params.begin(), m_params.end(),

tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/ServiceClientSourceHeaders.vm

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
#end
2525
\#include <aws/${metadata.projectName}/${metadata.classNamePrefix}ErrorMarshaller.h>
2626
#if($serviceModel.endpointRules)
27-
\#include <aws/core/config/EndpointResolver.h>
2827
\#include <aws/${metadata.projectName}/${metadata.classNamePrefix}EndpointProvider.h>
2928
#else
3029
#if($arnEndpointSupported)

tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/ServiceClientSourceInit.vm

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -346,10 +346,7 @@ void ${className}::init(const ${clientConfigurationCls}& config)
346346
}
347347
#if($serviceModel.endpointRules)
348348
AWS_CHECK_PTR(SERVICE_NAME, m_endpointProvider);
349-
m_endpointProvider->InitBuiltInParameters(config);
350-
if (config.endpointOverride.empty()) {
351-
Aws::Config::EndpointResolver::EndpointSource("${metadata.signingName}", config.profileName, *m_endpointProvider);
352-
}
349+
m_endpointProvider->InitBuiltInParameters(config, "${metadata.signingName}");
353350
#if($AdditionalServiceSpecificConfigLoadString)
354351
${AdditionalServiceSpecificConfigLoadString}
355352
#end##if($AdditionalServiceSpecificConfigLoadString)

0 commit comments

Comments
 (0)