summary refs log tree commit diff
path: root/synapse/api
diff options
context:
space:
mode:
Diffstat (limited to 'synapse/api')
-rw-r--r--synapse/api/auth.py24
1 files changed, 21 insertions, 3 deletions
diff --git a/synapse/api/auth.py b/synapse/api/auth.py

index 71a955b281..bf004a44c6 100644 --- a/synapse/api/auth.py +++ b/synapse/api/auth.py
@@ -20,7 +20,7 @@ from twisted.internet import defer from synapse.api.constants import EventTypes, Membership, JoinRules from synapse.api.errors import AuthError, Codes, SynapseError from synapse.util.logutils import log_function -from synapse.types import UserID, EventID +from synapse.types import EventID, RoomID, UserID import logging @@ -66,16 +66,29 @@ class Auth(object): return True creation_event = auth_events.get((EventTypes.Create, ""), None) - if not creation_event: raise SynapseError( 403, "Room %r does not exist" % (event.room_id,) ) + creating_domain = RoomID.from_string(event.room_id).domain + originating_domain = EventID.from_string(event.event_id).domain + if creating_domain != originating_domain: + if not self.can_federate(event, auth_events): + raise SynapseError( + 403, + "This room has been marked as unfederatable." + ) + # FIXME: Temp hack if event.type == EventTypes.Aliases: - return True + alias_domain = UserID.from_string(event.state_key).domain + if alias_domain != originating_domain: + raise AuthError( + 403, + "Can only set aliases for own domain" + ) logger.debug( "Auth events: %s", @@ -161,6 +174,11 @@ class Auth(object): user_id, room_id, repr(member) )) + def can_federate(self, event, auth_events): + creation_event = auth_events.get((EventTypes.Create, "")) + + return creation_event.content.get("m.federate", True) is True + @log_function def is_membership_change_allowed(self, event, auth_events): membership = event.content["membership"]