Line data Source code
1 : #pragma once 2 : 3 : #include <functional> 4 : 5 : #include "envoy/common/callback.h" 6 : #include "envoy/common/pure.h" 7 : #include "envoy/extensions/transport_sockets/tls/v3/cert.pb.h" 8 : #include "envoy/init/target.h" 9 : #include "envoy/ssl/certificate_validation_context_config.h" 10 : #include "envoy/ssl/tls_certificate_config.h" 11 : 12 : namespace Envoy { 13 : namespace Secret { 14 : 15 : /** 16 : * A secret provider for each kind of secret. 17 : */ 18 : template <class SecretType> class SecretProvider { 19 : public: 20 70 : virtual ~SecretProvider() = default; 21 : 22 : /** 23 : * @return the secret. Returns nullptr if the secret is not ready. 24 : */ 25 : virtual const SecretType* secret() const PURE; 26 : 27 : /** 28 : * Add secret validation callback into secret provider. 29 : * It is safe to call this method by main thread and callback is safe to be invoked 30 : * on main thread. 31 : * @param callback callback that is executed by secret provider. 32 : * @return CallbackHandle the handle which can remove that validation callback. 33 : */ 34 : ABSL_MUST_USE_RESULT virtual Common::CallbackHandlePtr 35 : addValidationCallback(std::function<void(const SecretType&)> callback) PURE; 36 : 37 : /** 38 : * Add secret update callback into secret provider. 39 : * It is safe to call this method by main thread and callback is safe to be invoked 40 : * on main thread. 41 : * @param callback callback that is executed by secret provider. 42 : * @return CallbackHandle the handle which can remove that update callback. 43 : */ 44 : ABSL_MUST_USE_RESULT virtual Common::CallbackHandlePtr 45 : addUpdateCallback(std::function<void()> callback) PURE; 46 : 47 : /** 48 : * @return const Init::Target* A shared init target that can be used by multiple init managers. 49 : * nullptr if the provider isn't dynamic. 50 : */ 51 0 : virtual const Init::Target* initTarget() { return nullptr; } 52 : }; 53 : 54 : using TlsCertificatePtr = 55 : std::unique_ptr<envoy::extensions::transport_sockets::tls::v3::TlsCertificate>; 56 : using CertificateValidationContextPtr = 57 : std::unique_ptr<envoy::extensions::transport_sockets::tls::v3::CertificateValidationContext>; 58 : using TlsSessionTicketKeysPtr = 59 : std::unique_ptr<envoy::extensions::transport_sockets::tls::v3::TlsSessionTicketKeys>; 60 : using GenericSecretPtr = 61 : std::unique_ptr<envoy::extensions::transport_sockets::tls::v3::GenericSecret>; 62 : 63 : using TlsCertificateConfigProvider = 64 : SecretProvider<envoy::extensions::transport_sockets::tls::v3::TlsCertificate>; 65 : using TlsCertificateConfigProviderSharedPtr = std::shared_ptr<TlsCertificateConfigProvider>; 66 : 67 : using CertificateValidationContextConfigProvider = 68 : SecretProvider<envoy::extensions::transport_sockets::tls::v3::CertificateValidationContext>; 69 : using CertificateValidationContextConfigProviderSharedPtr = 70 : std::shared_ptr<CertificateValidationContextConfigProvider>; 71 : 72 : using TlsSessionTicketKeysConfigProvider = 73 : SecretProvider<envoy::extensions::transport_sockets::tls::v3::TlsSessionTicketKeys>; 74 : using TlsSessionTicketKeysConfigProviderSharedPtr = 75 : std::shared_ptr<TlsSessionTicketKeysConfigProvider>; 76 : 77 : using GenericSecretConfigProvider = 78 : SecretProvider<envoy::extensions::transport_sockets::tls::v3::GenericSecret>; 79 : using GenericSecretConfigProviderSharedPtr = std::shared_ptr<GenericSecretConfigProvider>; 80 : 81 : } // namespace Secret 82 : } // namespace Envoy