mirror of
https://git.anonymousland.org/anonymousland/synapse-product.git
synced 2024-10-01 08:25:44 -04:00
Allow rooms/{roomId}/state for a room that has been left
This commit is contained in:
parent
89ae0166de
commit
1d579df664
@ -160,8 +160,9 @@ class Auth(object):
|
|||||||
event_type=EventTypes.Member,
|
event_type=EventTypes.Member,
|
||||||
state_key=user_id
|
state_key=user_id
|
||||||
)
|
)
|
||||||
|
membership = member.membership if member else None
|
||||||
|
|
||||||
if not member:
|
if membership not in (Membership.JOIN, Membership.LEAVE):
|
||||||
raise AuthError(403, "User %s not in room %s" % (
|
raise AuthError(403, "User %s not in room %s" % (
|
||||||
user_id, room_id
|
user_id, room_id
|
||||||
))
|
))
|
||||||
|
@ -277,7 +277,9 @@ class MessageHandler(BaseHandler):
|
|||||||
|
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
def get_state_events(self, user_id, room_id):
|
def get_state_events(self, user_id, room_id):
|
||||||
"""Retrieve all state events for a given room.
|
"""Retrieve all state events for a given room. If the user is
|
||||||
|
joined to the room then return the current state. If the user has
|
||||||
|
left the room return the state events from when they left.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
user_id(str): The user requesting state events.
|
user_id(str): The user requesting state events.
|
||||||
@ -285,13 +287,19 @@ class MessageHandler(BaseHandler):
|
|||||||
Returns:
|
Returns:
|
||||||
A list of dicts representing state events. [{}, {}, {}]
|
A list of dicts representing state events. [{}, {}, {}]
|
||||||
"""
|
"""
|
||||||
yield self.auth.check_joined_room(room_id, user_id)
|
member_event = yield self.auth.check_user_was_in_room(room_id, user_id)
|
||||||
|
|
||||||
|
if member_event.membership == Membership.JOIN:
|
||||||
|
room_state = yield self.state_handler.get_current_state(room_id)
|
||||||
|
elif member_event.membership == Membership.LEAVE:
|
||||||
|
room_state = yield self.store.get_state_for_events(
|
||||||
|
room_id, [member_event.event_id], None
|
||||||
|
)
|
||||||
|
room_state = room_state[member_event.event_id]
|
||||||
|
|
||||||
# TODO: This is duplicating logic from snapshot_all_rooms
|
|
||||||
current_state = yield self.state_handler.get_current_state(room_id)
|
|
||||||
now = self.clock.time_msec()
|
now = self.clock.time_msec()
|
||||||
defer.returnValue(
|
defer.returnValue(
|
||||||
[serialize_event(c, now) for c in current_state.values()]
|
[serialize_event(c, now) for c in room_state.values()]
|
||||||
)
|
)
|
||||||
|
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
|
Loading…
Reference in New Issue
Block a user