@@ -5,6 +5,9 @@ use std::net::IpAddr;
55use std:: str:: FromStr ;
66
77use crate :: layer:: har:: extensions:: RequestComment ;
8+ use crate :: layer:: remove_header:: {
9+ remove_sensitive_request_headers, remove_sensitive_response_headers,
10+ } ;
811use crate :: proto:: HeaderByteLength ;
912use crate :: request:: Parts as ReqParts ;
1013use crate :: response:: Parts as RespParts ;
@@ -409,7 +412,11 @@ impl TryFrom<Request> for crate::Request {
409412}
410413
411414impl Request {
412- pub fn from_http_request_parts ( parts : & ReqParts , payload : & [ u8 ] ) -> Result < Self , BoxError > {
415+ pub fn from_http_request_parts (
416+ parts : & ReqParts ,
417+ payload : & [ u8 ] ,
418+ preserve_sensitive : bool ,
419+ ) -> Result < Self , BoxError > {
413420 let post_data = if !payload. is_empty ( ) {
414421 let mime_type = get_mime ( & parts. headers ) ;
415422 let params = if mime_type
@@ -463,7 +470,13 @@ impl Request {
463470
464471 let query_string = into_query_string ( parts) ;
465472 let headers_order = parts. extensions . get ( ) . cloned ( ) . unwrap_or_default ( ) ;
466- let header_map = Http1HeaderMap :: from_parts ( parts. headers . clone ( ) , headers_order) ;
473+
474+ let mut headers = parts. headers . clone ( ) ;
475+ if !preserve_sensitive {
476+ remove_sensitive_request_headers ( & mut headers) ;
477+ }
478+
479+ let header_map = Http1HeaderMap :: from_parts ( headers, headers_order) ;
467480
468481 let headers_size_ext = parts. extensions . get :: < HeaderByteLength > ( ) ;
469482 let headers_size = headers_size_ext. map ( |v| v. 0 as i64 ) . unwrap_or ( -1 ) ;
@@ -568,7 +581,11 @@ impl TryFrom<Response> for crate::Response {
568581}
569582
570583impl Response {
571- pub fn from_http_response_parts ( parts : & RespParts , payload : & [ u8 ] ) -> Result < Self , BoxError > {
584+ pub fn from_http_response_parts (
585+ parts : & RespParts ,
586+ payload : & [ u8 ] ,
587+ preserve_sensitive : bool ,
588+ ) -> Result < Self , BoxError > {
572589 let content = Content {
573590 size : payload. len ( ) as i64 ,
574591 compression : None ,
@@ -606,7 +623,13 @@ impl Response {
606623 . unwrap_or_default ( ) ;
607624
608625 let headers_order = parts. extensions . get ( ) . cloned ( ) . unwrap_or_default ( ) ;
609- let header_map = Http1HeaderMap :: from_parts ( parts. headers . clone ( ) , headers_order) ;
626+
627+ let mut headers = parts. headers . clone ( ) ;
628+ if !preserve_sensitive {
629+ remove_sensitive_response_headers ( & mut headers) ;
630+ }
631+
632+ let header_map = Http1HeaderMap :: from_parts ( headers, headers_order) ;
610633
611634 let headers_size_ext = parts. extensions . get :: < HeaderByteLength > ( ) ;
612635 let headers_size = headers_size_ext. map ( |v| v. 0 as i64 ) . unwrap_or ( -1 ) ;
@@ -882,7 +905,7 @@ mod tests {
882905 assert_eq ! ( "www.igvita.com" , host) ;
883906
884907 // rama Request to HAR Request
885- let req0_back = Request :: from_http_request_parts ( & req0_parts, & [ ] ) . unwrap ( ) ;
908+ let req0_back = Request :: from_http_request_parts ( & req0_parts, & [ ] , false ) . unwrap ( ) ;
886909 assert_eq ! ( entry0. request. method, req0_back. method) ;
887910 assert_eq ! ( entry0. request. url, req0_back. url) ;
888911 assert ! ( matches!( req0_back. http_version, HttpVersion :: Http11 ) ) ;
@@ -901,7 +924,7 @@ mod tests {
901924 let ( req5_parts, req5_body) = req5. into_parts ( ) ;
902925 drop ( req5_body) ;
903926
904- let req5_back = Request :: from_http_request_parts ( & req5_parts, & [ ] ) . unwrap ( ) ;
927+ let req5_back = Request :: from_http_request_parts ( & req5_parts, & [ ] , false ) . unwrap ( ) ;
905928 assert_eq ! ( 5 , req5_back. query_string. len( ) , "req: {req5_back:?}" ) ;
906929 assert ! (
907930 req5_back
@@ -952,7 +975,7 @@ mod tests {
952975 assert_eq ! ( "gzip" , ce) ;
953976
954977 // rama Response to HAR Response
955- let res0_back = Response :: from_http_response_parts ( & res0_parts, & [ ] ) . unwrap ( ) ;
978+ let res0_back = Response :: from_http_response_parts ( & res0_parts, & [ ] , false ) . unwrap ( ) ;
956979 assert_eq ! ( 200 , res0_back. status) ;
957980 assert_eq ! ( Some ( "OK" ) , res0_back. status_text. as_deref( ) ) ;
958981 assert ! ( matches!( res0_back. http_version, HttpVersion :: Http11 ) ) ;
@@ -981,7 +1004,8 @@ mod tests {
9811004 assert_eq ! ( req_payload, req_bytes) ;
9821005
9831006 // rama request parts + payload -> HAR request payload
984- let har_req_back = Request :: from_http_request_parts ( & req_parts, & req_payload) . unwrap ( ) ;
1007+ let har_req_back =
1008+ Request :: from_http_request_parts ( & req_parts, & req_payload, false ) . unwrap ( ) ;
9851009 let post_data = har_req_back. post_data . unwrap ( ) ;
9861010 assert_eq ! (
9871011 Some ( Mime :: from_str( "application/octet-stream" ) . unwrap( ) ) ,
@@ -1000,7 +1024,8 @@ mod tests {
10001024 assert_eq ! ( res_payload, res_bytes) ;
10011025
10021026 // rama response parts + payload -> HAR response payload
1003- let har_res_back = Response :: from_http_response_parts ( & res_parts, & res_payload) . unwrap ( ) ;
1027+ let har_res_back =
1028+ Response :: from_http_response_parts ( & res_parts, & res_payload, false ) . unwrap ( ) ;
10041029 assert_eq ! ( res_payload. len( ) as i64 , har_res_back. content. size) ;
10051030 assert_eq ! (
10061031 Some ( Mime :: from_str( "application/octet-stream" ) . unwrap( ) ) ,
0 commit comments