1
#pragma once
2
#include "envoy/extensions/common/aws/v3/credential_provider.pb.h"
3

            
4
#include "source/common/config/datasource.h"
5
#include "source/extensions/common/aws/cached_credentials_provider_base.h"
6

            
7
namespace Envoy {
8
namespace Extensions {
9
namespace Common {
10
namespace Aws {
11

            
12
/**
13
 * Retrieve AWS credentials from the credentials file.
14
 *
15
 * Adheres to conventions specified in:
16
 * https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html
17
 */
18
class CredentialsFileCredentialsProvider : public CachedCredentialsProviderBase {
19
public:
20
  CredentialsFileCredentialsProvider(
21
      Server::Configuration::ServerFactoryContext& context,
22
      const envoy::extensions::common::aws::v3::CredentialsFileCredentialProvider&
23
          credential_file_config = {});
24
1
  std::string providerName() override { return "CredentialsFileCredentialsProvider"; };
25

            
26
private:
27
  Server::Configuration::ServerFactoryContext& context_;
28
  std::string profile_;
29
  absl::optional<Config::DataSource::DataSourceProviderPtr<std::string>>
30
      credential_file_data_source_provider_;
31
  bool has_watched_directory_ = false;
32

            
33
  bool needsRefresh() override;
34
  void refresh() override;
35
  void extractCredentials(absl::string_view credentials_string, absl::string_view profile);
36
};
37

            
38
} // namespace Aws
39
} // namespace Common
40
} // namespace Extensions
41
} // namespace Envoy