@@ -448,7 +448,7 @@ pub fn auth_user_context(
448448 return Ok ( rbac:: Response :: Suspended ( msg) ) ;
449449 }
450450 let creds = extract_session_key ( req) ;
451- let user = req. match_info ( ) . get ( "username " ) ;
451+ let user = req. match_info ( ) . get ( "userid " ) ;
452452 creds. map ( |key| Users . authorize ( key, action, None , user) )
453453}
454454
@@ -545,7 +545,7 @@ where
545545 forward_ready ! ( service) ;
546546
547547 fn call ( & self , mut req : ServiceRequest ) -> Self :: Future {
548- let err = if let Some ( ( _ , hash ) ) = CLUSTER_SECRET . get ( ) {
548+ let ( err, id ) = if let Some ( ( secret , _ ) ) = CLUSTER_SECRET . get ( ) {
549549 if let Some ( header) = req. headers ( ) . get ( CLUSTER_SECRET_HEADER )
550550 && let Some ( tenant) = req. headers ( ) . get ( "intra-cluster-tenant" )
551551 && let Some ( userid) = req. headers ( ) . get ( "intra-cluster-userid" )
@@ -556,7 +556,7 @@ where
556556 // validate the incoming header value
557557 let parsed_hash = PasswordHash :: new ( incoming_secret) . unwrap ( ) ;
558558 if Argon2 :: default ( )
559- . verify_password ( hash . as_bytes ( ) , & parsed_hash)
559+ . verify_password ( secret . as_bytes ( ) , & parsed_hash)
560560 . is_ok ( )
561561 {
562562 // create a user session (how to remove that later?)
@@ -565,7 +565,7 @@ where
565565 } else {
566566 Some ( tenant. to_owned ( ) )
567567 } ;
568- if let Some ( user) = Users . get_user ( userid, & tenant_id) {
568+ let id = if let Some ( user) = Users . get_user ( userid, & tenant_id) {
569569 let id = Ulid :: new ( ) ;
570570 req. headers_mut ( ) . insert (
571571 header:: COOKIE ,
@@ -574,18 +574,27 @@ where
574574 let session = SessionKey :: SessionId ( id) ;
575575 req. extensions_mut ( ) . insert ( session. clone ( ) ) ;
576576 Users . new_session ( & user, session, TimeDelta :: seconds ( 20 ) ) ;
577- }
578- None
577+ Some ( id)
578+ } else {
579+ None
580+ } ;
581+ ( None , id)
579582 } else {
580- Some ( "Incoming intra-cluster request validation failed" )
583+ (
584+ Some ( "Incoming intra-cluster request validation failed" ) ,
585+ None ,
586+ )
581587 }
582588 } else {
583- Some (
584- "Incoming intra-cluster request doesn't contain the proper header or the server was started without P_CLUSTER_SECRET" ,
589+ (
590+ Some (
591+ "Incoming intra-cluster request doesn't contain the proper header or the server was started without P_CLUSTER_SECRET" ,
592+ ) ,
593+ None ,
585594 )
586595 }
587596 } else {
588- None
597+ ( None , None )
589598 } ;
590599
591600 let fut = self . service . call ( req) ;
@@ -594,7 +603,11 @@ where
594603 if let Some ( err) = err {
595604 return Err ( ErrorUnauthorized ( err) ) ;
596605 }
597- fut. await
606+ let res = fut. await ;
607+ if let Some ( id) = id {
608+ mut_sessions ( ) . remove_session ( & SessionKey :: SessionId ( id) ) ;
609+ }
610+ res
598611 } )
599612 }
600613}
0 commit comments