aws-crt-cpp
Credentials.h
Go to the documentation of this file.
1 #pragma once
2 /*
3  * Copyright 2010-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License").
6  * You may not use this file except in compliance with the License.
7  * A copy of the License is located at
8  *
9  * http://aws.amazon.com/apache2.0
10  *
11  * or in the "license" file accompanying this file. This file is distributed
12  * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
13  * express or implied. See the License for the specific language governing
14  * permissions and limitations under the License.
15  */
16 
17 #include <aws/crt/Exports.h>
18 #include <aws/crt/Types.h>
19 
20 #include <chrono>
21 #include <functional>
22 
23 struct aws_credentials;
24 struct aws_credentials_provider;
25 
26 namespace Aws
27 {
28  namespace Crt
29  {
30  namespace Io
31  {
32  class ClientBootstrap;
33  }
34 
35  namespace Auth
36  {
41  {
42  public:
43  Credentials(aws_credentials *credentials, Allocator *allocator = g_allocator) noexcept;
45  ByteCursor access_key_id,
46  ByteCursor secret_access_key,
47  ByteCursor session_token,
48  Allocator *allocator = g_allocator) noexcept;
49 
50  ~Credentials();
51 
52  Credentials(const Credentials &) = delete;
53  Credentials(Credentials &&) = delete;
54  Credentials &operator=(const Credentials &) = delete;
56 
60  ByteCursor GetAccessKeyId() const noexcept;
61 
65  ByteCursor GetSecretAccessKey() const noexcept;
66 
70  ByteCursor GetSessionToken() const noexcept;
71 
75  explicit operator bool() const noexcept;
76 
80  aws_credentials *GetUnderlyingHandle() const noexcept { return m_credentials; }
81 
82  private:
83  aws_credentials *m_credentials;
84  };
85 
90  using OnCredentialsResolved = std::function<void(std::shared_ptr<Credentials>)>;
91 
96  class AWS_CRT_CPP_API ICredentialsProvider : public std::enable_shared_from_this<ICredentialsProvider>
97  {
98  public:
99  virtual ~ICredentialsProvider() = default;
100 
104  virtual bool GetCredentials(const OnCredentialsResolved &onCredentialsResolved) const = 0;
105 
112  virtual aws_credentials_provider *GetUnderlyingHandle() const noexcept = 0;
113 
117  virtual bool IsValid() const noexcept = 0;
118  };
119 
124  {
125  CredentialsProviderStaticConfig() : AccessKeyId{}, SecretAccessKey{}, SessionToken{} {}
126 
131 
136 
141  };
142 
147  {
149  : ProfileNameOverride{}, ConfigFileNameOverride{}, CredentialsFileNameOverride{}
150  {
151  }
152 
157 
163 
169  };
170 
175  {
176  CredentialsProviderImdsConfig() : Bootstrap(nullptr) {}
177 
183  };
184 
191  {
193 
198  };
199 
204  {
205  CredentialsProviderCachedConfig() : Provider(), CachedCredentialTTL() {}
206 
210  std::shared_ptr<ICredentialsProvider> Provider;
211 
215  std::chrono::milliseconds CachedCredentialTTL;
216  };
217 
225  {
226  CredentialsProviderChainDefaultConfig() : Bootstrap(nullptr) {}
227 
233  };
234 
242  {
243  public:
244  CredentialsProvider(aws_credentials_provider *provider, Allocator *allocator = g_allocator) noexcept;
245 
246  virtual ~CredentialsProvider();
247 
252 
256  virtual bool GetCredentials(const OnCredentialsResolved &onCredentialsResolved) const override;
257 
261  virtual aws_credentials_provider *GetUnderlyingHandle() const noexcept override { return m_provider; }
262 
266  virtual bool IsValid() const noexcept override { return m_provider != nullptr; }
267 
268  /*
269  * Factory methods for all of the basic credentials provider types
270  *
271  * NYI: X509, ECS
272  */
273 
277  static std::shared_ptr<ICredentialsProvider> CreateCredentialsProviderStatic(
278  const CredentialsProviderStaticConfig &config,
279  Allocator *allocator = g_allocator);
280 
284  static std::shared_ptr<ICredentialsProvider> CreateCredentialsProviderEnvironment(
285  Allocator *allocator = g_allocator);
286 
290  static std::shared_ptr<ICredentialsProvider> CreateCredentialsProviderProfile(
291  const CredentialsProviderProfileConfig &config,
292  Allocator *allocator = g_allocator);
293 
297  static std::shared_ptr<ICredentialsProvider> CreateCredentialsProviderImds(
298  const CredentialsProviderImdsConfig &config,
299  Allocator *allocator = g_allocator);
300 
305  static std::shared_ptr<ICredentialsProvider> CreateCredentialsProviderChain(
306  const CredentialsProviderChainConfig &config,
307  Allocator *allocator = g_allocator);
308 
309  /*
310  * Creates a provider that puts a simple time-based cache in front of its queries
311  * to a subordinate provider.
312  */
313  static std::shared_ptr<ICredentialsProvider> CreateCredentialsProviderCached(
314  const CredentialsProviderCachedConfig &config,
315  Allocator *allocator = g_allocator);
316 
323  static std::shared_ptr<ICredentialsProvider> CreateCredentialsProviderChainDefault(
325  Allocator *allocator = g_allocator);
326 
327  private:
328  static void s_onCredentialsResolved(aws_credentials *credentials, void *user_data);
329 
330  Allocator *m_allocator;
331  aws_credentials_provider *m_provider;
332  };
333  } // namespace Auth
334  } // namespace Crt
335 } // namespace Aws
Aws::Crt::Auth::CredentialsProviderChainDefaultConfig
Definition: Credentials.h:225
Aws::Crt::Allocator
aws_allocator Allocator
Definition: StlAllocator.h:25
Aws::Crt::Auth::CredentialsProviderChainConfig::Providers
Vector< std::shared_ptr< ICredentialsProvider > > Providers
Definition: Credentials.h:197
Aws::Crt::Vector
std::vector< T, StlAllocator< T > > Vector
Definition: Types.h:66
Aws::Crt::Auth::Credentials::Credentials
Credentials(const Credentials &)=delete
Aws::Crt::Auth::ICredentialsProvider::GetUnderlyingHandle
virtual aws_credentials_provider * GetUnderlyingHandle() const noexcept=0
Aws::Crt::Auth::CredentialsProviderChainConfig
Definition: Credentials.h:191
Types.h
AWS_CRT_CPP_API
#define AWS_CRT_CPP_API
Definition: Exports.h:34
Aws::Crt::Auth::CredentialsProviderStaticConfig::SessionToken
ByteCursor SessionToken
Definition: Credentials.h:140
Aws::Crt::Auth::CredentialsProviderStaticConfig::CredentialsProviderStaticConfig
CredentialsProviderStaticConfig()
Definition: Credentials.h:125
Aws::Crt::Auth::Credentials::operator=
Credentials & operator=(Credentials &&)=delete
Aws::Crt::Auth::CredentialsProviderChainConfig::CredentialsProviderChainConfig
CredentialsProviderChainConfig()
Definition: Credentials.h:192
Aws::Crt::Auth::CredentialsProvider::IsValid
virtual bool IsValid() const noexcept override
Definition: Credentials.h:266
Aws::Crt::Auth::CredentialsProviderChainDefaultConfig::CredentialsProviderChainDefaultConfig
CredentialsProviderChainDefaultConfig()
Definition: Credentials.h:226
Aws::Crt::ByteCursor
aws_byte_cursor ByteCursor
Definition: Types.h:44
Aws::Crt::Auth::Credentials
Definition: Credentials.h:41
Aws::Crt::Auth::CredentialsProviderProfileConfig::ConfigFileNameOverride
ByteCursor ConfigFileNameOverride
Definition: Credentials.h:162
Aws::Crt::g_allocator
Allocator * g_allocator
Definition: Api.cpp:28
Aws::Crt::Auth::CredentialsProvider::operator=
CredentialsProvider & operator=(const CredentialsProvider &)=delete
Aws::Crt::Auth::CredentialsProviderImdsConfig::CredentialsProviderImdsConfig
CredentialsProviderImdsConfig()
Definition: Credentials.h:176
Aws::Crt::Auth::CredentialsProviderCachedConfig::CredentialsProviderCachedConfig
CredentialsProviderCachedConfig()
Definition: Credentials.h:205
Aws::Crt::Auth::OnCredentialsResolved
std::function< void(std::shared_ptr< Credentials >)> OnCredentialsResolved
Definition: Credentials.h:90
Aws::Crt::Auth::ICredentialsProvider
Definition: Credentials.h:97
Aws::Crt::Auth::Credentials::operator=
Credentials & operator=(const Credentials &)=delete
Aws::Crt::Auth::ICredentialsProvider::~ICredentialsProvider
virtual ~ICredentialsProvider()=default
Aws::Crt::Auth::CredentialsProvider::CredentialsProvider
CredentialsProvider(const CredentialsProvider &)=delete
Aws::Crt::Auth::CredentialsProvider
Definition: Credentials.h:242
Aws::Crt::Auth::CredentialsProviderImdsConfig::Bootstrap
Io::ClientBootstrap * Bootstrap
Definition: Credentials.h:182
Aws
Definition: Api.h:25
Aws::Crt::Auth::CredentialsProviderProfileConfig
Definition: Credentials.h:147
Exports.h
Aws::Crt::Auth::CredentialsProvider::GetUnderlyingHandle
virtual aws_credentials_provider * GetUnderlyingHandle() const noexcept override
Definition: Credentials.h:261
Aws::Crt::Auth::CredentialsProviderCachedConfig
Definition: Credentials.h:204
Aws::Crt::Auth::CredentialsProviderStaticConfig::AccessKeyId
ByteCursor AccessKeyId
Definition: Credentials.h:130
Aws::Crt::Auth::CredentialsProviderStaticConfig::SecretAccessKey
ByteCursor SecretAccessKey
Definition: Credentials.h:135
Aws::Crt::Auth::CredentialsProviderProfileConfig::CredentialsFileNameOverride
ByteCursor CredentialsFileNameOverride
Definition: Credentials.h:168
Aws::Crt::Auth::CredentialsProvider::CredentialsProvider
CredentialsProvider(CredentialsProvider &&)=delete
Aws::Crt::Auth::CredentialsProviderCachedConfig::CachedCredentialTTL
std::chrono::milliseconds CachedCredentialTTL
Definition: Credentials.h:215
Aws::Crt::Auth::CredentialsProviderProfileConfig::ProfileNameOverride
ByteCursor ProfileNameOverride
Definition: Credentials.h:156
Aws::Crt::Auth::CredentialsProviderChainDefaultConfig::Bootstrap
Io::ClientBootstrap * Bootstrap
Definition: Credentials.h:232
Aws::Crt::Io::ClientBootstrap
Definition: Bootstrap.h:45
Aws::Crt::Auth::CredentialsProviderCachedConfig::Provider
std::shared_ptr< ICredentialsProvider > Provider
Definition: Credentials.h:210
Aws::Crt::Auth::CredentialsProviderImdsConfig
Definition: Credentials.h:175
Aws::Crt::Auth::CredentialsProvider::operator=
CredentialsProvider & operator=(CredentialsProvider &&)=delete
Aws::Crt::Auth::ICredentialsProvider::GetCredentials
virtual bool GetCredentials(const OnCredentialsResolved &onCredentialsResolved) const =0
Aws::Crt::Auth::CredentialsProviderProfileConfig::CredentialsProviderProfileConfig
CredentialsProviderProfileConfig()
Definition: Credentials.h:148
Aws::Crt::Auth::CredentialsProviderStaticConfig
Definition: Credentials.h:124
Aws::Crt::Auth::Credentials::Credentials
Credentials(Credentials &&)=delete