thrift_proxy: Add thrift header to metadata filter (#18637)
Signed-off-by: James Fish <jfish@pinterest.com> Mirrored from https://github.com/envoyproxy/envoy @ 6acc5d20cba6706cdba1c9ade2303f06061c88d9pull/626/head
parent
3ca8331a51
commit
5b02b613cd
4 changed files with 123 additions and 0 deletions
@ -0,0 +1,12 @@ |
||||
# DO NOT EDIT. This file is generated by tools/proto_format/proto_sync.py. |
||||
|
||||
load("@envoy_api//bazel:api_build_system.bzl", "api_proto_package") |
||||
|
||||
licenses(["notice"]) # Apache 2 |
||||
|
||||
api_proto_package( |
||||
deps = [ |
||||
"//envoy/type/matcher/v3:pkg", |
||||
"@com_github_cncf_udpa//udpa/annotations:pkg", |
||||
], |
||||
) |
@ -0,0 +1,109 @@ |
||||
syntax = "proto3"; |
||||
|
||||
package envoy.extensions.filters.network.thrift_proxy.filters.header_to_metadata.v3; |
||||
|
||||
import "envoy/type/matcher/v3/regex.proto"; |
||||
|
||||
import "udpa/annotations/status.proto"; |
||||
import "validate/validate.proto"; |
||||
|
||||
option java_package = "io.envoyproxy.envoy.extensions.filters.network.thrift_proxy.filters.header_to_metadata.v3"; |
||||
option java_outer_classname = "HeaderToMetadataProto"; |
||||
option java_multiple_files = true; |
||||
option (udpa.annotations.file_status).package_version_status = ACTIVE; |
||||
|
||||
// [#protodoc-title: Header-To-Metadata Filter] |
||||
// |
||||
// The configuration for transforming headers into metadata. This is useful |
||||
// for matching load balancer subsets, logging, etc. |
||||
// |
||||
// Header to Metadata :ref:`configuration overview <config_thrift_filters_header_to_metadata>`. |
||||
// [#extension: envoy.filters.thrift.header_to_metadata] |
||||
|
||||
message HeaderToMetadata { |
||||
enum ValueType { |
||||
STRING = 0; |
||||
|
||||
NUMBER = 1; |
||||
|
||||
// The value is a serialized `protobuf.Value |
||||
// <https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/struct.proto#L62>`_. |
||||
PROTOBUF_VALUE = 2; |
||||
} |
||||
|
||||
// ValueEncode defines the encoding algorithm. |
||||
enum ValueEncode { |
||||
// The value is not encoded. |
||||
NONE = 0; |
||||
|
||||
// The value is encoded in `Base64 <https://tools.ietf.org/html/rfc4648#section-4>`_. |
||||
// Note: this is mostly used for STRING and PROTOBUF_VALUE to escape the |
||||
// non-ASCII characters in the header. |
||||
BASE64 = 1; |
||||
} |
||||
|
||||
// [#next-free-field: 7] |
||||
message KeyValuePair { |
||||
// The namespace — if this is empty, the filter's namespace will be used. |
||||
string metadata_namespace = 1; |
||||
|
||||
// The key to use within the namespace. |
||||
string key = 2 [(validate.rules).string = {min_len: 1}]; |
||||
|
||||
oneof value_type { |
||||
// The value to pair with the given key. |
||||
// |
||||
// When used for on_present case, if value is non-empty it'll be used instead |
||||
// of the header value. If both are empty, no metadata is added. |
||||
// |
||||
// When used for on_missing case, a non-empty value must be provided otherwise |
||||
// no metadata is added. |
||||
string value = 3; |
||||
|
||||
// If present, the header's value will be matched and substituted with this. |
||||
// If there is no match or substitution, the header value |
||||
// is used as-is. |
||||
// |
||||
// This is only used for on_present. |
||||
// |
||||
// Note: if the `value` field is non-empty this field should be empty. |
||||
type.matcher.v3.RegexMatchAndSubstitute regex_value_rewrite = 4; |
||||
} |
||||
|
||||
// The value's type — defaults to string. |
||||
ValueType type = 5 [(validate.rules).enum = {defined_only: true}]; |
||||
|
||||
// How is the value encoded, default is NONE (not encoded). |
||||
// The value will be decoded accordingly before storing to metadata. |
||||
ValueEncode encode = 6; |
||||
} |
||||
|
||||
// A Rule defines what metadata to apply when a header is present or missing. |
||||
message Rule { |
||||
// Specifies that a match will be performed on the value of a header. |
||||
// |
||||
// The header to be extracted. |
||||
string header = 1 |
||||
[(validate.rules).string = {min_len: 1 well_known_regex: HTTP_HEADER_NAME strict: false}]; |
||||
|
||||
// If the header is present, apply this metadata KeyValuePair. |
||||
// |
||||
// If the value in the KeyValuePair is non-empty, it'll be used instead |
||||
// of the header value. |
||||
KeyValuePair on_present = 2; |
||||
|
||||
// If the header is not present, apply this metadata KeyValuePair. |
||||
// |
||||
// The value in the KeyValuePair must be set, since it'll be used in lieu |
||||
// of the missing header value. |
||||
KeyValuePair on_missing = 3; |
||||
|
||||
// Whether or not to remove the header after a rule is applied. |
||||
// |
||||
// This prevents headers from leaking. |
||||
bool remove = 4; |
||||
} |
||||
|
||||
// The list of rules to apply to requests. |
||||
repeated Rule request_rules = 1 [(validate.rules).repeated = {min_items: 1}]; |
||||
} |
Loading…
Reference in new issue