Skip to content
Snippets Groups Projects
Commit 9cb4f75d authored by Kegan Dougal's avatar Kegan Dougal
Browse files

SYN-154: Better error messages when joining an unknown room by ID.

The simple fix doesn't work here because room creation also involves
unknown room IDs. The check relies on the presence of m.room.create for
rooms being created, whereas bogus room IDs have no state events at all.
parent 9b8e348b
No related branches found
No related tags found
No related merge requests found
......@@ -98,7 +98,16 @@ class Auth(object):
defer.returnValue(member)
@defer.inlineCallbacks
def check_host_in_room(self, room_id, host):
def check_host_in_room(self, room_id, host, context=None):
if context:
# XXX: check_host_in_room should really return True for a new
# room created by this home server. There are no m.room.member
# join events yet so we need to check for the m.room.create event
# instead.
if (u"m.room.create", u"") in context.auth_events:
defer.returnValue(True)
return
curr_state = yield self.state.get_current_state(room_id)
for event in curr_state:
......
......@@ -617,8 +617,8 @@ class FederationHandler(BaseHandler):
@defer.inlineCallbacks
@log_function
def on_backfill_request(self, origin, context, pdu_list, limit):
in_room = yield self.auth.check_host_in_room(context, origin)
def on_backfill_request(self, origin, room_id, pdu_list, limit):
in_room = yield self.auth.check_host_in_room(room_id, origin)
if not in_room:
raise AuthError(403, "Host not in room.")
......
......@@ -423,12 +423,13 @@ class RoomMemberHandler(BaseHandler):
is_host_in_room = yield self.auth.check_host_in_room(
event.room_id,
self.hs.hostname
self.hs.hostname,
context=context
)
if is_host_in_room:
should_do_dance = False
elif room_host:
elif room_host: # TODO: Shouldn't this be remote_room_host?
should_do_dance = True
else:
# TODO(markjh): get prev_state from snapshot
......@@ -442,7 +443,8 @@ class RoomMemberHandler(BaseHandler):
should_do_dance = not self.hs.is_mine(inviter)
room_host = inviter.domain
else:
should_do_dance = False
# return the same error as join_room_alias does
raise SynapseError(404, "No known servers")
if should_do_dance:
handler = self.hs.get_handlers().federation_handler
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment