@@ -21,19 +21,19 @@ namespace Aws {
2121
2222 namespace S3 {
2323 class S3Client ;
24- class S3ExpressIdentityProvider : public smithy ::IdentityResolverBase<smithy::AwsCredentialIdentityBase > {
24+ class S3ExpressIdentityProvider : public smithy ::IdentityResolverBase<S3ExpressIdentity > {
2525 public:
2626 explicit S3ExpressIdentityProvider (const S3Client& s3Client);
2727 ResolveIdentityFutureOutcome getIdentity (
2828 const IdentityProperties& identityProperties,
2929 const AdditionalParameters& additionalParameters) override ;
30- S3ExpressIdentity
31- GetS3ExpressIdentity (const std::shared_ptr<Aws::Http::ServiceSpecificParameters> &serviceSpecificParameters);
30+
31+ virtual S3ExpressIdentity
32+ GetS3ExpressIdentity (const std::shared_ptr<Aws::Http::ServiceSpecificParameters> &serviceSpecificParameters) = 0 ;
3233
3334 protected:
3435
35- virtual smithy::AwsCredentialIdentity GetS3ExpressAwsIdentity (const std::shared_ptr<Aws::Http::ServiceSpecificParameters> &serviceSpecificParameters) = 0;
36- smithy::AwsCredentialIdentity GetCredentialsFromBucket (const Aws::String& bucketName) const ;
36+ S3ExpressIdentity GetCredentialsFromBucket (const Aws::String& bucketName) const ;
3737
3838 private:
3939 const Aws::S3::S3Client& m_s3Client;
@@ -44,25 +44,24 @@ namespace Aws {
4444 std::shared_ptr<std::mutex> GetMutexForBucketName (const Aws::String& bucketName);
4545 };
4646
47+
4748 class DefaultS3ExpressIdentityProvider : public S3ExpressIdentityProvider {
4849 public:
4950 explicit DefaultS3ExpressIdentityProvider (const S3Client& s3Client);
5051 explicit DefaultS3ExpressIdentityProvider (
5152 const S3Client& s3Client,
52- std::shared_ptr<Utils::ConcurrentCache<Aws::String, smithy::AwsCredentialIdentity >> credentialsCache);
53+ std::shared_ptr<Utils::ConcurrentCache<Aws::String, S3ExpressIdentity >> credentialsCache);
5354 DefaultS3ExpressIdentityProvider (const DefaultS3ExpressIdentityProvider& other) = delete ;
5455 DefaultS3ExpressIdentityProvider (DefaultS3ExpressIdentityProvider&& other) noexcept = delete ;
5556 DefaultS3ExpressIdentityProvider& operator =(const DefaultS3ExpressIdentityProvider& other) = delete ;
5657 DefaultS3ExpressIdentityProvider& operator =(DefaultS3ExpressIdentityProvider&& other) noexcept = delete ;
5758 virtual ~DefaultS3ExpressIdentityProvider () override = default ;
58-
59- protected:
60- smithy::AwsCredentialIdentity GetS3ExpressAwsIdentity (const std::shared_ptr<Aws::Http::ServiceSpecificParameters> &serviceSpecificParameters) override ;
59+ S3ExpressIdentity GetS3ExpressIdentity (const std::shared_ptr<Aws::Http::ServiceSpecificParameters> &serviceSpecificParameters) override ;
6160
6261 private:
63- mutable std::shared_ptr<Aws::Utils::ConcurrentCache<Aws::String, smithy::AwsCredentialIdentity >> m_credentialsCache;
62+ mutable std::shared_ptr<Aws::Utils::ConcurrentCache<Aws::String, S3ExpressIdentity >> m_credentialsCache;
6463 };
65-
64+
6665 class DefaultAsyncS3ExpressIdentityProvider : public S3ExpressIdentityProvider {
6766 public:
6867 explicit DefaultAsyncS3ExpressIdentityProvider (
@@ -71,7 +70,7 @@ namespace Aws {
7170
7271 explicit DefaultAsyncS3ExpressIdentityProvider (
7372 const S3Client& s3Client,
74- std::shared_ptr<Utils::ConcurrentCache<Aws::String, smithy::AwsCredentialIdentity >> credentialsCache,
73+ std::shared_ptr<Utils::ConcurrentCache<Aws::String, S3ExpressIdentity >> credentialsCache,
7574 std::chrono::minutes refreshPeriod = std::chrono::minutes(1 ));
7675
7776 DefaultAsyncS3ExpressIdentityProvider (const DefaultAsyncS3ExpressIdentityProvider& other) = delete ;
@@ -80,6 +79,81 @@ namespace Aws {
8079 const DefaultAsyncS3ExpressIdentityProvider& other) = delete ;
8180 DefaultAsyncS3ExpressIdentityProvider& operator =(DefaultAsyncS3ExpressIdentityProvider&& other) noexcept = delete ;
8281 virtual ~DefaultAsyncS3ExpressIdentityProvider () override ;
82+ S3ExpressIdentity GetS3ExpressIdentity (const std::shared_ptr<Aws::Http::ServiceSpecificParameters> &serviceSpecificParameters) override ;
83+
84+ private:
85+ void refreshIdentities (std::chrono::minutes refreshPeriod);
86+ void threadSafeKeyInsert (const Aws::String& key);
87+ bool threadSafeKeyHas (const Aws::String& key);
88+ void threadSafeKeyEmpty ();
89+
90+ mutable std::shared_ptr<Aws::Utils::ConcurrentCache<Aws::String, S3ExpressIdentity>> m_credentialsCache;
91+ Aws::Set<Aws::String> m_keysUsed;
92+ mutable std::mutex m_keysUsedMutex;
93+ mutable bool m_shouldStopBackgroundRefresh;
94+ Aws::UniquePtr<std::thread> m_backgroundRefreshThread;
95+ mutable std::mutex m_shutDownMutex;
96+ mutable std::condition_variable m_shutdownCondition;
97+ };
98+
99+ /* ------ Smithy version -----*/
100+ class SmithyS3ExpressIdentityProvider : public smithy ::IdentityResolverBase<smithy::AwsCredentialIdentityBase> {
101+ public:
102+ explicit SmithyS3ExpressIdentityProvider (const S3Client& s3Client);
103+ ResolveIdentityFutureOutcome getIdentity (
104+ const IdentityProperties& identityProperties,
105+ const AdditionalParameters& additionalParameters) override ;
106+
107+ protected:
108+
109+ virtual smithy::AwsCredentialIdentity GetS3ExpressAwsIdentity (const std::shared_ptr<Aws::Http::ServiceSpecificParameters> &serviceSpecificParameters) = 0;
110+ smithy::AwsCredentialIdentity GetCredentialsFromBucket (const Aws::String& bucketName) const ;
111+
112+ private:
113+ const Aws::S3::S3Client& m_s3Client;
114+ mutable std::mutex m_bucketNameMapMutex;
115+ Aws::Map<Aws::String, std::shared_ptr<std::mutex>> m_bucketNameMutex;
116+
117+ protected:
118+ std::shared_ptr<std::mutex> GetMutexForBucketName (const Aws::String& bucketName);
119+ };
120+
121+ class SmithyDefaultS3ExpressIdentityProvider : public SmithyS3ExpressIdentityProvider {
122+ public:
123+ explicit SmithyDefaultS3ExpressIdentityProvider (const S3Client& s3Client);
124+ explicit SmithyDefaultS3ExpressIdentityProvider (
125+ const S3Client& s3Client,
126+ std::shared_ptr<Utils::ConcurrentCache<Aws::String, smithy::AwsCredentialIdentity>> credentialsCache);
127+ SmithyDefaultS3ExpressIdentityProvider (const SmithyDefaultS3ExpressIdentityProvider& other) = delete ;
128+ SmithyDefaultS3ExpressIdentityProvider (SmithyDefaultS3ExpressIdentityProvider&& other) noexcept = delete ;
129+ SmithyDefaultS3ExpressIdentityProvider& operator =(const SmithyDefaultS3ExpressIdentityProvider& other) = delete ;
130+ SmithyDefaultS3ExpressIdentityProvider& operator =(SmithyDefaultS3ExpressIdentityProvider&& other) noexcept = delete ;
131+ virtual ~SmithyDefaultS3ExpressIdentityProvider () override = default ;
132+
133+ protected:
134+ smithy::AwsCredentialIdentity GetS3ExpressAwsIdentity (const std::shared_ptr<Aws::Http::ServiceSpecificParameters> &serviceSpecificParameters) override ;
135+
136+ private:
137+ mutable std::shared_ptr<Aws::Utils::ConcurrentCache<Aws::String, smithy::AwsCredentialIdentity>> m_credentialsCache;
138+ };
139+
140+ class SmithyDefaultAsyncS3ExpressIdentityProvider : public SmithyS3ExpressIdentityProvider {
141+ public:
142+ explicit SmithyDefaultAsyncS3ExpressIdentityProvider (
143+ const S3Client& s3Client,
144+ std::chrono::minutes refreshPeriod = std::chrono::minutes(1 ));
145+
146+ explicit SmithyDefaultAsyncS3ExpressIdentityProvider (
147+ const S3Client& s3Client,
148+ std::shared_ptr<Utils::ConcurrentCache<Aws::String, smithy::AwsCredentialIdentity>> credentialsCache,
149+ std::chrono::minutes refreshPeriod = std::chrono::minutes(1 ));
150+
151+ SmithyDefaultAsyncS3ExpressIdentityProvider (const SmithyDefaultAsyncS3ExpressIdentityProvider& other) = delete ;
152+ SmithyDefaultAsyncS3ExpressIdentityProvider (SmithyDefaultAsyncS3ExpressIdentityProvider&& other) noexcept = delete ;
153+ SmithyDefaultAsyncS3ExpressIdentityProvider& operator =(
154+ const SmithyDefaultAsyncS3ExpressIdentityProvider& other) = delete ;
155+ SmithyDefaultAsyncS3ExpressIdentityProvider& operator =(SmithyDefaultAsyncS3ExpressIdentityProvider&& other) noexcept = delete ;
156+ virtual ~SmithyDefaultAsyncS3ExpressIdentityProvider () override ;
83157 protected:
84158 smithy::AwsCredentialIdentity GetS3ExpressAwsIdentity (const std::shared_ptr<Aws::Http::ServiceSpecificParameters> &serviceSpecificParameters) override ;
85159
0 commit comments