1
#pragma once
2

            
3
#include <string>
4

            
5
#include "envoy/api/api.h"
6
#include "envoy/extensions/transport_sockets/tls/v3/cert.pb.h"
7
#include "envoy/ssl/private_key/private_key.h"
8
#include "envoy/ssl/tls_certificate_config.h"
9

            
10
namespace Envoy {
11
namespace Ssl {
12

            
13
class TlsCertificateConfigImpl : public TlsCertificateConfig {
14
public:
15
  static absl::StatusOr<TlsCertificateConfigImpl>
16
  create(const envoy::extensions::transport_sockets::tls::v3::TlsCertificate& config,
17
         Server::Configuration::TransportSocketFactoryContext& factory_context, Api::Api& api,
18
         const std::string& certificate_name);
19

            
20
10595
  TlsCertificateConfigImpl(TlsCertificateConfigImpl&& other) = default;
21

            
22
5175
  const std::string& certificateChain() const override { return certificate_chain_; }
23
5168
  const std::string& certificateChainPath() const override { return certificate_chain_path_; }
24
5174
  const std::string& certificateName() const override { return certificate_name_; }
25
10293
  const std::string& privateKey() const override { return private_key_; }
26
5141
  const std::string& privateKeyPath() const override { return private_key_path_; }
27
5193
  const std::string& pkcs12() const override { return pkcs12_; }
28
12
  const std::string& pkcs12Path() const override { return pkcs12_path_; }
29
5154
  const std::string& password() const override { return password_; }
30
  const std::string& passwordPath() const override { return password_path_; }
31
3547
  const std::vector<uint8_t>& ocspStaple() const override { return ocsp_staple_; }
32
  const std::string& ocspStaplePath() const override { return ocsp_staple_path_; }
33
5169
  Envoy::Ssl::PrivateKeyMethodProviderSharedPtr privateKeyMethod() const override {
34
5169
    return private_key_method_;
35
5169
  }
36

            
37
private:
38
  TlsCertificateConfigImpl(
39
      const envoy::extensions::transport_sockets::tls::v3::TlsCertificate& config,
40
      Server::Configuration::TransportSocketFactoryContext& factory_context, Api::Api& api,
41
      absl::Status& creation_status, const std::string& certificate_name);
42

            
43
  const std::string certificate_chain_;
44
  const std::string certificate_chain_path_;
45
  const std::string certificate_name_;
46
  const std::string private_key_;
47
  const std::string private_key_path_;
48
  const std::string pkcs12_;
49
  const std::string pkcs12_path_;
50
  const std::string password_;
51
  const std::string password_path_;
52
  const std::vector<uint8_t> ocsp_staple_;
53
  const std::string ocsp_staple_path_;
54
  Envoy::Ssl::PrivateKeyMethodProviderSharedPtr private_key_method_{};
55
};
56

            
57
} // namespace Ssl
58
} // namespace Envoy