diff options
author | Erik Johnston <erik@matrix.org> | 2016-03-30 10:54:01 +0100 |
---|---|---|
committer | Erik Johnston <erik@matrix.org> | 2016-03-30 11:03:00 +0100 |
commit | fddb6fddc1f1e70ab79d8d4ed276f722ab2ea058 (patch) | |
tree | c6dc6d3d1ea32e2c475dc59ad8883f5a73b28fe6 /synapse/handlers/room.py | |
parent | Merge pull request #671 from nikriek/jwt-support (diff) | |
download | synapse-fddb6fddc1f1e70ab79d8d4ed276f722ab2ea058.tar.xz |
Require user to have left room to forget room
This dramatically simplifies the forget API code - in particular it no longer generates a leave event.
Diffstat (limited to 'synapse/handlers/room.py')
-rw-r--r-- | synapse/handlers/room.py | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/synapse/handlers/room.py b/synapse/handlers/room.py index 133183a257..1d4c2c39a1 100644 --- a/synapse/handlers/room.py +++ b/synapse/handlers/room.py @@ -416,8 +416,6 @@ class RoomMemberHandler(BaseHandler): effective_membership_state = action if action in ["kick", "unban"]: effective_membership_state = "leave" - elif action == "forget": - effective_membership_state = "leave" if third_party_signed is not None: replication = self.hs.get_replication_layer() @@ -473,9 +471,6 @@ class RoomMemberHandler(BaseHandler): remote_room_hosts=remote_room_hosts, ) - if action == "forget": - yield self.forget(requester.user, room_id) - @defer.inlineCallbacks def send_membership_event( self, @@ -935,8 +930,23 @@ class RoomMemberHandler(BaseHandler): display_name = data["display_name"] defer.returnValue((token, public_keys, fallback_public_key, display_name)) + @defer.inlineCallbacks def forget(self, user, room_id): - return self.store.forget(user.to_string(), room_id) + user_id = user.to_string() + + member = yield self.state_handler.get_current_state( + room_id=room_id, + event_type=EventTypes.Member, + state_key=user_id + ) + membership = member.membership if member else None + + if membership is not None and membership != Membership.LEAVE: + raise SynapseError(400, "User %s in room %s" % ( + user_id, room_id + )) + + yield self.store.forget(user_id, room_id) class RoomListHandler(BaseHandler): |