@@ -9,7 +9,7 @@ use mirrord_config::{
99 NetworkConfig ,
1010 incoming:: {
1111 IncomingConfig , IncomingMode as ConfigIncomingMode ,
12- http_filter:: { HttpFilterConfig , InnerFilter , PortList } ,
12+ http_filter:: { BodyFilter , HttpFilterConfig , InnerFilter } ,
1313 } ,
1414 outgoing:: OutgoingConfig ,
1515 } ,
@@ -18,7 +18,7 @@ use mirrord_config::{
1818use mirrord_intproxy_protocol:: PortSubscription ;
1919use mirrord_protocol:: {
2020 Port ,
21- tcp:: { Filter , HttpFilter , HttpMethodFilter , MirrorType , StealType } ,
21+ tcp:: { Filter , HttpBodyFilter , HttpFilter , HttpMethodFilter , MirrorType , StealType } ,
2222} ;
2323
2424use crate :: {
@@ -213,9 +213,10 @@ impl IncomingMode {
213213 let ports = config
214214 . http_filter
215215 . ports
216- . as_ref ( )
217- . map ( |port_list| port_list. iter ( ) . copied ( ) . collect ( ) )
218- . unwrap_or ( PortList :: default ( ) . into ( ) ) ;
216+ . get_or_insert_default ( )
217+ . iter ( )
218+ . copied ( )
219+ . collect ( ) ;
219220
220221 let filter = Self :: parse_http_filter ( & config. http_filter ) ;
221222
@@ -228,12 +229,23 @@ impl IncomingMode {
228229 }
229230 }
230231
232+ fn parse_body_filter ( filter : & BodyFilter ) -> HttpBodyFilter {
233+ match filter {
234+ BodyFilter :: Json { query, matches } => HttpBodyFilter :: Json {
235+ query : query. clone ( ) ,
236+ matches : Filter :: new ( matches. clone ( ) )
237+ . expect ( "invalid json body filter `matches` string" ) ,
238+ } ,
239+ }
240+ }
241+
231242 fn parse_http_filter ( http_filter_config : & HttpFilterConfig ) -> HttpFilter {
232243 match http_filter_config {
233244 HttpFilterConfig {
234245 path_filter : Some ( path) ,
235246 header_filter : None ,
236247 method_filter : None ,
248+ body_filter : None ,
237249 all_of : None ,
238250 any_of : None ,
239251 ports : _ports,
@@ -243,6 +255,7 @@ impl IncomingMode {
243255 path_filter : None ,
244256 header_filter : Some ( header) ,
245257 method_filter : None ,
258+ body_filter : None ,
246259 all_of : None ,
247260 any_of : None ,
248261 ports : _ports,
@@ -252,6 +265,7 @@ impl IncomingMode {
252265 path_filter : None ,
253266 header_filter : None ,
254267 method_filter : Some ( method) ,
268+ body_filter : None ,
255269 all_of : None ,
256270 any_of : None ,
257271 ports : _ports,
@@ -263,6 +277,17 @@ impl IncomingMode {
263277 path_filter : None ,
264278 header_filter : None ,
265279 method_filter : None ,
280+ body_filter : Some ( filter) ,
281+ all_of : None ,
282+ any_of : None ,
283+ ports : _ports,
284+ } => HttpFilter :: Body ( Self :: parse_body_filter ( filter) ) ,
285+
286+ HttpFilterConfig {
287+ path_filter : None ,
288+ header_filter : None ,
289+ method_filter : None ,
290+ body_filter : None ,
266291 all_of : Some ( filters) ,
267292 any_of : None ,
268293 ports : _ports,
@@ -272,6 +297,7 @@ impl IncomingMode {
272297 path_filter : None ,
273298 header_filter : None ,
274299 method_filter : None ,
300+ body_filter : None ,
275301 all_of : None ,
276302 any_of : Some ( filters) ,
277303 ports : _ports,
@@ -294,6 +320,9 @@ impl IncomingMode {
294320 InnerFilter :: Method { method } => HttpFilter :: Method (
295321 HttpMethodFilter :: from_str ( method) . expect ( "invalid method filter string" ) ,
296322 ) ,
323+ InnerFilter :: Body ( body_filter) => {
324+ HttpFilter :: Body ( Self :: parse_body_filter ( body_filter) )
325+ }
297326 } )
298327 . collect ( ) ;
299328
0 commit comments