@@ -198,6 +198,7 @@ impl HttpServerAuthMatcher {
198198 & self ,
199199 address : Option < & SocketAddr > ,
200200 headers : & HeaderMap < HeaderValue > ,
201+ path : & str ,
201202 ) -> Result < ( ) , ErrorMessage > {
202203 match self {
203204 HttpServerAuthMatcher :: AuthHeader ( expected, err_message) => {
@@ -218,7 +219,7 @@ impl HttpServerAuthMatcher {
218219 }
219220 }
220221 HttpServerAuthMatcher :: Vrl { program } => {
221- self . handle_vrl_auth ( address, headers, program)
222+ self . handle_vrl_auth ( address, headers, path , program)
222223 }
223224 }
224225 }
@@ -227,6 +228,7 @@ impl HttpServerAuthMatcher {
227228 & self ,
228229 address : Option < & SocketAddr > ,
229230 headers : & HeaderMap < HeaderValue > ,
231+ path : & str ,
230232 program : & Program ,
231233 ) -> Result < ( ) , ErrorMessage > {
232234 let mut target = VrlTarget :: new (
@@ -250,6 +252,7 @@ impl HttpServerAuthMatcher {
250252 "address" . into ( ) ,
251253 address. map_or ( Value :: Null , |a| Value :: from ( a. ip ( ) . to_string ( ) ) ) ,
252254 ) ,
255+ ( "path" . into ( ) , Value :: from ( path. to_owned ( ) ) ) ,
253256 ] ) ,
254257 Default :: default ( ) ,
255258 ) ) ,
@@ -439,7 +442,7 @@ mod tests {
439442
440443 let matcher = basic_auth. build ( & Default :: default ( ) ) . unwrap ( ) ;
441444
442- let result = matcher. handle_auth ( Some ( & next_addr ( ) ) , & HeaderMap :: new ( ) ) ;
445+ let result = matcher. handle_auth ( Some ( & next_addr ( ) ) , & HeaderMap :: new ( ) , "/" ) ;
443446
444447 assert ! ( result. is_err( ) ) ;
445448 let error = result. unwrap_err ( ) ;
@@ -458,7 +461,7 @@ mod tests {
458461
459462 let mut headers = HeaderMap :: new ( ) ;
460463 headers. insert ( AUTHORIZATION , HeaderValue :: from_static ( "Basic wrong" ) ) ;
461- let result = matcher. handle_auth ( Some ( & next_addr ( ) ) , & headers) ;
464+ let result = matcher. handle_auth ( Some ( & next_addr ( ) ) , & headers, "/" ) ;
462465
463466 assert ! ( result. is_err( ) ) ;
464467 let error = result. unwrap_err ( ) ;
@@ -482,7 +485,7 @@ mod tests {
482485 AUTHORIZATION ,
483486 Authorization :: basic ( & username, & password) . 0 . encode ( ) ,
484487 ) ;
485- let result = matcher. handle_auth ( Some ( & next_addr ( ) ) , & headers) ;
488+ let result = matcher. handle_auth ( Some ( & next_addr ( ) ) , & headers, "/" ) ;
486489
487490 assert ! ( result. is_ok( ) ) ;
488491 }
@@ -497,7 +500,7 @@ mod tests {
497500
498501 let mut headers = HeaderMap :: new ( ) ;
499502 headers. insert ( AUTHORIZATION , HeaderValue :: from_static ( "test" ) ) ;
500- let result = matcher. handle_auth ( Some ( & next_addr ( ) ) , & headers) ;
503+ let result = matcher. handle_auth ( Some ( & next_addr ( ) ) , & headers, "/" ) ;
501504
502505 assert ! ( result. is_ok( ) ) ;
503506 }
@@ -513,7 +516,7 @@ mod tests {
513516 let matcher = custom_auth. build ( & Default :: default ( ) ) . unwrap ( ) ;
514517
515518 let headers = HeaderMap :: new ( ) ;
516- let result = matcher. handle_auth ( Some ( & next_addr ( ) ) , & headers) ;
519+ let result = matcher. handle_auth ( Some ( & next_addr ( ) ) , & headers, "/" ) ;
517520
518521 assert ! ( result. is_ok( ) ) ;
519522 }
@@ -529,7 +532,35 @@ mod tests {
529532 let matcher = custom_auth. build ( & Default :: default ( ) ) . unwrap ( ) ;
530533
531534 let headers = HeaderMap :: new ( ) ;
532- let result = matcher. handle_auth ( None , & headers) ;
535+ let result = matcher. handle_auth ( None , & headers, "/" ) ;
536+
537+ assert ! ( result. is_err( ) ) ;
538+ }
539+
540+ #[ test]
541+ fn custom_auth_matcher_should_be_able_to_check_path ( ) {
542+ let custom_auth = HttpServerAuthConfig :: Custom {
543+ source : r#".path == "/ok""# . to_string ( ) ,
544+ } ;
545+
546+ let matcher = custom_auth. build ( & Default :: default ( ) ) . unwrap ( ) ;
547+
548+ let headers = HeaderMap :: new ( ) ;
549+ let result = matcher. handle_auth ( Some ( & next_addr ( ) ) , & headers, "/ok" ) ;
550+
551+ assert ! ( result. is_ok( ) ) ;
552+ }
553+
554+ #[ test]
555+ fn custom_auth_matcher_should_return_401_with_wrong_path ( ) {
556+ let custom_auth = HttpServerAuthConfig :: Custom {
557+ source : r#".path == "/ok""# . to_string ( ) ,
558+ } ;
559+
560+ let matcher = custom_auth. build ( & Default :: default ( ) ) . unwrap ( ) ;
561+
562+ let headers = HeaderMap :: new ( ) ;
563+ let result = matcher. handle_auth ( Some ( & next_addr ( ) ) , & headers, "/bad" ) ;
533564
534565 assert ! ( result. is_err( ) ) ;
535566 }
@@ -544,7 +575,7 @@ mod tests {
544575
545576 let mut headers = HeaderMap :: new ( ) ;
546577 headers. insert ( AUTHORIZATION , HeaderValue :: from_static ( "wrong value" ) ) ;
547- let result = matcher. handle_auth ( Some ( & next_addr ( ) ) , & headers) ;
578+ let result = matcher. handle_auth ( Some ( & next_addr ( ) ) , & headers, "/" ) ;
548579
549580 assert ! ( result. is_err( ) ) ;
550581 let error = result. unwrap_err ( ) ;
@@ -562,7 +593,7 @@ mod tests {
562593
563594 let mut headers = HeaderMap :: new ( ) ;
564595 headers. insert ( AUTHORIZATION , HeaderValue :: from_static ( "test" ) ) ;
565- let result = matcher. handle_auth ( Some ( & next_addr ( ) ) , & headers) ;
596+ let result = matcher. handle_auth ( Some ( & next_addr ( ) ) , & headers, "/" ) ;
566597
567598 assert ! ( result. is_err( ) ) ;
568599 let error = result. unwrap_err ( ) ;
0 commit comments