1
#pragma once
2

            
3
#include <string>
4

            
5
#include "envoy/config/core/v3/config_source.pb.h"
6
#include "envoy/extensions/transport_sockets/tls/v3/cert.pb.h"
7
#include "envoy/secret/secret_provider.h"
8

            
9
namespace Envoy {
10

            
11
namespace Server {
12
namespace Configuration {
13
class ServerFactoryContext;
14
} // namespace Configuration
15
} // namespace Server
16

            
17
namespace Secret {
18

            
19
/**
20
 * A manager for static and dynamic secrets.
21
 */
22
class SecretManager {
23
public:
24
50757
  virtual ~SecretManager() = default;
25

            
26
  /**
27
   * @param add a static secret from envoy::extensions::transport_sockets::tls::v3::Secret.
28
   * @return a status indicating if the function completed successfully.
29
   */
30
  virtual absl::Status
31
  addStaticSecret(const envoy::extensions::transport_sockets::tls::v3::Secret& secret) PURE;
32

            
33
  /**
34
   * @param name a name of the static TlsCertificateConfigProvider.
35
   * @return the TlsCertificateConfigProviderSharedPtr. Returns nullptr if the static secret is not
36
   * found.
37
   */
38
  virtual TlsCertificateConfigProviderSharedPtr
39
  findStaticTlsCertificateProvider(const std::string& name) const PURE;
40

            
41
  /**
42
   * @param name a name of the static CertificateValidationContextConfigProviderSharedPtr.
43
   * @return the CertificateValidationContextConfigProviderSharedPtr. Returns nullptr
44
   * if the static certificate validation context is not found.
45
   */
46
  virtual CertificateValidationContextConfigProviderSharedPtr
47
  findStaticCertificateValidationContextProvider(const std::string& name) const PURE;
48

            
49
  /**
50
   * @param name a name of the static TlsSessionTicketKeysConfigProviderSharedPtr.
51
   * @return the TlsSessionTicketKeysConfigProviderSharedPtr. Returns nullptr
52
   * if the static tls session ticket keys are not found.
53
   */
54
  virtual TlsSessionTicketKeysConfigProviderSharedPtr
55
  findStaticTlsSessionTicketKeysContextProvider(const std::string& name) const PURE;
56

            
57
  /**
58
   * @param name a name of the static GenericSecretConfigProvider.
59
   * @return the GenericSecretConfigProviderSharedPtr. Returns nullptr if the static secret is not
60
   * found.
61
   */
62
  virtual GenericSecretConfigProviderSharedPtr
63
  findStaticGenericSecretProvider(const std::string& name) const PURE;
64

            
65
  /**
66
   * @param tls_certificate the protobuf config of the TLS certificate.
67
   * @return a TlsCertificateConfigProviderSharedPtr created from tls_certificate.
68
   */
69
  virtual TlsCertificateConfigProviderSharedPtr createInlineTlsCertificateProvider(
70
      const envoy::extensions::transport_sockets::tls::v3::TlsCertificate& tls_certificate) PURE;
71

            
72
  /**
73
   * @param certificate_validation_context the protobuf config of the certificate validation
74
   * context.
75
   * @return a CertificateValidationContextConfigProviderSharedPtr created from
76
   * certificate_validation_context.
77
   */
78
  virtual CertificateValidationContextConfigProviderSharedPtr
79
  createInlineCertificateValidationContextProvider(
80
      const envoy::extensions::transport_sockets::tls::v3::CertificateValidationContext&
81
          certificate_validation_context) PURE;
82

            
83
  /**
84
   * @param tls_certificate the protobuf config of the TLS session ticket keys.
85
   * @return a TlsSessionTicketKeysConfigProviderSharedPtr created from session_ticket_keys.
86
   */
87
  virtual TlsSessionTicketKeysConfigProviderSharedPtr createInlineTlsSessionTicketKeysProvider(
88
      const envoy::extensions::transport_sockets::tls::v3::TlsSessionTicketKeys& tls_certificate)
89
      PURE;
90

            
91
  /**
92
   * @param generic_secret the protobuf config of the generic secret.
93
   * @return a GenericSecretConfigProviderSharedPtr created from tls_certificate.
94
   */
95
  virtual GenericSecretConfigProviderSharedPtr createInlineGenericSecretProvider(
96
      const envoy::extensions::transport_sockets::tls::v3::GenericSecret& generic_secret) PURE;
97

            
98
  /**
99
   * Finds and returns a dynamic secret provider associated to SDS config. Create
100
   * a new one if such provider does not exist.
101
   *
102
   * @param config_source a protobuf message object containing a SDS config source.
103
   * @param config_name a name that uniquely refers to the SDS config source.
104
   * @param secret_provider_context context that provides components for creating and initializing
105
   * secret provider.
106
   * @param init_manager if supplied, register to the initialization sequence; otherwise, start
107
   * immediately
108
   * @param warm if true, wait for the update to complete initialization; otherwise, unblock
109
   * immediately.
110
   * @return TlsCertificateConfigProviderSharedPtr the dynamic TLS secret provider.
111
   */
112
  virtual TlsCertificateConfigProviderSharedPtr
113
  findOrCreateTlsCertificateProvider(const envoy::config::core::v3::ConfigSource& config_source,
114
                                     const std::string& config_name,
115
                                     Server::Configuration::ServerFactoryContext& server_context,
116
                                     OptRef<Init::Manager> init_manager, bool warm) PURE;
117

            
118
  /**
119
   * Finds and returns a dynamic secret provider associated to SDS config. Create
120
   * a new one if such provider does not exist.
121
   *
122
   * @param config_source a protobuf message object containing a SDS config source.
123
   * @param config_name a name that uniquely refers to the SDS config source.
124
   * @param secret_provider_context context that provides components for creating and initializing
125
   * secret provider.
126
   * @return CertificateValidationContextConfigProviderSharedPtr the dynamic certificate validation
127
   * context secret provider.
128
   */
129
  virtual CertificateValidationContextConfigProviderSharedPtr
130
  findOrCreateCertificateValidationContextProvider(
131
      const envoy::config::core::v3::ConfigSource& config_source, const std::string& config_name,
132
      Server::Configuration::ServerFactoryContext& server_context,
133
      Init::Manager& init_manager) PURE;
134

            
135
  /**
136
   * Finds and returns a dynamic secret provider associated to SDS config. Create
137
   * a new one if such provider does not exist.
138
   *
139
   * @param config_source a protobuf message object containing a SDS config source.
140
   * @param config_name a name that uniquely refers to the SDS config source.
141
   * @param secret_provider_context context that provides components for creating and initializing
142
   * secret provider.
143
   * @return TlsSessionTicketKeysConfigProviderSharedPtr the dynamic tls session ticket keys secret
144
   * provider.
145
   */
146
  virtual TlsSessionTicketKeysConfigProviderSharedPtr
147
  findOrCreateTlsSessionTicketKeysContextProvider(
148
      const envoy::config::core::v3::ConfigSource& config_source, const std::string& config_name,
149
      Server::Configuration::ServerFactoryContext& server_context,
150
      Init::Manager& init_manager) PURE;
151

            
152
  /**
153
   * Finds and returns a dynamic secret provider associated to SDS config. Create a new one if such
154
   * provider does not exist.
155
   *
156
   * @param config_source a protobuf message object containing a SDS config source.
157
   * @param config_name a name that uniquely refers to the SDS config source.
158
   * @param secret_provider_context context that provides components for creating and initializing
159
   * secret provider.
160
   * @return GenericSecretConfigProviderSharedPtr the dynamic generic secret provider.
161
   */
162
  virtual GenericSecretConfigProviderSharedPtr
163
  findOrCreateGenericSecretProvider(const envoy::config::core::v3::ConfigSource& config_source,
164
                                    const std::string& config_name,
165
                                    Server::Configuration::ServerFactoryContext& server_context,
166
                                    Init::Manager& init_manager) PURE;
167
};
168

            
169
using SecretManagerPtr = std::unique_ptr<SecretManager>;
170

            
171
} // namespace Secret
172
} // namespace Envoy