1
#include "source/extensions/http/injected_credentials/generic/config.h"
2

            
3
#include "envoy/secret/secret_manager.h"
4
#include "envoy/secret/secret_provider.h"
5
#include "envoy/upstream/cluster_manager.h"
6

            
7
namespace Envoy {
8
namespace Extensions {
9
namespace Http {
10
namespace InjectedCredentials {
11
namespace Generic {
12

            
13
namespace {
14
Secret::GenericSecretConfigProviderSharedPtr
15
secretsProvider(const envoy::extensions::transport_sockets::tls::v3::SdsSecretConfig& config,
16
                Server::Configuration::ServerFactoryContext& server_context,
17
42
                Init::Manager& init_manager) {
18
42
  if (config.has_sds_config()) {
19
30
    return server_context.secretManager().findOrCreateGenericSecretProvider(
20
30
        config.sds_config(), config.name(), server_context, init_manager);
21
36
  } else {
22
12
    return server_context.secretManager().findStaticGenericSecretProvider(config.name());
23
12
  }
24
42
}
25
} // namespace
26

            
27
Common::CredentialInjectorSharedPtr
28
GenericCredentialInjectorFactory::createCredentialInjectorFromProtoTyped(
29
    const Generic& config, const std::string& /*stats_prefix*/,
30
42
    Server::Configuration::ServerFactoryContext& context, Init::Manager& init_manager) {
31
42
  const auto& credential_secret = config.credential();
32

            
33
42
  auto secret_provider = secretsProvider(credential_secret, context, init_manager);
34

            
35
42
  auto secret_reader = std::make_shared<const Common::SDSSecretReader>(
36
42
      std::move(secret_provider), context.threadLocal(), context.api());
37
42
  std::string header = config.header();
38
42
  if (header.empty()) {
39
24
    header = "Authorization";
40
24
  }
41
42
  return std::make_shared<GenericCredentialInjector>(header, config.header_value_prefix(),
42
42
                                                     secret_reader);
43
42
}
44

            
45
/**
46
 * Static registration for the basic auth credential injector. @see
47
 * NamedCredentialInjectorConfigFactory.
48
 */
49
REGISTER_FACTORY(
50
    GenericCredentialInjectorFactory,
51
    Envoy::Extensions::Http::InjectedCredentials::Common::NamedCredentialInjectorConfigFactory);
52

            
53
} // namespace Generic
54
} // namespace InjectedCredentials
55
} // namespace Http
56
} // namespace Extensions
57
} // namespace Envoy