27 #include "absl/memory/memory.h"
28 #include "absl/strings/str_format.h"
29 #include "absl/strings/str_join.h"
42 const char* kFileWatcherPlugin =
"file_watcher";
51 return kFileWatcherPlugin;
55 std::vector<std::string> parts;
57 if (!identity_cert_file_.empty()) {
61 if (!identity_cert_file_.empty()) {
65 if (!identity_cert_file_.empty()) {
70 absl::StrFormat(
"refresh_interval=%ldms}", refresh_interval_.millis()));
77 auto config = MakeRefCounted<FileWatcherCertificateProviderFactory::Config>();
80 "error:config type should be OBJECT.");
83 std::vector<grpc_error_handle> error_list;
85 &
config->identity_cert_file_, &error_list,
false);
87 &
config->private_key_file_, &error_list,
false);
88 if (
config->identity_cert_file_.empty() !=
89 config->private_key_file_.empty()) {
91 "fields \"certificate_file\" and \"private_key_file\" must be both set "
95 &
config->root_cert_file_, &error_list,
false);
96 if (
config->identity_cert_file_.empty() &&
config->root_cert_file_.empty()) {
98 "At least one of \"certificate_file\" and \"ca_certificate_file\" must "
103 &
config->refresh_interval_, &error_list,
false)) {
106 if (!error_list.empty()) {
108 "Error parsing file watcher certificate provider config", &error_list);
119 return kFileWatcherPlugin;
137 auto* file_watcher_config =
139 return MakeRefCounted<FileWatcherCertificateProvider>(
140 file_watcher_config->private_key_file(),
141 file_watcher_config->identity_cert_file(),
142 file_watcher_config->root_cert_file(),
143 file_watcher_config->refresh_interval().millis() /
GPR_MS_PER_SEC);
148 absl::make_unique<FileWatcherCertificateProviderFactory>());