AWS SDK for C++  0.14.3
AWS SDK for C++
AWSCredentialsProvider.h
Go to the documentation of this file.
1 /*
2  * Copyright 2010-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License").
5  * You may not use this file except in compliance with the License.
6  * A copy of the License is located at
7  *
8  * http://aws.amazon.com/apache2.0
9  *
10  * or in the "license" file accompanying this file. This file is distributed
11  * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
12  * express or implied. See the License for the specific language governing
13  * permissions and limitations under the License.
14  */
15 
16 
17 #pragma once
18 
19 #include <aws/core/Core_EXPORTS.h>
23 
24 #include <memory>
25 #include <mutex>
26 
27 namespace Aws
28 {
29  namespace Config
30  {
33  }
34 
35  namespace Auth
36  {
37  static int REFRESH_THRESHOLD = 1000 * 60 * 15;
38 
43  {
44  public:
46  {
47  }
48 
52  AWSCredentials(const Aws::String& accessKeyId, const Aws::String& secretKey, const Aws::String& sessionToken = "") :
53  m_accessKeyId(accessKeyId), m_secretKey(secretKey), m_sessionToken(sessionToken)
54  {
55  }
56 
60  inline const Aws::String& GetAWSAccessKeyId() const
61  {
62  return m_accessKeyId;
63  }
64 
68  inline const Aws::String& GetAWSSecretKey() const
69  {
70  return m_secretKey;
71  }
72 
76  inline const Aws::String& GetSessionToken() const
77  {
78  return m_sessionToken;
79  }
80 
84  inline void SetAWSAccessKeyId(const Aws::String& accessKeyId)
85  {
86  m_accessKeyId = accessKeyId;
87  }
88 
92  inline void SetAWSSecretKey(const Aws::String& secretKey)
93  {
94  m_secretKey = secretKey;
95  }
96 
100  inline void SetSessionToken(const Aws::String& sessionToken)
101  {
102  m_sessionToken = sessionToken;
103  }
104 
108  inline void SetAWSAccessKeyId(const char* accessKeyId)
109  {
110  m_accessKeyId = accessKeyId;
111  }
112 
116  inline void SetAWSSecretKey(const char* secretKey)
117  {
118  m_secretKey = secretKey;
119  }
120 
124  inline void SetSessionToken(const char* sessionToken)
125  {
126  m_sessionToken = sessionToken;
127  }
128 
129  private:
130  Aws::String m_accessKeyId;
131  Aws::String m_secretKey;
132  Aws::String m_sessionToken;
133  };
134 
140  {
141  public:
146  AWSCredentialsProvider() : m_lastLoadedMs(0)
147  {
148  }
149 
150  virtual ~AWSCredentialsProvider() = default;
151 
155  virtual AWSCredentials GetAWSCredentials() = 0;
156 
157  protected:
162  virtual bool IsTimeToRefresh(long reloadFrequency);
163 
164  private:
165  long long m_lastLoadedMs;
166  };
167 
173  {
174  public:
178  inline AWSCredentials GetAWSCredentials() override { return AWSCredentials("", ""); }
179  };
180 
187  {
188  public:
192  inline SimpleAWSCredentialsProvider(const Aws::String& awsAccessKeyId, const Aws::String& awsSecretAccessKey, const Aws::String& sessionToken = "")
193  : m_accessKeyId(awsAccessKeyId), m_secretAccessKey(awsSecretAccessKey), m_sessionToken(sessionToken)
194  { }
195 
199  inline SimpleAWSCredentialsProvider(const AWSCredentials& credentials)
200  : m_accessKeyId(credentials.GetAWSAccessKeyId()), m_secretAccessKey(credentials.GetAWSSecretKey()),
201  m_sessionToken(credentials.GetSessionToken())
202  { }
203 
208  {
209  return AWSCredentials(m_accessKeyId, m_secretAccessKey, m_sessionToken);
210  }
211 
212  private:
213  Aws::String m_accessKeyId;
214  Aws::String m_secretAccessKey;
215  Aws::String m_sessionToken;
216  };
217 
223  {
224  public:
229  AWSCredentials GetAWSCredentials() override;
230  };
231 
240  {
241  public:
242 
246  ProfileConfigFileAWSCredentialsProvider(long refreshRateMs = REFRESH_THRESHOLD);
247 
252  ProfileConfigFileAWSCredentialsProvider(const char* profile, long refreshRateMs = REFRESH_THRESHOLD);
253 
257  AWSCredentials GetAWSCredentials() override;
258 
262  static Aws::String GetConfigProfileFilename();
263 
267  static Aws::String GetCredentialsProfileFilename();
268 
272  static Aws::String GetProfileDirectory();
273 
274  private:
275 
279  void RefreshIfExpired();
280 
281  Aws::String m_profileToUse;
282  std::shared_ptr<Aws::Config::AWSProfileConfigLoader> m_configFileLoader;
283  std::shared_ptr<Aws::Config::AWSProfileConfigLoader> m_credentialsFileLoader;
284  mutable std::mutex m_reloadMutex;
285  long m_loadFrequencyMs;
286  };
287 
293  {
294  public:
299  InstanceProfileCredentialsProvider(long refreshRateMs = REFRESH_THRESHOLD);
300 
305  InstanceProfileCredentialsProvider(const std::shared_ptr<Aws::Config::EC2InstanceProfileConfigLoader>&, long refreshRateMs = REFRESH_THRESHOLD);
306 
310  AWSCredentials GetAWSCredentials() override;
311 
312  private:
313  void RefreshIfExpired();
314 
315  std::shared_ptr<Aws::Config::AWSProfileConfigLoader> m_ec2MetadataConfigLoader;
316  long m_loadFrequencyMs;
317  mutable std::mutex m_reloadMutex;
318  };
319  } // namespace Auth
320 } // namespace Aws
321 
void SetAWSAccessKeyId(const Aws::String &accessKeyId)
const Aws::String & GetAWSSecretKey() const
static int REFRESH_THRESHOLD
void SetAWSSecretKey(const Aws::String &secretKey)
const Aws::String & GetAWSAccessKeyId() const
void SetAWSAccessKeyId(const char *accessKeyId)
AWSCredentials(const Aws::String &accessKeyId, const Aws::String &secretKey, const Aws::String &sessionToken="")
SimpleAWSCredentialsProvider(const AWSCredentials &credentials)
void SetSessionToken(const char *sessionToken)
void SetAWSSecretKey(const char *secretKey)
std::basic_string< char, std::char_traits< char >, Aws::Allocator< char > > String
Definition: AWSString.h:97
SimpleAWSCredentialsProvider(const Aws::String &awsAccessKeyId, const Aws::String &awsSecretAccessKey, const Aws::String &sessionToken="")
void SetSessionToken(const Aws::String &sessionToken)
const Aws::String & GetSessionToken() const
#define AWS_CORE_API
Definition: Core_EXPORTS.h:35
JSON (JavaScript Object Notation).