14
14
# limitations under the License.
15
15
16
16
""" This module contains REST servlets to do with rooms: /rooms/<paths> """
17
+ import copy
17
18
import logging
18
19
import re
19
20
from typing import TYPE_CHECKING , Dict , List , Optional , Tuple
47
48
from synapse .streams .config import PaginationConfig
48
49
from synapse .types import (
49
50
JsonDict ,
51
+ Requester ,
50
52
RoomAlias ,
51
53
RoomID ,
52
54
StreamToken ,
@@ -309,7 +311,14 @@ def __init__(self, hs):
309
311
self .room_member_handler = hs .get_room_member_handler ()
310
312
self .auth = hs .get_auth ()
311
313
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 :
313
322
(
314
323
most_recent_prev_event_id ,
315
324
most_recent_prev_event_depth ,
@@ -439,7 +448,9 @@ async def on_POST(self, request, room_id):
439
448
if event_dict ["type" ] == EventTypes .Member :
440
449
membership = event_dict ["content" ].get ("membership" , None )
441
450
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
+ ),
443
454
target = UserID .from_string (event_dict ["state_key" ]),
444
455
room_id = room_id ,
445
456
action = membership ,
@@ -459,7 +470,9 @@ async def on_POST(self, request, room_id):
459
470
event ,
460
471
_ ,
461
472
) = 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
+ ),
463
476
event_dict ,
464
477
outlier = True ,
465
478
prev_event_ids = [fake_prev_event_id ],
@@ -516,7 +529,9 @@ async def on_POST(self, request, room_id):
516
529
# Prepend the insertion event to the start of the chunk
517
530
events_to_create = [insertion_event ] + events_to_create
518
531
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
+ )
520
535
521
536
event_ids = []
522
537
prev_event_ids = prev_events_from_query
@@ -538,7 +553,7 @@ async def on_POST(self, request, room_id):
538
553
}
539
554
540
555
event , context = await self .event_creation_handler .create_event (
541
- requester ,
556
+ self . _copy_requester_and_override_user_id ( requester , ev [ "sender" ]) ,
542
557
event_dict ,
543
558
prev_event_ids = event_dict .get ("prev_events" ),
544
559
auth_event_ids = auth_event_ids ,
@@ -568,7 +583,7 @@ async def on_POST(self, request, room_id):
568
583
# where topological_ordering is just depth.
569
584
for (event , context ) in reversed (events_to_persist ):
570
585
ev = await self .event_creation_handler .handle_new_client_event (
571
- requester = requester ,
586
+ self . _copy_requester_and_override_user_id ( requester , event [ "sender" ]) ,
572
587
event = event ,
573
588
context = context ,
574
589
)
0 commit comments