Skip to content

Commit afa1937

Browse files
committed
codegen fixes
1 parent 9f542ef commit afa1937

31 files changed

+3089
-2580
lines changed

generated/src/aws-cpp-sdk-s3-crt/include/aws/s3-crt/S3CrtClient.h

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,24 +4,31 @@
44
*/
55

66
#pragma once
7+
78
#include <aws/s3-crt/S3Crt_EXPORTS.h>
89
#include <aws/core/client/ClientConfiguration.h>
10+
#include <aws/core/client/AWSClientAsyncCRTP.h>
11+
#include <aws/s3-crt/S3CrtServiceClientModel.h>
12+
#include <smithy/client/AwsSmithyClient.h>
13+
#include <smithy/identity/auth/built-in/SigV4MultiAuthResolver.h>
14+
#include <smithy/identity/auth/built-in/SigV4AuthScheme.h>
15+
#include <smithy/identity/auth/built-in/SigV4aAuthScheme.h>
16+
#include <aws/s3-crt/S3ExpressSigV4AuthScheme.h>
17+
#include <smithy/client/serializer/XmlOutcomeSerializer.h>
18+
#include <aws/core/utils/DNS.h>
19+
920
#include <aws/core/auth/AWSCredentialsProviderChain.h>
1021
#include <aws/core/utils/crypto/Factories.h>
1122
#include <aws/s3-crt/ClientConfiguration.h>
1223
#include <aws/s3-crt/S3CrtErrorMarshaller.h>
1324
#include <aws/s3/s3_client.h>
1425
#include <aws/crt/auth/Sigv4Signing.h>
1526
#include <aws/crt/http/HttpRequestResponse.h>
16-
#include <aws/core/client/AWSClient.h>
17-
#include <aws/core/client/AWSClientAsyncCRTP.h>
18-
#include <aws/core/auth/AWSAuthSigner.h>
19-
#include <aws/core/utils/xml/XmlSerializer.h>
20-
#include <aws/core/utils/DNS.h>
21-
#include <aws/s3-crt/S3CrtServiceClientModel.h>
2227
#include <aws/s3-crt/S3ExpressIdentityProvider.h>
2328
#include <aws/s3-crt/S3CrtIdentityProviderAdapter.h>
2429

30+
31+
2532
struct aws_s3_client;
2633
// TODO: temporary fix for naming conflicts on Windows.
2734
#ifdef _WIN32
@@ -42,6 +49,7 @@ namespace Aws
4249
static const char SERVER_SIDE_ENCRYPTION_CUSTOMER_KEY[] = "x-amz-server-side-encryption-customer-key";
4350
static const char SERVER_SIDE_ENCRYPTION_CUSTOMER_KEY_MD5[] = "x-amz-server-side-encryption-customer-key-MD5";
4451
} // SS3Headers
52+
AWS_S3CRT_API extern const char SERVICE_NAME[];
4553

4654
//max expiration for presigned urls in s3 is 7 days.
4755
static const unsigned MAX_EXPIRATION_SECONDS = 7 * 24 * 60 * 60;
@@ -51,12 +59,20 @@ namespace Aws
5159
/**
5260
* <p/>
5361
*/
54-
class AWS_S3CRT_API S3CrtClient : public Aws::Client::AWSXMLClient, public Aws::Client::ClientWithAsyncTemplateMethods<S3CrtClient>
62+
class AWS_S3CRT_API S3CrtClient : Aws::Client::ClientWithAsyncTemplateMethods<S3CrtClient>,
63+
public smithy::client::AwsSmithyClientT<Aws::S3Crt::SERVICE_NAME,
64+
Aws::S3Crt::S3CrtClientConfiguration,
65+
smithy::SigV4MultiAuthSchemeResolver<S3CrtEndpointProvider, Aws::S3Crt::S3CrtClientConfiguration>,
66+
Aws::Crt::Variant<smithy::SigV4AuthScheme,S3ExpressSigV4AuthScheme,smithy::SigV4aAuthScheme>,
67+
S3CrtEndpointProviderBase,
68+
smithy::client::XmlOutcomeSerializer,
69+
smithy::client::XmlOutcome,
70+
Aws::Client::S3CrtErrorMarshaller>
5571
{
5672
public:
57-
typedef Aws::Client::AWSXMLClient BASECLASS;
5873
static const char* GetServiceName();
5974
static const char* GetAllocationTag();
75+
inline const char* GetServiceClientName() const override { return "S3"; }
6076

6177
typedef S3CrtClientConfiguration ClientConfigurationType;
6278
typedef S3CrtEndpointProvider EndpointProviderType;
@@ -7005,14 +7021,14 @@ namespace Aws
70057021
aws_s3_meta_request_options *options,
70067022
const Aws::AmazonWebServiceRequest *request,
70077023
const Aws::Http::URI &uri, Aws::Http::HttpMethod method) const;
7008-
S3Crt::ClientConfiguration m_clientConfiguration;
7024+
70097025
struct aws_s3_client* m_s3CrtClient = {};
70107026
struct aws_signing_config_aws m_s3CrtSigningConfig = {};
70117027
struct CrtClientShutdownCallbackDataWrapper m_wrappedData = {};
70127028
std::shared_ptr<Aws::Utils::Threading::Semaphore> m_clientShutdownSem;
70137029
std::shared_ptr<Aws::Auth::AWSCredentialsProvider> m_credProvider;
70147030
std::shared_ptr<Aws::Crt::Auth::ICredentialsProvider> m_crtCredProvider;
7015-
std::shared_ptr<S3CrtEndpointProviderBase> m_endpointProvider;
7031+
70167032
std::shared_ptr<S3ExpressIdentityProvider> m_identityProvider;
70177033
S3CrtIdentityProviderUserData m_identityProviderUserData{m_identityProvider};
70187034
};
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
/**
2+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3+
* SPDX-License-Identifier: Apache-2.0.
4+
*/
5+
6+
#pragma once
7+
8+
#include <aws/s3-crt/S3ExpressSigner.h>
9+
#include <smithy/identity/auth/built-in/SigV4MultiAuthResolver.h>
10+
#include <aws/s3-crt/S3ExpressSigV4AuthSchemeOption.h>
11+
#include <aws/s3-crt/S3ExpressSigV4AuthScheme.h>
12+
13+
namespace Aws {
14+
namespace S3Crt {
15+
class AWS_S3CRT_API S3ExpressAuthSchemeResolver : public smithy::SigV4MultiAuthSchemeResolver<S3CrtEndpointProvider, S3Crt::S3CrtClientConfiguration>{
16+
17+
public:
18+
Aws::Vector<smithy::AuthSchemeOption> resolveAuthScheme(const ServiceAuthSchemeParameters& identityProperties) override
19+
{
20+
//pack endpoint params from identityProperties
21+
Aws::Endpoint::EndpointParameters epParams;
22+
23+
for (auto& identParam : identityProperties.additionalProperties) {
24+
if (identParam.second.template holds_alternative<bool>())
25+
{
26+
epParams.emplace_back(Aws::Endpoint::EndpointParameter(identParam.first, identParam.second.template get<bool>()));
27+
}
28+
if (identParam.second.template holds_alternative<Aws::String>())
29+
{
30+
epParams.emplace_back(Aws::Endpoint::EndpointParameter(identParam.first ,identParam.second.template get<Aws::String>()));
31+
}
32+
}
33+
34+
//resolve endpoint first time to fetch auth schemes
35+
if(m_endpointProviderForAuth)
36+
{
37+
Aws::Vector<smithy::AuthSchemeOption> authSchemes{};
38+
Aws::UnorderedMap<Aws::String, smithy::AuthSchemeOption> authSchemeMap =
39+
{
40+
{Aws::Auth::ASYMMETRIC_SIGV4_SIGNER, smithy::SigV4aAuthSchemeOption::sigV4aAuthSchemeOption},
41+
{Aws::Auth::SIGV4_SIGNER, smithy::SigV4AuthSchemeOption::sigV4AuthSchemeOption},
42+
{S3Crt::S3_EXPRESS_SIGNER_NAME, S3ExpressSigV4AuthSchemeOption::s3ExpressSigV4AuthSchemeOption}
43+
};
44+
authSchemes.reserve(authSchemeMap.size());
45+
auto authschemeMapper = [&](const Aws::String& schemeId){
46+
auto it = authSchemeMap.find(schemeId);
47+
if (it != authSchemeMap.end())
48+
{
49+
authSchemes.emplace_back(it->second);
50+
authSchemeMap.erase(it);
51+
}
52+
};
53+
auto epResolutionOutcome = m_endpointProviderForAuth->ResolveEndpoint(epParams);
54+
55+
if (epResolutionOutcome.IsSuccess())
56+
{
57+
auto endpoint = std::move(epResolutionOutcome.GetResultWithOwnership());
58+
if (endpoint.GetAttributes())
59+
{
60+
auto authSchemeName = endpoint.GetAttributes()->authScheme.GetName();
61+
authschemeMapper(authSchemeName);
62+
}
63+
}
64+
std::transform(authSchemeMap.begin(),
65+
authSchemeMap.end(),
66+
std::back_inserter(authSchemes),
67+
[&](const std::pair<Aws::String, smithy::AuthSchemeOption>& elem){return elem.second;} );
68+
return authSchemes;
69+
}
70+
71+
return {};
72+
}
73+
};
74+
}
75+
}

generated/src/aws-cpp-sdk-s3-crt/include/aws/s3-crt/S3ExpressIdentityProvider.h

Lines changed: 70 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,12 @@
88
#include <aws/core/utils/memory/stl/AWSSet.h>
99
#include <aws/core/utils/memory/stl/AWSString.h>
1010
#include <aws/core/utils/ConcurrentCache.h>
11-
#include <aws/core/auth/signer/AWSAuthSignerBase.h>
12-
#include <aws/s3-crt/S3ExpressIdentity.h>
1311
#include <smithy/identity/resolver/AwsIdentityResolverBase.h>
12+
#include <smithy/identity/identity/AwsCredentialIdentity.h>
13+
#include <aws/s3-crt/S3ExpressIdentity.h>
1414
#include <thread>
1515
#include <condition_variable>
16+
#include <aws/s3-crt/S3Crt_EXPORTS.h>
1617

1718
namespace Aws {
1819
namespace Http {
@@ -21,80 +22,79 @@ namespace Aws {
2122

2223
namespace S3Crt {
2324
class S3CrtClient;
24-
class S3ExpressIdentityProvider: public smithy::IdentityResolverBase<S3ExpressIdentity> {
25-
public:
26-
explicit S3ExpressIdentityProvider(const S3CrtClient &s3Client) : m_s3Client(s3Client) {}
27-
28-
virtual S3ExpressIdentity
25+
class AWS_S3CRT_API S3ExpressIdentityProvider : public smithy::IdentityResolverBase<S3ExpressIdentity> {
26+
public:
27+
explicit S3ExpressIdentityProvider(const S3CrtClient& s3Client);
28+
ResolveIdentityFutureOutcome getIdentity(
29+
const IdentityProperties& identityProperties,
30+
const AdditionalParameters& additionalParameters) override;
31+
32+
virtual S3ExpressIdentity
2933
GetS3ExpressIdentity(const std::shared_ptr<Aws::Http::ServiceSpecificParameters> &serviceSpecificParameters) = 0;
3034

31-
ResolveIdentityFutureOutcome
32-
getIdentity(const IdentityProperties& identityProperties, const AdditionalParameters& additionalParameters) override;
33-
S3ExpressIdentity
34-
getIdentity(const Aws::String &bucketName);
35-
36-
virtual ~S3ExpressIdentityProvider() {}
35+
protected:
36+
37+
S3ExpressIdentity GetCredentialsFromBucket(const Aws::String& bucketName) const;
3738

38-
protected:
39-
std::shared_ptr<std::mutex> GetMutexForBucketName(const Aws::String& bucketName);
39+
private:
40+
const S3CrtClient& m_s3Client;
41+
mutable std::mutex m_bucketNameMapMutex;
42+
Aws::Map<Aws::String, std::shared_ptr<std::mutex>> m_bucketNameMutex;
4043

41-
private:
42-
const S3CrtClient &m_s3Client;
43-
mutable std::mutex m_bucketNameMapMutex;
44-
Aws::Map<Aws::String, std::shared_ptr<std::mutex>> m_bucketNameMutex;
44+
protected:
45+
std::shared_ptr<std::mutex> GetMutexForBucketName(const Aws::String& bucketName);
4546
};
46-
47-
class DefaultS3ExpressIdentityProvider : public S3ExpressIdentityProvider {
48-
public:
49-
explicit DefaultS3ExpressIdentityProvider(const S3CrtClient &m_s3Client);
50-
51-
DefaultS3ExpressIdentityProvider(const S3CrtClient &s3Client,
52-
std::shared_ptr<Utils::ConcurrentCache<Aws::String, S3ExpressIdentity>> credentialsCache);
53-
54-
DefaultS3ExpressIdentityProvider(const DefaultS3ExpressIdentityProvider& other) = delete;
55-
DefaultS3ExpressIdentityProvider(DefaultS3ExpressIdentityProvider&& other) noexcept = delete;
56-
DefaultS3ExpressIdentityProvider& operator=(const DefaultS3ExpressIdentityProvider& other) = delete;
57-
DefaultS3ExpressIdentityProvider& operator=(DefaultS3ExpressIdentityProvider&& other) noexcept = delete;
58-
59-
virtual ~DefaultS3ExpressIdentityProvider() override = default;
60-
61-
S3ExpressIdentity GetS3ExpressIdentity(const std::shared_ptr<Aws::Http::ServiceSpecificParameters> &serviceSpecificParameters) override;
62-
63-
private:
64-
mutable std::shared_ptr<Aws::Utils::ConcurrentCache<Aws::String, S3ExpressIdentity>> m_credentialsCache;
47+
48+
49+
class AWS_S3CRT_API DefaultS3ExpressIdentityProvider : public S3ExpressIdentityProvider {
50+
public:
51+
explicit DefaultS3ExpressIdentityProvider(const S3CrtClient& s3Client);
52+
explicit DefaultS3ExpressIdentityProvider(
53+
const S3CrtClient& s3Client,
54+
std::shared_ptr<Utils::ConcurrentCache<Aws::String, S3ExpressIdentity>> credentialsCache);
55+
DefaultS3ExpressIdentityProvider(const DefaultS3ExpressIdentityProvider& other) = delete;
56+
DefaultS3ExpressIdentityProvider(DefaultS3ExpressIdentityProvider&& other) noexcept = delete;
57+
DefaultS3ExpressIdentityProvider& operator=(const DefaultS3ExpressIdentityProvider& other) = delete;
58+
DefaultS3ExpressIdentityProvider& operator=(DefaultS3ExpressIdentityProvider&& other) noexcept = delete;
59+
virtual ~DefaultS3ExpressIdentityProvider() override = default;
60+
S3ExpressIdentity GetS3ExpressIdentity(const std::shared_ptr<Aws::Http::ServiceSpecificParameters> &serviceSpecificParameters) override;
61+
62+
private:
63+
mutable std::shared_ptr<Aws::Utils::ConcurrentCache<Aws::String, S3ExpressIdentity>> m_credentialsCache;
6564
};
6665

67-
class DefaultAsyncS3ExpressIdentityProvider : public S3ExpressIdentityProvider {
68-
public:
69-
explicit DefaultAsyncS3ExpressIdentityProvider(const S3CrtClient &m_s3Client,
70-
std::chrono::minutes refreshPeriod = std::chrono::minutes(1));
71-
72-
DefaultAsyncS3ExpressIdentityProvider(const S3CrtClient &s3Client,
73-
std::shared_ptr<Utils::ConcurrentCache<Aws::String, S3ExpressIdentity>> credentialsCache,
74-
std::chrono::minutes refreshPeriod = std::chrono::minutes(1));
75-
76-
DefaultAsyncS3ExpressIdentityProvider(const DefaultAsyncS3ExpressIdentityProvider& other) = delete;
77-
DefaultAsyncS3ExpressIdentityProvider(DefaultAsyncS3ExpressIdentityProvider&& other) noexcept = delete;
78-
DefaultAsyncS3ExpressIdentityProvider& operator=(const DefaultAsyncS3ExpressIdentityProvider& other) = delete;
79-
DefaultAsyncS3ExpressIdentityProvider& operator=(DefaultAsyncS3ExpressIdentityProvider&& other) noexcept = delete;
80-
81-
virtual ~DefaultAsyncS3ExpressIdentityProvider() override;
82-
83-
S3ExpressIdentity GetS3ExpressIdentity(const std::shared_ptr<Aws::Http::ServiceSpecificParameters> &serviceSpecificParameters) override;
84-
85-
private:
86-
void refreshIdentities(std::chrono::minutes refreshPeriod);
87-
void threadSafeKeyInsert(const Aws::String& key);
88-
bool threadSafeKeyHas(const Aws::String& key);
89-
void threadSafeKeyEmpty();
90-
91-
mutable std::shared_ptr<Aws::Utils::ConcurrentCache<Aws::String, S3ExpressIdentity>> m_credentialsCache;
92-
Aws::Set<Aws::String> m_keysUsed;
93-
mutable std::mutex m_keysUsedMutex;
94-
mutable bool m_shouldStopBackgroundRefresh;
95-
Aws::UniquePtr<std::thread> m_backgroundRefreshThread;
96-
mutable std::mutex m_shutDownMutex;
97-
mutable std::condition_variable m_shutdownCondition;
66+
class AWS_S3CRT_API DefaultAsyncS3ExpressIdentityProvider : public S3ExpressIdentityProvider {
67+
public:
68+
explicit DefaultAsyncS3ExpressIdentityProvider(
69+
const S3CrtClient& s3Client,
70+
std::chrono::minutes refreshPeriod = std::chrono::minutes(1));
71+
72+
explicit DefaultAsyncS3ExpressIdentityProvider(
73+
const S3CrtClient& s3Client,
74+
std::shared_ptr<Utils::ConcurrentCache<Aws::String, S3ExpressIdentity>> credentialsCache,
75+
std::chrono::minutes refreshPeriod = std::chrono::minutes(1));
76+
77+
DefaultAsyncS3ExpressIdentityProvider(const DefaultAsyncS3ExpressIdentityProvider& other) = delete;
78+
DefaultAsyncS3ExpressIdentityProvider(DefaultAsyncS3ExpressIdentityProvider&& other) noexcept = delete;
79+
DefaultAsyncS3ExpressIdentityProvider& operator=(
80+
const DefaultAsyncS3ExpressIdentityProvider& other) = delete;
81+
DefaultAsyncS3ExpressIdentityProvider& operator=(DefaultAsyncS3ExpressIdentityProvider&& other) noexcept = delete;
82+
virtual ~DefaultAsyncS3ExpressIdentityProvider() override;
83+
S3ExpressIdentity GetS3ExpressIdentity(const std::shared_ptr<Aws::Http::ServiceSpecificParameters> &serviceSpecificParameters) override;
84+
85+
private:
86+
void refreshIdentities(std::chrono::minutes refreshPeriod);
87+
void threadSafeKeyInsert(const Aws::String& key);
88+
bool threadSafeKeyHas(const Aws::String& key);
89+
void threadSafeKeyEmpty();
90+
91+
mutable std::shared_ptr<Aws::Utils::ConcurrentCache<Aws::String, S3ExpressIdentity>> m_credentialsCache;
92+
Aws::Set<Aws::String> m_keysUsed;
93+
mutable std::mutex m_keysUsedMutex;
94+
mutable bool m_shouldStopBackgroundRefresh;
95+
Aws::UniquePtr<std::thread> m_backgroundRefreshThread;
96+
mutable std::mutex m_shutDownMutex;
97+
mutable std::condition_variable m_shutdownCondition;
9898
};
9999
}
100-
}
100+
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
/**
2+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3+
* SPDX-License-Identifier: Apache-2.0.
4+
*/
5+
6+
#pragma once
7+
8+
#include <smithy/identity/auth/AuthScheme.h>
9+
#include <smithy/identity/resolver/built-in/DefaultAwsCredentialIdentityResolver.h>
10+
#include <smithy/identity/auth/AuthSchemeResolverBase.h>
11+
#include <smithy/identity/identity/AwsCredentialIdentityBase.h>
12+
#include <aws/s3-crt/S3ExpressSigner.h>
13+
14+
namespace Aws {
15+
namespace S3Crt {
16+
constexpr char SIGV4_EXPRESS[] = "sigv4-s3express";
17+
18+
class AWS_S3CRT_API S3ExpressSigV4AuthScheme : public smithy::AuthScheme<S3ExpressIdentity>
19+
{
20+
public:
21+
using AwsCredentialIdentityResolverT = smithy::IdentityResolverBase<IdentityT>;
22+
using AwsCredentialSignerT = smithy::AwsSignerBase<IdentityT>;
23+
using S3ExpressSigV4AuthSchemeParameters = smithy::DefaultAuthSchemeResolverParameters;
24+
25+
explicit S3ExpressSigV4AuthScheme(std::shared_ptr<AwsCredentialIdentityResolverT> identityResolver,
26+
const Aws::String& serviceName,
27+
const Aws::String& region,
28+
Aws::Client::AWSAuthV4Signer::PayloadSigningPolicy policy,
29+
bool urlEscapePath)
30+
: AuthScheme(SIGV4_EXPRESS),
31+
m_identityResolver{identityResolver},
32+
m_signer{Aws::MakeShared<SmithyS3ExpressSigner<smithy::AwsSigV4Signer>>("S3ExpressSigV4AuthScheme", serviceName, region, policy, urlEscapePath)}
33+
{
34+
assert(m_identityResolver);
35+
assert(m_signer);
36+
}
37+
38+
virtual ~S3ExpressSigV4AuthScheme() = default;
39+
40+
std::shared_ptr<AwsCredentialIdentityResolverT> identityResolver() override
41+
{
42+
return m_identityResolver;
43+
}
44+
45+
std::shared_ptr<AwsCredentialSignerT> signer() override
46+
{
47+
return m_signer;
48+
}
49+
protected:
50+
std::shared_ptr<AwsCredentialIdentityResolverT> m_identityResolver;
51+
std::shared_ptr<AwsCredentialSignerT> m_signer;
52+
};
53+
}
54+
}

0 commit comments

Comments
 (0)