1
#include "source/extensions/transport_sockets/tls/cert_mappers/static_name/config.h"
2

            
3
namespace Envoy {
4
namespace Extensions {
5
namespace TransportSockets {
6
namespace Tls {
7
namespace CertificateMappers {
8
namespace StaticName {
9

            
10
namespace {
11
class StaticNameMapper : public Ssl::TlsCertificateMapper,
12
                         public Ssl::UpstreamTlsCertificateMapper {
13
public:
14
26
  explicit StaticNameMapper(const std::string& name) : name_(name) {}
15
19
  std::string deriveFromClientHello(const SSL_CLIENT_HELLO&) { return name_; }
16
  std::string deriveFromServerHello(const SSL&,
17
14
                                    const Network::TransportSocketOptionsConstSharedPtr&) {
18
14
    return name_;
19
14
  }
20

            
21
private:
22
  const std::string name_;
23
};
24
} // namespace
25

            
26
absl::StatusOr<Ssl::TlsCertificateMapperFactory>
27
StaticNameMapperFactory::createTlsCertificateMapperFactory(
28
    const Protobuf::Message& proto_config,
29
15
    Server::Configuration::GenericFactoryContext& factory_context) {
30
15
  const StaticNameConfigProto& config =
31
15
      MessageUtil::downcastAndValidate<const StaticNameConfigProto&>(
32
15
          proto_config, factory_context.messageValidationVisitor());
33
17
  return [name = config.name()]() { return std::make_unique<StaticNameMapper>(name); };
34
15
}
35

            
36
absl::StatusOr<Ssl::UpstreamTlsCertificateMapperFactory>
37
UpstreamStaticNameMapperFactory::createTlsCertificateMapperFactory(
38
    const Protobuf::Message& proto_config,
39
9
    Server::Configuration::GenericFactoryContext& factory_context) {
40
9
  const StaticNameConfigProto& config =
41
9
      MessageUtil::downcastAndValidate<const StaticNameConfigProto&>(
42
9
          proto_config, factory_context.messageValidationVisitor());
43
10
  return [name = config.name()]() { return std::make_unique<StaticNameMapper>(name); };
44
9
}
45

            
46
REGISTER_FACTORY(StaticNameMapperFactory, Ssl::TlsCertificateMapperConfigFactory);
47
REGISTER_FACTORY(UpstreamStaticNameMapperFactory, Ssl::UpstreamTlsCertificateMapperConfigFactory);
48

            
49
} // namespace StaticName
50
} // namespace CertificateMappers
51
} // namespace Tls
52
} // namespace TransportSockets
53
} // namespace Extensions
54
} // namespace Envoy