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/S3ExpressIdentity.h>
1311#include < smithy/identity/resolver/AwsIdentityResolverBase.h>
12+ #include < smithy/identity/identity/AwsCredentialIdentity.h>
13+ #include < aws/s3/S3ExpressIdentity.h>
1414#include < thread>
1515#include < condition_variable>
16+ #include < aws/s3/S3_EXPORTS.h>
1617
1718namespace Aws {
1819 namespace Http {
@@ -21,80 +22,155 @@ namespace Aws {
2122
2223 namespace S3 {
2324 class S3Client ;
24- class S3ExpressIdentityProvider : public smithy ::IdentityResolverBase<S3ExpressIdentity> {
25- public:
26- explicit S3ExpressIdentityProvider (const S3Client &s3Client) : m_s3Client(s3Client) {}
27-
28- virtual S3ExpressIdentity
25+ class AWS_S3_API S3ExpressIdentityProvider : public smithy::IdentityResolverBase<S3ExpressIdentity> {
26+ public:
27+ explicit S3ExpressIdentityProvider (const S3Client& 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+ protected:
36+
37+ S3ExpressIdentity GetCredentialsFromBucket (const Aws::String& bucketName) const ;
3538
36- virtual ~S3ExpressIdentityProvider () {}
39+ private:
40+ const Aws::S3::S3Client& m_s3Client;
41+ mutable std::mutex m_bucketNameMapMutex;
42+ Aws::Map<Aws::String, std::shared_ptr<std::mutex>> m_bucketNameMutex;
3743
38- protected:
39- std::shared_ptr<std::mutex> GetMutexForBucketName (const Aws::String& bucketName);
40-
41- private:
42- const S3Client &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);
46+ };
47+
48+
49+ class AWS_S3_API DefaultS3ExpressIdentityProvider : public S3ExpressIdentityProvider {
50+ public:
51+ explicit DefaultS3ExpressIdentityProvider (const S3Client& s3Client);
52+ explicit DefaultS3ExpressIdentityProvider (
53+ const S3Client& 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;
4564 };
4665
47- class DefaultS3ExpressIdentityProvider : public S3ExpressIdentityProvider {
48- public:
49- explicit DefaultS3ExpressIdentityProvider (const S3Client &m_s3Client);
50-
51- DefaultS3ExpressIdentityProvider (const S3Client &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 ;
66+ class AWS_S3_API DefaultAsyncS3ExpressIdentityProvider : public S3ExpressIdentityProvider {
67+ public:
68+ explicit DefaultAsyncS3ExpressIdentityProvider (
69+ const S3Client& s3Client,
70+ std::chrono::minutes refreshPeriod = std::chrono::minutes(1 ));
71+
72+ explicit DefaultAsyncS3ExpressIdentityProvider (
73+ const S3Client& 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;
98+ };
6299
63- private:
64- mutable std::shared_ptr<Aws::Utils::ConcurrentCache<Aws::String, S3ExpressIdentity>> m_credentialsCache;
100+ /* ------ Smithy version -----*/
101+ class AWS_S3_API SmithyS3ExpressIdentityProvider : public smithy::IdentityResolverBase<smithy::AwsCredentialIdentityBase> {
102+ public:
103+ explicit SmithyS3ExpressIdentityProvider (const S3Client& s3Client);
104+ ResolveIdentityFutureOutcome getIdentity (
105+ const IdentityProperties& identityProperties,
106+ const AdditionalParameters& additionalParameters) override ;
107+
108+ protected:
109+
110+ virtual smithy::AwsCredentialIdentity GetS3ExpressAwsIdentity (const std::shared_ptr<Aws::Http::ServiceSpecificParameters> &serviceSpecificParameters) = 0;
111+ smithy::AwsCredentialIdentity GetCredentialsFromBucket (const Aws::String& bucketName) const ;
112+
113+ private:
114+ const Aws::S3::S3Client& m_s3Client;
115+ mutable std::mutex m_bucketNameMapMutex;
116+ Aws::Map<Aws::String, std::shared_ptr<std::mutex>> m_bucketNameMutex;
117+
118+ protected:
119+ std::shared_ptr<std::mutex> GetMutexForBucketName (const Aws::String& bucketName);
65120 };
66121
67- class DefaultAsyncS3ExpressIdentityProvider : public S3ExpressIdentityProvider {
68- public:
69- explicit DefaultAsyncS3ExpressIdentityProvider (const S3Client &m_s3Client,
70- std::chrono::minutes refreshPeriod = std::chrono::minutes(1 ));
71-
72- DefaultAsyncS3ExpressIdentityProvider (const S3Client &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;
122+ class AWS_S3_API SmithyDefaultS3ExpressIdentityProvider : public SmithyS3ExpressIdentityProvider {
123+ public:
124+ explicit SmithyDefaultS3ExpressIdentityProvider (const S3Client& s3Client);
125+ explicit SmithyDefaultS3ExpressIdentityProvider (
126+ const S3Client& s3Client,
127+ std::shared_ptr<Utils::ConcurrentCache<Aws::String, smithy::AwsCredentialIdentity>> credentialsCache);
128+ SmithyDefaultS3ExpressIdentityProvider (const SmithyDefaultS3ExpressIdentityProvider& other) = delete ;
129+ SmithyDefaultS3ExpressIdentityProvider (SmithyDefaultS3ExpressIdentityProvider&& other) noexcept = delete ;
130+ SmithyDefaultS3ExpressIdentityProvider& operator =(const SmithyDefaultS3ExpressIdentityProvider& other) = delete ;
131+ SmithyDefaultS3ExpressIdentityProvider& operator =(SmithyDefaultS3ExpressIdentityProvider&& other) noexcept = delete ;
132+ virtual ~SmithyDefaultS3ExpressIdentityProvider () override = default ;
133+
134+ protected:
135+ smithy::AwsCredentialIdentity GetS3ExpressAwsIdentity (const std::shared_ptr<Aws::Http::ServiceSpecificParameters> &serviceSpecificParameters) override ;
136+
137+ private:
138+ mutable std::shared_ptr<Aws::Utils::ConcurrentCache<Aws::String, smithy::AwsCredentialIdentity>> m_credentialsCache;
139+ };
140+
141+ class AWS_S3_API SmithyDefaultAsyncS3ExpressIdentityProvider : public SmithyS3ExpressIdentityProvider {
142+ public:
143+ explicit SmithyDefaultAsyncS3ExpressIdentityProvider (
144+ const S3Client& s3Client,
145+ std::chrono::minutes refreshPeriod = std::chrono::minutes(1 ));
146+
147+ explicit SmithyDefaultAsyncS3ExpressIdentityProvider (
148+ const S3Client& s3Client,
149+ std::shared_ptr<Utils::ConcurrentCache<Aws::String, smithy::AwsCredentialIdentity>> credentialsCache,
150+ std::chrono::minutes refreshPeriod = std::chrono::minutes(1 ));
151+
152+ SmithyDefaultAsyncS3ExpressIdentityProvider (const SmithyDefaultAsyncS3ExpressIdentityProvider& other) = delete ;
153+ SmithyDefaultAsyncS3ExpressIdentityProvider (SmithyDefaultAsyncS3ExpressIdentityProvider&& other) noexcept = delete ;
154+ SmithyDefaultAsyncS3ExpressIdentityProvider& operator =(
155+ const SmithyDefaultAsyncS3ExpressIdentityProvider& other) = delete ;
156+ SmithyDefaultAsyncS3ExpressIdentityProvider& operator =(SmithyDefaultAsyncS3ExpressIdentityProvider&& other) noexcept = delete ;
157+ virtual ~SmithyDefaultAsyncS3ExpressIdentityProvider () override ;
158+ protected:
159+ smithy::AwsCredentialIdentity GetS3ExpressAwsIdentity (const std::shared_ptr<Aws::Http::ServiceSpecificParameters> &serviceSpecificParameters) override ;
160+
161+ private:
162+ void refreshIdentities (std::chrono::minutes refreshPeriod);
163+ void threadSafeKeyInsert (const Aws::String& key);
164+ bool threadSafeKeyHas (const Aws::String& key);
165+ void threadSafeKeyEmpty ();
166+
167+ mutable std::shared_ptr<Aws::Utils::ConcurrentCache<Aws::String, smithy::AwsCredentialIdentity>> m_credentialsCache;
168+ Aws::Set<Aws::String> m_keysUsed;
169+ mutable std::mutex m_keysUsedMutex;
170+ mutable bool m_shouldStopBackgroundRefresh;
171+ Aws::UniquePtr<std::thread> m_backgroundRefreshThread;
172+ mutable std::mutex m_shutDownMutex;
173+ mutable std::condition_variable m_shutdownCondition;
98174 };
99175 }
100- }
176+ }
0 commit comments