1
#pragma once
2

            
3
#include "envoy/server/filter_config.h"
4

            
5
#include "source/extensions/http/injected_credentials/common/credential.h"
6
#include "source/extensions/http/injected_credentials/common/factory.h"
7

            
8
namespace Envoy {
9
namespace Extensions {
10
namespace Http {
11
namespace InjectedCredentials {
12
namespace Common {
13

            
14
template <class ConfigProto>
15
class CredentialInjectorFactoryBase : public NamedCredentialInjectorConfigFactory {
16
public:
17
  CredentialInjectorSharedPtr createCredentialInjectorFromProto(
18
      const Protobuf::Message& proto_config, const std::string& stats_prefix,
19
66
      Server::Configuration::ServerFactoryContext& context, Init::Manager& init_manager) override {
20
66
    return createCredentialInjectorFromProtoTyped(
21
66
        MessageUtil::downcastAndValidate<const ConfigProto&>(proto_config,
22
66
                                                             context.messageValidationVisitor()),
23
66
        stats_prefix, context, init_manager);
24
66
  }
25

            
26
72
  ProtobufTypes::MessagePtr createEmptyConfigProto() override {
27
72
    return std::make_unique<ConfigProto>();
28
72
  }
29

            
30
79
  std::string name() const override { return name_; }
31

            
32
protected:
33
13
  CredentialInjectorFactoryBase(const std::string& name) : name_(name) {}
34

            
35
private:
36
  virtual CredentialInjectorSharedPtr
37
  createCredentialInjectorFromProtoTyped(const ConfigProto&, const std::string&,
38
                                         Server::Configuration::ServerFactoryContext&,
39
                                         Init::Manager& init_manager) PURE;
40

            
41
  const std::string name_;
42
};
43

            
44
} // namespace Common
45
} // namespace InjectedCredentials
46
} // namespace Http
47
} // namespace Extensions
48
} // namespace Envoy