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 ,
@@ -439,7 +448,9 @@ async def on_POST(self, request, room_id):
439448            if  event_dict ["type" ] ==  EventTypes .Member :
440449                membership  =  event_dict ["content" ].get ("membership" , None )
441450                event_id , _  =  await  self .room_member_handler .update_membership (
442-                     requester ,
451+                     self ._copy_requester_and_override_user_id (
452+                         requester , state_event ["sender" ]
453+                     ),
443454                    target = UserID .from_string (event_dict ["state_key" ]),
444455                    room_id = room_id ,
445456                    action = membership ,
@@ -459,7 +470,9 @@ async def on_POST(self, request, room_id):
459470                    event ,
460471                    _ ,
461472                ) =  await  self .event_creation_handler .create_and_send_nonmember_event (
462-                     requester ,
473+                     self ._copy_requester_and_override_user_id (
474+                         requester , state_event ["sender" ]
475+                     ),
463476                    event_dict ,
464477                    outlier = True ,
465478                    prev_event_ids = [fake_prev_event_id ],
@@ -516,7 +529,9 @@ async def on_POST(self, request, room_id):
516529        # Prepend the insertion event to the start of the chunk 
517530        events_to_create  =  [insertion_event ] +  events_to_create 
518531
519-         inherited_depth  =  await  self .inherit_depth_from_prev_ids (prev_events_from_query )
532+         inherited_depth  =  await  self ._inherit_depth_from_prev_ids (
533+             prev_events_from_query 
534+         )
520535
521536        event_ids  =  []
522537        prev_event_ids  =  prev_events_from_query 
@@ -538,7 +553,7 @@ async def on_POST(self, request, room_id):
538553            }
539554
540555            event , context  =  await  self .event_creation_handler .create_event (
541-                 requester ,
556+                 self . _copy_requester_and_override_user_id ( requester ,  ev [ "sender" ]) ,
542557                event_dict ,
543558                prev_event_ids = event_dict .get ("prev_events" ),
544559                auth_event_ids = auth_event_ids ,
@@ -568,7 +583,7 @@ async def on_POST(self, request, room_id):
568583        # where topological_ordering is just depth. 
569584        for  (event , context ) in  reversed (events_to_persist ):
570585            ev  =  await  self .event_creation_handler .handle_new_client_event (
571-                 requester = requester ,
586+                 self . _copy_requester_and_override_user_id ( requester ,  event [ "sender" ]) ,
572587                event = event ,
573588                context = context ,
574589            )
0 commit comments