@@ -7,7 +7,9 @@ use serde::{Deserialize, Serialize};
77#[ derive( Serialize , Deserialize , Debug ) ]
88pub struct FilterConfig {
99 request_headers : Vec < ( String , String ) > ,
10+ remove_request_headers : Vec < String > ,
1011 response_headers : Vec < ( String , String ) > ,
12+ remove_response_headers : Vec < String > ,
1113}
1214
1315impl FilterConfig {
@@ -32,7 +34,9 @@ impl<EC: EnvoyHttpFilterConfig, EHF: EnvoyHttpFilter> HttpFilterConfig<EC, EHF>
3234 fn new_http_filter ( & mut self , _envoy : & mut EC ) -> Box < dyn HttpFilter < EHF > > {
3335 Box :: new ( Filter {
3436 request_headers : self . request_headers . clone ( ) ,
37+ remove_request_headers : self . remove_request_headers . clone ( ) ,
3538 response_headers : self . response_headers . clone ( ) ,
39+ remove_response_headers : self . remove_response_headers . clone ( ) ,
3640 } )
3741 }
3842}
@@ -42,7 +46,9 @@ impl<EC: EnvoyHttpFilterConfig, EHF: EnvoyHttpFilter> HttpFilterConfig<EC, EHF>
4246/// This sets the request and response headers to the values specified in the filter config.
4347pub struct Filter {
4448 request_headers : Vec < ( String , String ) > ,
49+ remove_request_headers : Vec < String > ,
4550 response_headers : Vec < ( String , String ) > ,
51+ remove_response_headers : Vec < String > ,
4652}
4753
4854/// This implements the [`envoy_proxy_dynamic_modules_rust_sdk::HttpFilter`] trait.
@@ -55,6 +61,9 @@ impl<EHF: EnvoyHttpFilter> HttpFilter<EHF> for Filter {
5561 for ( key, value) in & self . request_headers {
5662 envoy_filter. set_request_header ( key, value. as_bytes ( ) ) ;
5763 }
64+ for key in & self . remove_request_headers {
65+ envoy_filter. remove_request_header ( key) ;
66+ }
5867 abi:: envoy_dynamic_module_type_on_http_filter_request_headers_status:: Continue
5968 }
6069
@@ -66,6 +75,9 @@ impl<EHF: EnvoyHttpFilter> HttpFilter<EHF> for Filter {
6675 for ( key, value) in & self . response_headers {
6776 envoy_filter. set_response_header ( key, value. as_bytes ( ) ) ;
6877 }
78+ for key in & self . remove_response_headers {
79+ envoy_filter. remove_response_header ( key) ;
80+ }
6981 abi:: envoy_dynamic_module_type_on_http_filter_response_headers_status:: Continue
7082 }
7183}
@@ -80,7 +92,9 @@ mod tests {
8092 let mut envoy_filter = envoy_proxy_dynamic_modules_rust_sdk:: MockEnvoyHttpFilter :: new ( ) ;
8193 let mut filter = Filter {
8294 request_headers : vec ! [ ( "X-Foo" . to_string( ) , "bar" . to_string( ) ) ] ,
95+ remove_request_headers : vec ! [ "To-Remove" . to_string( ) ] ,
8396 response_headers : vec ! [ ( "X-Bar" . to_string( ) , "foo" . to_string( ) ) ] ,
97+ remove_response_headers : vec ! [ "To-Remove" . to_string( ) ] ,
8498 } ;
8599
86100 envoy_filter
@@ -90,13 +104,25 @@ mod tests {
90104 assert_eq ! ( value, b"bar" ) ;
91105 return true ;
92106 } ) ;
107+ envoy_filter
108+ . expect_remove_request_header ( )
109+ . returning ( |key| {
110+ assert_eq ! ( key, "To-Remove" ) ;
111+ return true ;
112+ } ) ;
93113 envoy_filter
94114 . expect_set_response_header ( )
95115 . returning ( |key, value| {
96116 assert_eq ! ( key, "X-Bar" ) ;
97117 assert_eq ! ( value, b"foo" ) ;
98118 return true ;
99119 } ) ;
120+ envoy_filter
121+ . expect_remove_response_header ( )
122+ . returning ( |key| {
123+ assert_eq ! ( key, "To-Remove" ) ;
124+ return true ;
125+ } ) ;
100126 assert_eq ! (
101127 filter. on_request_headers( & mut envoy_filter, false ) ,
102128 abi:: envoy_dynamic_module_type_on_http_filter_request_headers_status:: Continue
0 commit comments