1414# limitations under the License. 
1515
1616""" This module contains REST servlets to do with rooms: /rooms/<paths> """ 
17+ import  copy 
1718import  logging 
1819import  re 
1920from  typing  import  TYPE_CHECKING , Dict , List , Optional , Tuple 
4748from  synapse .streams .config  import  PaginationConfig 
4849from  synapse .types  import  (
4950    JsonDict ,
51+     Requester ,
5052    RoomAlias ,
5153    RoomID ,
5254    StreamToken ,
@@ -309,7 +311,14 @@ def __init__(self, hs):
309311        self .room_member_handler  =  hs .get_room_member_handler ()
310312        self .auth  =  hs .get_auth ()
311313
312-     async  def  inherit_depth_from_prev_ids (self , prev_event_ids ) ->  int :
314+     def  _copy_requester_and_override_user_id (self , requester , new_user_id ):
315+         serialized_requester  =  requester .serialize ()
316+         serialized_requester ["user_id" ] =  new_user_id 
317+         new_requester  =  Requester .deserialize (self .store , serialized_requester )
318+ 
319+         return  new_requester 
320+ 
321+     async  def  _inherit_depth_from_prev_ids (self , prev_event_ids ) ->  int :
313322        (
314323            most_recent_prev_event_id ,
315324            most_recent_prev_event_depth ,
@@ -438,7 +447,9 @@ async def on_POST(self, request, room_id):
438447            if  event_dict ["type" ] ==  EventTypes .Member :
439448                membership  =  event_dict ["content" ].get ("membership" , None )
440449                event_id , _  =  await  self .room_member_handler .update_membership (
441-                     requester ,
450+                     self ._copy_requester_and_override_user_id (
451+                         requester , state_event ["sender" ]
452+                     ),
442453                    target = UserID .from_string (event_dict ["state_key" ]),
443454                    room_id = room_id ,
444455                    action = membership ,
@@ -458,7 +469,9 @@ async def on_POST(self, request, room_id):
458469                    event ,
459470                    _ ,
460471                ) =  await  self .event_creation_handler .create_and_send_nonmember_event (
461-                     requester ,
472+                     self ._copy_requester_and_override_user_id (
473+                         requester , state_event ["sender" ]
474+                     ),
462475                    event_dict ,
463476                    outlier = True ,
464477                    prev_event_ids = [fake_prev_event_id ],
@@ -510,7 +523,9 @@ async def on_POST(self, request, room_id):
510523        # Prepend the insertion event to the start of the chunk 
511524        events_to_create  =  [insertion_event ] +  events_to_create 
512525
513-         inherited_depth  =  await  self .inherit_depth_from_prev_ids (prev_events_from_query )
526+         inherited_depth  =  await  self ._inherit_depth_from_prev_ids (
527+             prev_events_from_query 
528+         )
514529
515530        event_ids  =  []
516531        prev_event_ids  =  prev_events_from_query 
@@ -532,7 +547,7 @@ async def on_POST(self, request, room_id):
532547            }
533548
534549            event , context  =  await  self .event_creation_handler .create_event (
535-                 requester ,
550+                 self . _copy_requester_and_override_user_id ( requester ,  ev [ "sender" ]) ,
536551                event_dict ,
537552                prev_event_ids = event_dict .get ("prev_events" ),
538553                auth_event_ids = auth_event_ids ,
@@ -562,7 +577,7 @@ async def on_POST(self, request, room_id):
562577        # where topological_ordering is just depth. 
563578        for  (event , context ) in  reversed (events_to_persist ):
564579            ev  =  await  self .event_creation_handler .handle_new_client_event (
565-                 requester = requester ,
580+                 self . _copy_requester_and_override_user_id ( requester ,  event [ "sender" ]) ,
566581                event = event ,
567582                context = context ,
568583            )
0 commit comments