mirror of
https://mau.dev/maunium/synapse.git
synced 2024-10-01 01:36:05 -04:00
typing: check origin server of typing event against room's servers (#13830)
This is also using the partial state approximation if needed so we do not block here during a fast join. Signed-off-by: Mathieu Velten <mathieuv@matrix.org> Co-authored-by: Sean Quah <8349537+squahtx@users.noreply.github.com>
This commit is contained in:
parent
6b4593a80f
commit
41461fd4d6
1
changelog.d/13830.bugfix
Normal file
1
changelog.d/13830.bugfix
Normal file
@ -0,0 +1 @@
|
|||||||
|
Fix a long-standing bug where typing events would be accepted from remote servers not present in a room. Also fix a bug where incoming typing events would cause other incoming events to get stuck during a fast join.
|
@ -362,11 +362,14 @@ class TypingWriterHandler(FollowerTypingHandler):
|
|||||||
)
|
)
|
||||||
return
|
return
|
||||||
|
|
||||||
domains = await self._storage_controllers.state.get_current_hosts_in_room(
|
# Let's check that the origin server is in the room before accepting the typing
|
||||||
|
# event. We don't want to block waiting on a partial state so take an
|
||||||
|
# approximation if needed.
|
||||||
|
domains = await self._storage_controllers.state.get_current_hosts_in_room_or_partial_state_approximation(
|
||||||
room_id
|
room_id
|
||||||
)
|
)
|
||||||
|
|
||||||
if self.server_name in domains:
|
if user.domain in domains:
|
||||||
logger.info("Got typing update from %s: %r", user_id, content)
|
logger.info("Got typing update from %s: %r", user_id, content)
|
||||||
now = self.clock.time_msec()
|
now = self.clock.time_msec()
|
||||||
self._member_typing_until[member] = now + FEDERATION_TIMEOUT
|
self._member_typing_until[member] = now + FEDERATION_TIMEOUT
|
||||||
|
@ -138,6 +138,10 @@ class TypingNotificationsTestCase(unittest.HomeserverTestCase):
|
|||||||
get_current_hosts_in_room
|
get_current_hosts_in_room
|
||||||
)
|
)
|
||||||
|
|
||||||
|
hs.get_storage_controllers().state.get_current_hosts_in_room_or_partial_state_approximation = (
|
||||||
|
get_current_hosts_in_room
|
||||||
|
)
|
||||||
|
|
||||||
async def get_users_in_room(room_id: str):
|
async def get_users_in_room(room_id: str):
|
||||||
return {str(u) for u in self.room_members}
|
return {str(u) for u in self.room_members}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user