Merge two of the room join codepaths

There's at least one more to merge in.

Side-effects:
 * Stop reporting None as displayname and avatar_url in some cases
 * Joining a room by alias populates guest-ness in join event
 * Remove unspec'd PUT version of /join/<room_id_or_alias> which has not
   been called on matrix.org according to logs
 * Stop recording access_token_id on /join/room_id - currently we don't
   record it on /join/room_alias; I can try to thread it through at some
   point.
This commit is contained in:
Daniel Wagner-Hall 2016-02-12 15:11:49 +00:00 committed by review.rocks
parent 66f9a49ce9
commit cf81375b94
5 changed files with 73 additions and 69 deletions

View file

@ -527,7 +527,17 @@ class RoomMemberHandler(BaseHandler):
defer.returnValue({"room_id": room_id})
@defer.inlineCallbacks
def join_room_alias(self, joinee, room_alias, content={}):
def lookup_room_alias(self, room_alias):
"""
Gets the room ID for an alias.
Args:
room_alias (str): The room alias to look up.
Returns:
A tuple of the room ID (str) and the hosts hosting the room ([str])
Raises:
SynapseError if the room couldn't be looked up.
"""
directory_handler = self.hs.get_handlers().directory_handler
mapping = yield directory_handler.get_association(room_alias)
@ -539,24 +549,40 @@ class RoomMemberHandler(BaseHandler):
if not hosts:
raise SynapseError(404, "No known servers")
# If event doesn't include a display name, add one.
yield collect_presencelike_data(self.distributor, joinee, content)
defer.returnValue((room_id, hosts))
@defer.inlineCallbacks
def do_join(self, requester, room_id, hosts=None):
"""
Joins requester to room_id.
Args:
requester (Requester): The user joining the room.
room_id (str): The room ID (not alias) being joined.
hosts ([str]): A list of hosts which are hopefully in the room.
Raises:
SynapseError if the room couldn't be joined.
"""
hosts = hosts or []
content = {"membership": Membership.JOIN}
if requester.is_guest:
content["kind"] = "guest"
yield collect_presencelike_data(self.distributor, requester.user, content)
content.update({"membership": Membership.JOIN})
builder = self.event_builder_factory.new({
"type": EventTypes.Member,
"state_key": joinee.to_string(),
"state_key": requester.user.to_string(),
"room_id": room_id,
"sender": joinee.to_string(),
"membership": Membership.JOIN,
"sender": requester.user.to_string(),
"membership": Membership.JOIN, # For backwards compatibility
"content": content,
})
event, context = yield self._create_new_client_event(builder)
yield self._do_join(event, context, room_hosts=hosts)
defer.returnValue({"room_id": room_id})
@defer.inlineCallbacks
def _do_join(self, event, context, room_hosts=None):
room_id = event.room_id