@@ -523,6 +523,7 @@ pub async fn sync_users_with_roles_with_ingestors(
523523 let userid = userid. to_owned ( ) ;
524524 let headers = req. headers ( ) . clone ( ) ;
525525 let op = operation. to_string ( ) ;
526+ let caller_userid = get_user_from_request ( req) . unwrap ( ) ;
526527 for_each_live_node ( tenant_id, move |ingestor| {
527528 let url = format ! (
528529 "{}{}/user/{}/role/sync/{}" ,
@@ -533,7 +534,8 @@ pub async fn sync_users_with_roles_with_ingestors(
533534 ) ;
534535
535536 let role_data = role_data. clone ( ) ;
536- let headermap = create_intracluster_auth_headermap ( & headers, & ingestor. token , & userid) ;
537+ let headermap =
538+ create_intracluster_auth_headermap ( & headers, & ingestor. token , & caller_userid) ;
537539 async move {
538540 let res = INTRA_CLUSTER_CLIENT
539541 . patch ( url)
@@ -572,6 +574,7 @@ pub async fn sync_user_deletion_with_ingestors(
572574 tenant_id : & Option < String > ,
573575) -> Result < ( ) , RBACError > {
574576 let userid = userid. to_owned ( ) ;
577+ let caller_userid = get_user_from_request ( req) . unwrap ( ) ;
575578 let headers = req. headers ( ) . clone ( ) ;
576579 for_each_live_node ( tenant_id, move |ingestor| {
577580 let url = format ! (
@@ -580,7 +583,8 @@ pub async fn sync_user_deletion_with_ingestors(
580583 base_path_without_preceding_slash( ) ,
581584 userid
582585 ) ;
583- let headermap = create_intracluster_auth_headermap ( & headers, & ingestor. token , & userid) ;
586+ let headermap =
587+ create_intracluster_auth_headermap ( & headers, & ingestor. token , & caller_userid) ;
584588 async move {
585589 let res = INTRA_CLUSTER_CLIENT
586590 . delete ( url)
@@ -629,6 +633,7 @@ pub async fn sync_user_creation(
629633 RBACError :: SerdeError ( err)
630634 } ) ?;
631635
636+ let caller_userid = get_user_from_request ( req) ?;
632637 let userid = userid. to_string ( ) ;
633638 let headers = req. headers ( ) . clone ( ) ;
634639 for_each_live_node ( tenant_id, move |node| {
@@ -638,7 +643,7 @@ pub async fn sync_user_creation(
638643 base_path_without_preceding_slash( ) ,
639644 userid
640645 ) ;
641- let headermap = create_intracluster_auth_headermap ( & headers, & node. token , & userid ) ;
646+ let headermap = create_intracluster_auth_headermap ( & headers, & node. token , & caller_userid ) ;
642647 let user_data = user_data. clone ( ) ;
643648
644649 async move {
@@ -678,6 +683,7 @@ pub async fn sync_password_reset_with_ingestors(
678683) -> Result < ( ) , RBACError > {
679684 let userid = username. to_owned ( ) ;
680685 let tenant_id = get_tenant_id_from_request ( & req) ;
686+ let caller_userid = get_user_from_request ( & req) . unwrap ( ) ;
681687 let headers = req. headers ( ) . clone ( ) ;
682688 for_each_live_node ( & tenant_id, move |ingestor| {
683689 let url = format ! (
@@ -686,7 +692,8 @@ pub async fn sync_password_reset_with_ingestors(
686692 base_path_without_preceding_slash( ) ,
687693 userid
688694 ) ;
689- let headermap = create_intracluster_auth_headermap ( & headers, & ingestor. token , & userid) ;
695+ let headermap =
696+ create_intracluster_auth_headermap ( & headers, & ingestor. token , & caller_userid) ;
690697 async move {
691698 let res = INTRA_CLUSTER_CLIENT
692699 . post ( url)
@@ -767,6 +774,52 @@ pub async fn sync_role_update(
767774 . await
768775}
769776
777+ // forward the put role request to all ingestors and queriers to keep them in sync
778+ pub async fn sync_role_delete (
779+ req : & HttpRequest ,
780+ name : String ,
781+ tenant_id : & Option < String > ,
782+ ) -> Result < ( ) , RoleError > {
783+ let userid = get_user_from_request ( req) . unwrap ( ) ;
784+ let headers = req. headers ( ) . clone ( ) ;
785+ for_each_live_node ( tenant_id, move |node| {
786+ let url = format ! (
787+ "{}{}/role/{}/sync" ,
788+ node. domain_name,
789+ base_path_without_preceding_slash( ) ,
790+ name
791+ ) ;
792+
793+ let headermap = create_intracluster_auth_headermap ( & headers, & node. token , & userid) ;
794+ async move {
795+ let res = INTRA_CLUSTER_CLIENT
796+ . delete ( url)
797+ . headers ( headermap)
798+ . header ( header:: CONTENT_TYPE , "application/json" )
799+ . send ( )
800+ . await
801+ . map_err ( |err| {
802+ error ! (
803+ "Fatal: failed to forward request to node: {}\n Error: {:?}" ,
804+ node. domain_name, err
805+ ) ;
806+ RoleError :: Network ( err)
807+ } ) ?;
808+
809+ if !res. status ( ) . is_success ( ) {
810+ error ! (
811+ "failed to forward request to node: {}\n Response Returned: {:?}" ,
812+ node. domain_name,
813+ res. text( ) . await
814+ ) ;
815+ }
816+
817+ Ok ( ( ) )
818+ }
819+ } )
820+ . await
821+ }
822+
770823pub fn fetch_daily_stats (
771824 date : & str ,
772825 stream_meta_list : & [ ObjectStoreFormat ] ,
0 commit comments