Gracefully handle failing to kick user

This commit is contained in:
Erik Johnston 2019-03-20 16:54:00 +00:00
parent 6b28890543
commit 72a14860ab

View File

@ -501,34 +501,41 @@ class ShutdownRoomRestServlet(ClientV1RestServlet):
users = yield self.state.get_current_user_in_room(room_id) users = yield self.state.get_current_user_in_room(room_id)
kicked_users = [] kicked_users = []
failed_to_kick_users = []
for user_id in users: for user_id in users:
if not self.hs.is_mine_id(user_id): if not self.hs.is_mine_id(user_id):
continue continue
logger.info("Kicking %r from %r...", user_id, room_id) logger.info("Kicking %r from %r...", user_id, room_id)
target_requester = create_requester(user_id) try:
yield self.room_member_handler.update_membership( target_requester = create_requester(user_id)
requester=target_requester, yield self.room_member_handler.update_membership(
target=target_requester.user, requester=target_requester,
room_id=room_id, target=target_requester.user,
action=Membership.LEAVE, room_id=room_id,
content={}, action=Membership.LEAVE,
ratelimit=False content={},
) ratelimit=False
)
yield self.room_member_handler.forget(target_requester.user, room_id) yield self.room_member_handler.forget(target_requester.user, room_id)
yield self.room_member_handler.update_membership( yield self.room_member_handler.update_membership(
requester=target_requester, requester=target_requester,
target=target_requester.user, target=target_requester.user,
room_id=new_room_id, room_id=new_room_id,
action=Membership.JOIN, action=Membership.JOIN,
content={}, content={},
ratelimit=False ratelimit=False
) )
kicked_users.append(user_id) kicked_users.append(user_id)
except Exception:
logger.exception(
"Failed to leave old room and join new room for %r", user_id,
)
failed_to_kick_users.append(user_id)
yield self.event_creation_handler.create_and_send_nonmember_event( yield self.event_creation_handler.create_and_send_nonmember_event(
room_creator_requester, room_creator_requester,
@ -549,6 +556,7 @@ class ShutdownRoomRestServlet(ClientV1RestServlet):
defer.returnValue((200, { defer.returnValue((200, {
"kicked_users": kicked_users, "kicked_users": kicked_users,
"failed_to_kick_users": failed_to_kick_users,
"local_aliases": aliases_for_room, "local_aliases": aliases_for_room,
"new_room_id": new_room_id, "new_room_id": new_room_id,
})) }))