Line data Source code
1 : #include "source/common/config/custom_config_validators_impl.h" 2 : 3 : #include "source/common/config/opaque_resource_decoder_impl.h" 4 : #include "source/common/config/utility.h" 5 : 6 : namespace Envoy { 7 : namespace Config { 8 : 9 : CustomConfigValidatorsImpl::CustomConfigValidatorsImpl( 10 : ProtobufMessage::ValidationVisitor& validation_visitor, const Server::Instance& server, 11 : const Protobuf::RepeatedPtrField<envoy::config::core::v3::TypedExtensionConfig>& 12 : validators_configs) 13 31 : : server_(server) { 14 31 : for (const auto& validator_config : validators_configs) { 15 0 : auto& factory = 16 0 : Config::Utility::getAndCheckFactory<Config::ConfigValidatorFactory>(validator_config); 17 0 : const auto validator_type_url = factory.typeUrl(); 18 0 : Config::ConfigValidatorPtr validator = 19 0 : factory.createConfigValidator(validator_config.typed_config(), validation_visitor); 20 : 21 : // Insert a new vector for the type url if one doesn't exist. 22 0 : auto pair = validators_map_.emplace(validator_type_url, 0); 23 0 : pair.first->second.emplace_back(std::move(validator)); 24 0 : } 25 31 : } 26 : 27 : void CustomConfigValidatorsImpl::executeValidators( 28 176 : absl::string_view type_url, const std::vector<DecodedResourcePtr>& resources) { 29 176 : auto validators_it = validators_map_.find(type_url); 30 176 : if (validators_it != validators_map_.end()) { 31 0 : auto& validators = validators_it->second; 32 0 : for (auto& validator : validators) { 33 : // A validator can either succeed, or throw an EnvoyException. 34 0 : validator->validate(server_, resources); 35 0 : } 36 0 : } 37 176 : } 38 : 39 : void CustomConfigValidatorsImpl::executeValidators( 40 : absl::string_view type_url, const std::vector<DecodedResourcePtr>& added_resources, 41 46 : const Protobuf::RepeatedPtrField<std::string>& removed_resources) { 42 46 : auto validators_it = validators_map_.find(type_url); 43 46 : if (validators_it != validators_map_.end()) { 44 0 : auto& validators = validators_it->second; 45 0 : for (auto& validator : validators) { 46 : // A validator can either succeed, or throw an EnvoyException. 47 0 : validator->validate(server_, added_resources, removed_resources); 48 0 : } 49 0 : } 50 46 : } 51 : 52 : } // namespace Config 53 : } // namespace Envoy