mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-08-01 20:46:07 -04:00
Move maybe_kick_guest_users
out of BaseHandler
(#10744)
This is part of my ongoing war against BaseHandler. I've moved kick_guest_users into RoomMemberHandler (since it calls out to that handler anyway), and split maybe_kick_guest_users into the two places it is called.
This commit is contained in:
parent
5e9b382505
commit
56e2a30634
9 changed files with 125 additions and 85 deletions
|
@ -23,6 +23,7 @@ from synapse.api.constants import (
|
|||
AccountDataTypes,
|
||||
EventContentFields,
|
||||
EventTypes,
|
||||
GuestAccess,
|
||||
Membership,
|
||||
)
|
||||
from synapse.api.errors import (
|
||||
|
@ -44,6 +45,7 @@ from synapse.types import (
|
|||
RoomID,
|
||||
StateMap,
|
||||
UserID,
|
||||
create_requester,
|
||||
get_domain_from_id,
|
||||
)
|
||||
from synapse.util.async_helpers import Linearizer
|
||||
|
@ -70,6 +72,7 @@ class RoomMemberHandler(metaclass=abc.ABCMeta):
|
|||
self.auth = hs.get_auth()
|
||||
self.state_handler = hs.get_state_handler()
|
||||
self.config = hs.config
|
||||
self._server_name = hs.hostname
|
||||
|
||||
self.federation_handler = hs.get_federation_handler()
|
||||
self.directory_handler = hs.get_directory_handler()
|
||||
|
@ -115,9 +118,8 @@ class RoomMemberHandler(metaclass=abc.ABCMeta):
|
|||
burst_count=hs.config.ratelimiting.rc_invites_per_user.burst_count,
|
||||
)
|
||||
|
||||
# This is only used to get at ratelimit function, and
|
||||
# maybe_kick_guest_users. It's fine there are multiple of these as
|
||||
# it doesn't store state.
|
||||
# This is only used to get at the ratelimit function. It's fine there are
|
||||
# multiple of these as it doesn't store state.
|
||||
self.base_handler = BaseHandler(hs)
|
||||
|
||||
@abc.abstractmethod
|
||||
|
@ -1095,10 +1097,62 @@ class RoomMemberHandler(metaclass=abc.ABCMeta):
|
|||
return bool(
|
||||
guest_access
|
||||
and guest_access.content
|
||||
and "guest_access" in guest_access.content
|
||||
and guest_access.content["guest_access"] == "can_join"
|
||||
and guest_access.content.get(EventContentFields.GUEST_ACCESS)
|
||||
== GuestAccess.CAN_JOIN
|
||||
)
|
||||
|
||||
async def kick_guest_users(self, current_state: Iterable[EventBase]) -> None:
|
||||
"""Kick any local guest users from the room.
|
||||
|
||||
This is called when the room state changes from guests allowed to not-allowed.
|
||||
|
||||
Params:
|
||||
current_state: the current state of the room. We will iterate this to look
|
||||
for guest users to kick.
|
||||
"""
|
||||
for member_event in current_state:
|
||||
try:
|
||||
if member_event.type != EventTypes.Member:
|
||||
continue
|
||||
|
||||
if not self.hs.is_mine_id(member_event.state_key):
|
||||
continue
|
||||
|
||||
if member_event.content["membership"] not in {
|
||||
Membership.JOIN,
|
||||
Membership.INVITE,
|
||||
}:
|
||||
continue
|
||||
|
||||
if (
|
||||
"kind" not in member_event.content
|
||||
or member_event.content["kind"] != "guest"
|
||||
):
|
||||
continue
|
||||
|
||||
# We make the user choose to leave, rather than have the
|
||||
# event-sender kick them. This is partially because we don't
|
||||
# need to worry about power levels, and partially because guest
|
||||
# users are a concept which doesn't hugely work over federation,
|
||||
# and having homeservers have their own users leave keeps more
|
||||
# of that decision-making and control local to the guest-having
|
||||
# homeserver.
|
||||
target_user = UserID.from_string(member_event.state_key)
|
||||
requester = create_requester(
|
||||
target_user, is_guest=True, authenticated_entity=self._server_name
|
||||
)
|
||||
handler = self.hs.get_room_member_handler()
|
||||
await handler.update_membership(
|
||||
requester,
|
||||
target_user,
|
||||
member_event.room_id,
|
||||
"leave",
|
||||
ratelimit=False,
|
||||
require_consent=False,
|
||||
)
|
||||
except Exception as e:
|
||||
logger.exception("Error kicking guest user: %s" % (e,))
|
||||
|
||||
async def lookup_room_alias(
|
||||
self, room_alias: RoomAlias
|
||||
) -> Tuple[RoomID, List[str]]:
|
||||
|
@ -1352,7 +1406,6 @@ class RoomMemberMasterHandler(RoomMemberHandler):
|
|||
|
||||
self.distributor = hs.get_distributor()
|
||||
self.distributor.declare("user_left_room")
|
||||
self._server_name = hs.hostname
|
||||
|
||||
async def _is_remote_room_too_complex(
|
||||
self, room_id: str, remote_room_hosts: List[str]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue