Skip to content
This repository was archived by the owner on Apr 26, 2024. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions synapse/handlers/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
from .room import (
RoomCreationHandler, RoomContextHandler,
)
from .room_member import RoomMemberHandler
from .message import MessageHandler
from .federation import FederationHandler
from .directory import DirectoryHandler
Expand Down Expand Up @@ -49,7 +48,6 @@ def __init__(self, hs):
self.registration_handler = RegistrationHandler(hs)
self.message_handler = MessageHandler(hs)
self.room_creation_handler = RoomCreationHandler(hs)
self.room_member_handler = RoomMemberHandler(hs)
self.federation_handler = FederationHandler(hs)
self.directory_handler = DirectoryHandler(hs)
self.admin_handler = AdminHandler(hs)
Expand Down
2 changes: 1 addition & 1 deletion synapse/handlers/_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ def kick_guest_users(self, current_state):
# homeserver.
requester = synapse.types.create_requester(
target_user, is_guest=True)
handler = self.hs.get_handlers().room_member_handler
handler = self.hs.get_room_member_handler()
yield handler.update_membership(
requester,
target_user,
Expand Down
4 changes: 2 additions & 2 deletions synapse/handlers/federation.py
Original file line number Diff line number Diff line change
Expand Up @@ -2153,7 +2153,7 @@ def exchange_third_party_invite(
raise e

yield self._check_signature(event, context)
member_handler = self.hs.get_handlers().room_member_handler
member_handler = self.hs.get_room_member_handler()
yield member_handler.send_membership_event(None, event, context)
else:
destinations = set(x.split(":", 1)[-1] for x in (sender_user_id, room_id))
Expand Down Expand Up @@ -2197,7 +2197,7 @@ def on_exchange_third_party_invite_request(self, origin, room_id, event_dict):
# TODO: Make sure the signatures actually are correct.
event.signatures.update(returned_invite.signatures)

member_handler = self.hs.get_handlers().room_member_handler
member_handler = self.hs.get_room_member_handler()
yield member_handler.send_membership_event(None, event, context)

@defer.inlineCallbacks
Expand Down
2 changes: 1 addition & 1 deletion synapse/handlers/profile.py
Original file line number Diff line number Diff line change
Expand Up @@ -233,7 +233,7 @@ def _update_join_states(self, requester, target_user):
)

for room_id in room_ids:
handler = self.hs.get_handlers().room_member_handler
handler = self.hs.get_room_member_handler()
try:
# Assume the target_user isn't a guest,
# because we don't let guests set profile or avatar data.
Expand Down
4 changes: 2 additions & 2 deletions synapse/handlers/room.py
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ def create_room(self, requester, config, ratelimit=True):

creation_content = config.get("creation_content", {})

room_member_handler = self.hs.get_handlers().room_member_handler
room_member_handler = self.hs.get_room_member_handler()

yield self._send_events_for_new_room(
requester,
Expand Down Expand Up @@ -224,7 +224,7 @@ def create_room(self, requester, config, ratelimit=True):
id_server = invite_3pid["id_server"]
address = invite_3pid["address"]
medium = invite_3pid["medium"]
yield self.hs.get_handlers().room_member_handler.do_3pid_invite(
yield self.hs.get_room_member_handler().do_3pid_invite(
room_id,
requester.user,
medium,
Expand Down
43 changes: 25 additions & 18 deletions synapse/handlers/room_member.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,24 +30,32 @@
from synapse.types import UserID, RoomID
from synapse.util.async import Linearizer
from synapse.util.distributor import user_left_room, user_joined_room
from ._base import BaseHandler

logger = logging.getLogger(__name__)

id_server_scheme = "https://"


class RoomMemberHandler(BaseHandler):
class RoomMemberHandler(object):
# TODO(paul): This handler currently contains a messy conflation of
# low-level API that works on UserID objects and so on, and REST-level
# API that takes ID strings and returns pagination chunks. These concerns
# ought to be separated out a lot better.

def __init__(self, hs):
super(RoomMemberHandler, self).__init__(hs)

self.hs = hs
self.store = hs.get_datastore()
self.auth = hs.get_auth()
self.state_handler = hs.get_state_handler()
self.config = hs.config
self.simple_http_client = hs.get_simple_http_client()

self.federation_handler = hs.get_handlers().federation_handler
self.directory_handler = hs.get_handlers().directory_handler
self.registration_handler = hs.get_handlers().registration_handler
self.profile_handler = hs.get_profile_handler()
self.event_creation_hander = hs.get_event_creation_handler()
self.replication_layer = hs.get_replication_layer()

self.member_linearizer = Linearizer(name="member")

Expand Down Expand Up @@ -138,7 +146,7 @@ def remote_join(self, remote_room_hosts, room_id, user, content):
# join dance for now, since we're kinda implicitly checking
# that we are allowed to join when we decide whether or not we
# need to do the invite/join dance.
yield self.hs.get_handlers().federation_handler.do_invite_join(
yield self.federation_handler.do_invite_join(
remote_room_hosts,
room_id,
user.to_string(),
Expand Down Expand Up @@ -204,8 +212,7 @@ def _update_membership(
# if this is a join with a 3pid signature, we may need to turn a 3pid
# invite into a normal invite before we can handle the join.
if third_party_signed is not None:
replication = self.hs.get_replication_layer()
yield replication.exchange_third_party_invite(
yield self.replication_layer.exchange_third_party_invite(
third_party_signed["sender"],
target.to_string(),
room_id,
Expand All @@ -226,7 +233,7 @@ def _update_membership(
requester.user,
)
if not is_requester_admin:
if self.hs.config.block_non_admin_invites:
if self.config.block_non_admin_invites:
logger.info(
"Blocking invite: user is not admin and non-admin "
"invites disabled"
Expand Down Expand Up @@ -321,7 +328,7 @@ def _update_membership(
else:
# send the rejection to the inviter's HS.
remote_room_hosts = remote_room_hosts + [inviter.domain]
fed_handler = self.hs.get_handlers().federation_handler
fed_handler = self.federation_handler
try:
ret = yield fed_handler.do_remotely_reject_invite(
remote_room_hosts,
Expand Down Expand Up @@ -477,7 +484,7 @@ def lookup_room_alias(self, room_alias):
Raises:
SynapseError if room alias could not be found.
"""
directory_handler = self.hs.get_handlers().directory_handler
directory_handler = self.directory_handler
mapping = yield directory_handler.get_association(room_alias)

if not mapping:
Expand Down Expand Up @@ -508,7 +515,7 @@ def do_3pid_invite(
requester,
txn_id
):
if self.hs.config.block_non_admin_invites:
if self.config.block_non_admin_invites:
is_requester_admin = yield self.auth.is_server_admin(
requester.user,
)
Expand Down Expand Up @@ -555,7 +562,7 @@ def _lookup_3pid(self, id_server, medium, address):
str: the matrix ID of the 3pid, or None if it is not recognized.
"""
try:
data = yield self.hs.get_simple_http_client().get_json(
data = yield self.simple_http_client.get_json(
"%s%s/_matrix/identity/api/v1/lookup" % (id_server_scheme, id_server,),
{
"medium": medium,
Expand All @@ -578,7 +585,7 @@ def verify_any_signature(self, data, server_hostname):
if server_hostname not in data["signatures"]:
raise AuthError(401, "No signature from server %s" % (server_hostname,))
for key_name, signature in data["signatures"][server_hostname].items():
key_data = yield self.hs.get_simple_http_client().get_json(
key_data = yield self.simple_http_client.get_json(
"%s%s/_matrix/identity/api/v1/pubkey/%s" %
(id_server_scheme, server_hostname, key_name,),
)
Expand All @@ -603,7 +610,7 @@ def _make_and_store_3pid_invite(
user,
txn_id
):
room_state = yield self.hs.get_state_handler().get_current_state(room_id)
room_state = yield self.state_handler.get_current_state(room_id)

inviter_display_name = ""
inviter_avatar_url = ""
Expand Down Expand Up @@ -727,15 +734,15 @@ def _ask_id_server_for_third_party_invite(
"sender_avatar_url": inviter_avatar_url,
}

if self.hs.config.invite_3pid_guest:
registration_handler = self.hs.get_handlers().registration_handler
if self.config.invite_3pid_guest:
registration_handler = self.registration_handler
guest_access_token = yield registration_handler.guest_access_token_for(
medium=medium,
address=address,
inviter_user_id=inviter_user_id,
)

guest_user_info = yield self.hs.get_auth().get_user_by_access_token(
guest_user_info = yield self.auth.get_user_by_access_token(
guest_access_token
)

Expand All @@ -744,7 +751,7 @@ def _ask_id_server_for_third_party_invite(
"guest_user_id": guest_user_info["user"].to_string(),
})

data = yield self.hs.get_simple_http_client().post_urlencoded_get_json(
data = yield self.simple_http_client.post_urlencoded_get_json(
is_url,
invite_config
)
Expand Down
7 changes: 4 additions & 3 deletions synapse/rest/client/v1/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,7 @@ def __init__(self, hs):
self.handlers = hs.get_handlers()
self.state = hs.get_state_handler()
self.event_creation_handler = hs.get_event_creation_handler()
self.room_member_handler = hs.get_room_member_handler()

@defer.inlineCallbacks
def on_POST(self, request, room_id):
Expand Down Expand Up @@ -238,7 +239,7 @@ def on_POST(self, request, room_id):
logger.info("Kicking %r from %r...", user_id, room_id)

target_requester = create_requester(user_id)
yield self.handlers.room_member_handler.update_membership(
yield self.room_member_handler.update_membership(
requester=target_requester,
target=target_requester.user,
room_id=room_id,
Expand All @@ -247,9 +248,9 @@ def on_POST(self, request, room_id):
ratelimit=False
)

yield self.handlers.room_member_handler.forget(target_requester.user, room_id)
yield self.room_member_handler.forget(target_requester.user, room_id)

yield self.handlers.room_member_handler.update_membership(
yield self.room_member_handler.update_membership(
requester=target_requester,
target=target_requester.user,
room_id=new_room_id,
Expand Down
19 changes: 10 additions & 9 deletions synapse/rest/client/v1/room.py
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ def __init__(self, hs):
super(RoomStateEventRestServlet, self).__init__(hs)
self.handlers = hs.get_handlers()
self.event_creation_hander = hs.get_event_creation_handler()
self.room_member_handler = hs.get_room_member_handler()

def register(self, http_server):
# /room/$roomid/state/$eventtype
Expand Down Expand Up @@ -156,7 +157,7 @@ def on_PUT(self, request, room_id, event_type, state_key, txn_id=None):

if event_type == EventTypes.Member:
membership = content.get("membership", None)
event = yield self.handlers.room_member_handler.update_membership(
event = yield self.room_member_handler.update_membership(
requester,
target=UserID.from_string(state_key),
room_id=room_id,
Expand Down Expand Up @@ -229,7 +230,7 @@ def on_PUT(self, request, room_id, event_type, txn_id):
class JoinRoomAliasServlet(ClientV1RestServlet):
def __init__(self, hs):
super(JoinRoomAliasServlet, self).__init__(hs)
self.handlers = hs.get_handlers()
self.room_member_handler = hs.get_room_member_handler()

def register(self, http_server):
# /join/$room_identifier[/$txn_id]
Expand Down Expand Up @@ -257,7 +258,7 @@ def on_POST(self, request, room_identifier, txn_id=None):
except Exception:
remote_room_hosts = None
elif RoomAlias.is_valid(room_identifier):
handler = self.handlers.room_member_handler
handler = self.room_member_handler
room_alias = RoomAlias.from_string(room_identifier)
room_id, remote_room_hosts = yield handler.lookup_room_alias(room_alias)
room_id = room_id.to_string()
Expand All @@ -266,7 +267,7 @@ def on_POST(self, request, room_identifier, txn_id=None):
room_identifier,
))

yield self.handlers.room_member_handler.update_membership(
yield self.room_member_handler.update_membership(
requester=requester,
target=requester.user,
room_id=room_id,
Expand Down Expand Up @@ -562,7 +563,7 @@ def on_GET(self, request, room_id, event_id):
class RoomForgetRestServlet(ClientV1RestServlet):
def __init__(self, hs):
super(RoomForgetRestServlet, self).__init__(hs)
self.handlers = hs.get_handlers()
self.room_member_handler = hs.get_room_member_handler()

def register(self, http_server):
PATTERNS = ("/rooms/(?P<room_id>[^/]*)/forget")
Expand All @@ -575,7 +576,7 @@ def on_POST(self, request, room_id, txn_id=None):
allow_guest=False,
)

yield self.handlers.room_member_handler.forget(
yield self.room_member_handler.forget(
user=requester.user,
room_id=room_id,
)
Expand All @@ -593,7 +594,7 @@ class RoomMembershipRestServlet(ClientV1RestServlet):

def __init__(self, hs):
super(RoomMembershipRestServlet, self).__init__(hs)
self.handlers = hs.get_handlers()
self.room_member_handler = hs.get_room_member_handler()

def register(self, http_server):
# /rooms/$roomid/[invite|join|leave]
Expand Down Expand Up @@ -622,7 +623,7 @@ def on_POST(self, request, room_id, membership_action, txn_id=None):
content = {}

if membership_action == "invite" and self._has_3pid_invite_keys(content):
yield self.handlers.room_member_handler.do_3pid_invite(
yield self.room_member_handler.do_3pid_invite(
room_id,
requester.user,
content["medium"],
Expand All @@ -644,7 +645,7 @@ def on_POST(self, request, room_id, membership_action, txn_id=None):
if 'reason' in content and membership_action in ['kick', 'ban']:
event_content = {'reason': content['reason']}

yield self.handlers.room_member_handler.update_membership(
yield self.room_member_handler.update_membership(
requester=requester,
target=target,
room_id=room_id,
Expand Down
2 changes: 1 addition & 1 deletion synapse/rest/client/v2_alpha/register.py
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,7 @@ def __init__(self, hs):
self.auth_handler = hs.get_auth_handler()
self.registration_handler = hs.get_handlers().registration_handler
self.identity_handler = hs.get_handlers().identity_handler
self.room_member_handler = hs.get_handlers().room_member_handler
self.room_member_handler = hs.get_room_member_handler()
self.device_handler = hs.get_device_handler()
self.macaroon_gen = hs.get_macaroon_generator()

Expand Down
5 changes: 5 additions & 0 deletions synapse/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@
from synapse.handlers.e2e_keys import E2eKeysHandler
from synapse.handlers.presence import PresenceHandler
from synapse.handlers.room_list import RoomListHandler
from synapse.handlers.room_member import RoomMemberHandler
from synapse.handlers.set_password import SetPasswordHandler
from synapse.handlers.sync import SyncHandler
from synapse.handlers.typing import TypingHandler
Expand Down Expand Up @@ -145,6 +146,7 @@ def build_DEPENDENCY(self)
'groups_attestation_signing',
'groups_attestation_renewer',
'spam_checker',
'room_member_handler',
]

def __init__(self, hostname, **kwargs):
Expand Down Expand Up @@ -382,6 +384,9 @@ def build_groups_attestation_renewer(self):
def build_spam_checker(self):
return SpamChecker(self)

def build_room_member_handler(self):
return RoomMemberHandler(self)

def remove_pusher(self, app_id, push_key, user_id):
return self.get_pusherpool().remove_pusher(app_id, push_key, user_id)

Expand Down
2 changes: 1 addition & 1 deletion tests/rest/client/v1/test_typing.py
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ def fetch_room_distributions_into(
else:
if remotedomains is not None:
remotedomains.add(member.domain)
hs.get_handlers().room_member_handler.fetch_room_distributions_into = (
hs.get_room_member_handler().fetch_room_distributions_into = (
fetch_room_distributions_into
)

Expand Down