Fix power levels being incorrectly set in old and new rooms after a room upgrade (#6633)
Modify a copy of an upgraded room's PL before sending to the new room
This commit is contained in:
parent
08815566bc
commit
01c3c6c929
|
@ -0,0 +1 @@
|
||||||
|
Fix bug where a moderator upgraded a room and became an admin in the new room.
|
|
@ -16,6 +16,7 @@
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
"""Contains functions for performing events on rooms."""
|
"""Contains functions for performing events on rooms."""
|
||||||
|
import copy
|
||||||
import itertools
|
import itertools
|
||||||
import logging
|
import logging
|
||||||
import math
|
import math
|
||||||
|
@ -271,7 +272,7 @@ class RoomCreationHandler(BaseHandler):
|
||||||
except AuthError as e:
|
except AuthError as e:
|
||||||
logger.warning("Unable to update PLs in old room: %s", e)
|
logger.warning("Unable to update PLs in old room: %s", e)
|
||||||
|
|
||||||
logger.info("Setting correct PLs in new room")
|
logger.info("Setting correct PLs in new room to %s", old_room_pl_state.content)
|
||||||
yield self.event_creation_handler.create_and_send_nonmember_event(
|
yield self.event_creation_handler.create_and_send_nonmember_event(
|
||||||
requester,
|
requester,
|
||||||
{
|
{
|
||||||
|
@ -365,13 +366,15 @@ class RoomCreationHandler(BaseHandler):
|
||||||
needed_power_level = max(state_default, ban, max(event_power_levels.values()))
|
needed_power_level = max(state_default, ban, max(event_power_levels.values()))
|
||||||
|
|
||||||
# Raise the requester's power level in the new room if necessary
|
# Raise the requester's power level in the new room if necessary
|
||||||
current_power_level = power_levels["users"][requester.user.to_string()]
|
current_power_level = power_levels["users"][user_id]
|
||||||
if current_power_level < needed_power_level:
|
if current_power_level < needed_power_level:
|
||||||
# Assign this power level to the requester
|
# Perform a deepcopy in order to not modify the original power levels in a
|
||||||
power_levels["users"][requester.user.to_string()] = needed_power_level
|
# room, as its contents are preserved as the state for the old room later on
|
||||||
|
new_power_levels = copy.deepcopy(power_levels)
|
||||||
|
initial_state[(EventTypes.PowerLevels, "")] = new_power_levels
|
||||||
|
|
||||||
# Set the power levels to the modified state
|
# Assign this power level to the requester
|
||||||
initial_state[(EventTypes.PowerLevels, "")] = power_levels
|
new_power_levels["users"][user_id] = needed_power_level
|
||||||
|
|
||||||
yield self._send_events_for_new_room(
|
yield self._send_events_for_new_room(
|
||||||
requester,
|
requester,
|
||||||
|
@ -733,7 +736,7 @@ class RoomCreationHandler(BaseHandler):
|
||||||
initial_state,
|
initial_state,
|
||||||
creation_content,
|
creation_content,
|
||||||
room_alias=None,
|
room_alias=None,
|
||||||
power_level_content_override=None,
|
power_level_content_override=None, # Doesn't apply when initial state has power level state event content
|
||||||
creator_join_profile=None,
|
creator_join_profile=None,
|
||||||
):
|
):
|
||||||
def create(etype, content, **kwargs):
|
def create(etype, content, **kwargs):
|
||||||
|
|
Loading…
Reference in New Issue