Merge pull request #363 from matrix-org/daniel/guestscanjoin

Consider joined guest users as joined users

Otherwise they're inconveniently allowed to write events to the room
but not to read them from the room.
This commit is contained in:
Daniel Wagner-Hall 2015-11-12 13:37:09 +00:00
commit 8ea5dccea1
1 changed files with 21 additions and 12 deletions

View File

@ -258,20 +258,29 @@ class MessageHandler(BaseHandler):
@defer.inlineCallbacks @defer.inlineCallbacks
def _check_in_room_or_world_readable(self, room_id, user_id, is_guest): def _check_in_room_or_world_readable(self, room_id, user_id, is_guest):
if is_guest: try:
visibility = yield self.state_handler.get_current_state( # check_user_was_in_room will return the most recent membership
room_id, EventTypes.RoomHistoryVisibility, "" # event for the user if:
) # * The user is a non-guest user, and was ever in the room
if visibility.content["history_visibility"] == "world_readable": # * The user is a guest user, and has joined the room
defer.returnValue((Membership.JOIN, None)) # else it will throw.
return
else:
raise AuthError(
403, "Guest access not allowed", errcode=Codes.GUEST_ACCESS_FORBIDDEN
)
else:
member_event = yield self.auth.check_user_was_in_room(room_id, user_id) member_event = yield self.auth.check_user_was_in_room(room_id, user_id)
defer.returnValue((member_event.membership, member_event.event_id)) defer.returnValue((member_event.membership, member_event.event_id))
return
except AuthError:
if not is_guest:
raise
visibility = yield self.state_handler.get_current_state(
room_id, EventTypes.RoomHistoryVisibility, ""
)
if visibility.content["history_visibility"] == "world_readable":
defer.returnValue((Membership.JOIN, None))
return
else:
raise AuthError(
403, "Guest access not allowed", errcode=Codes.GUEST_ACCESS_FORBIDDEN
)
@defer.inlineCallbacks @defer.inlineCallbacks
def get_state_events(self, user_id, room_id, is_guest=False): def get_state_events(self, user_id, room_id, is_guest=False):