1
#include "source/common/router/matcher_visitor.h"
2

            
3
#include "envoy/extensions/matching/common_inputs/network/v3/network_inputs.pb.h"
4
#include "envoy/extensions/matching/common_inputs/network/v3/network_inputs.pb.validate.h"
5
#include "envoy/extensions/matching/http/dynamic_modules/v3/dynamic_modules.pb.h"
6
#include "envoy/type/matcher/v3/http_inputs.pb.h"
7
#include "envoy/type/matcher/v3/http_inputs.pb.validate.h"
8

            
9
namespace Envoy {
10
namespace Router {
11

            
12
absl::Status RouteActionValidationVisitor::performDataInputValidation(
13
20
    const Matcher::DataInputFactory<Http::HttpMatchingData>&, absl::string_view type_url) {
14
20
  static const std::string request_header_input_name = TypeUtil::descriptorFullNameToTypeUrl(
15
20
      createReflectableMessage(
16
20
          envoy::type::matcher::v3::HttpRequestHeaderMatchInput::default_instance())
17
20
          ->GetDescriptor()
18
20
          ->full_name());
19
20
  static const std::string filter_state_input_name = TypeUtil::descriptorFullNameToTypeUrl(
20
20
      createReflectableMessage(envoy::extensions::matching::common_inputs::network::v3::
21
20
                                   FilterStateInput::default_instance())
22
20
          ->GetDescriptor()
23
20
          ->full_name());
24
20
  static const std::string dynamic_module_input_name = TypeUtil::descriptorFullNameToTypeUrl(
25
20
      createReflectableMessage(envoy::extensions::matching::http::dynamic_modules::v3::
26
20
                                   HttpDynamicModuleMatchInput::default_instance())
27
20
          ->GetDescriptor()
28
20
          ->full_name());
29
20
  if (type_url == request_header_input_name || type_url == filter_state_input_name ||
30
20
      type_url == dynamic_module_input_name) {
31
19
    return absl::OkStatus();
32
19
  }
33

            
34
1
  return absl::InvalidArgumentError(
35
1
      fmt::format("Route table can only match on request headers, saw {}", type_url));
36
20
}
37

            
38
} // namespace Router
39
} // namespace Envoy