@@ -23,7 +23,9 @@ namespace Secret {
2323/* *
2424 * SDS API implementation that fetches secrets from SDS server via Subscription.
2525 */
26+ template <class SecretType >
2627class SdsApi : public Init ::Target,
28+ public SecretProvider<SecretType>,
2729 public Config::SubscriptionCallbacks<envoy::api::v2::auth::Secret> {
2830public:
2931 SdsApi (const LocalInfo::LocalInfo& local_info, Event::Dispatcher& dispatcher,
@@ -42,10 +44,19 @@ class SdsApi : public Init::Target,
4244 return MessageUtil::anyConvert<envoy::api::v2::auth::Secret>(resource).name ();
4345 }
4446
47+ // SecretProvider
48+ const SecretType* secret () const override { return secrets_.get (); }
49+
50+ Common::CallbackHandle* addUpdateCallback (std::function<void ()> callback) override {
51+ return update_callback_manager_.add (callback);
52+ }
53+
4554protected:
4655 // Updates local storage of dynamic secrets and invokes callbacks.
47- virtual void updateConfigHelper (const envoy::api::v2::auth::Secret&) {}
56+ virtual void updateConfigHelper (const envoy::api::v2::auth::Secret&) PURE;
4857 uint64_t secret_hash_;
58+ std::unique_ptr<SecretType> secrets_;
59+ Common::CallbackManager<> update_callback_manager_;
4960
5061private:
5162 void runInitializeCallbackIfAny ();
@@ -67,7 +78,7 @@ class SdsApi : public Init::Target,
6778/* *
6879 * TlsCertificateSdsApi implementation maintains and updates dynamic TLS certificate secrets.
6980 */
70- class TlsCertificateSdsApi : public SdsApi , public TlsCertificateConfigProvider {
81+ class TlsCertificateSdsApi : public SdsApi <Ssl::TlsCertificateConfig> {
7182public:
7283 TlsCertificateSdsApi (const LocalInfo::LocalInfo& local_info, Event::Dispatcher& dispatcher,
7384 Runtime::RandomGenerator& random, Stats::Store& stats,
@@ -77,29 +88,16 @@ class TlsCertificateSdsApi : public SdsApi, public TlsCertificateConfigProvider
7788 : SdsApi(local_info, dispatcher, random, stats, cluster_manager, init_manager, sds_config,
7889 sds_config_name, destructor_cb) {}
7990
80- // SecretProvider
81- const Ssl::TlsCertificateConfig* secret () const override {
82- return tls_certificate_secrets_.get ();
83- }
84-
85- Common::CallbackHandle* addUpdateCallback (std::function<void ()> callback) override {
86- return update_callback_manager_.add (callback);
87- }
88-
8991private:
9092 // SdsApi
9193 void updateConfigHelper (const envoy::api::v2::auth::Secret& secret) override ;
92-
93- Ssl::TlsCertificateConfigPtr tls_certificate_secrets_;
94- Common::CallbackManager<> update_callback_manager_;
9594};
9695
9796/* *
9897 * CertificateValidationContextSdsApi implementation maintains and updates dynamic certificate
9998 * validation context secrets.
10099 */
101- class CertificateValidationContextSdsApi : public SdsApi ,
102- public CertificateValidationContextConfigProvider {
100+ class CertificateValidationContextSdsApi : public SdsApi <Ssl::CertificateValidationContextConfig> {
103101public:
104102 CertificateValidationContextSdsApi (const LocalInfo::LocalInfo& local_info,
105103 Event::Dispatcher& dispatcher,
@@ -112,21 +110,9 @@ class CertificateValidationContextSdsApi : public SdsApi,
112110 : SdsApi(local_info, dispatcher, random, stats, cluster_manager, init_manager, sds_config,
113111 sds_config_name, destructor_cb) {}
114112
115- // SecretProvider
116- const Ssl::CertificateValidationContextConfig* secret () const override {
117- return certificate_validation_context_secrets_.get ();
118- }
119-
120- Common::CallbackHandle* addUpdateCallback (std::function<void ()> callback) override {
121- return update_callback_manager_.add (callback);
122- }
123-
124113private:
125114 // SdsApi
126115 void updateConfigHelper (const envoy::api::v2::auth::Secret& secret) override ;
127-
128- Ssl::CertificateValidationContextConfigPtr certificate_validation_context_secrets_;
129- Common::CallbackManager<> update_callback_manager_;
130116};
131117
132118} // namespace Secret
0 commit comments