From 95bb7a51c12852b6d1ef7b94c7f4d150ff100a79 Mon Sep 17 00:00:00 2001 From: Neil Alexander Date: Mon, 4 Apr 2022 17:03:40 +0100 Subject: [PATCH] Add comment to `restrictOldRoomPowerLevels` --- roomserver/internal/perform/perform_upgrade.go | 18 ++++++++++-------- sytest-whitelist | 3 --- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/roomserver/internal/perform/perform_upgrade.go b/roomserver/internal/perform/perform_upgrade.go index 368dc3216..da3fc9bb7 100644 --- a/roomserver/internal/perform/perform_upgrade.go +++ b/roomserver/internal/perform/perform_upgrade.go @@ -143,14 +143,15 @@ func (r *Upgrader) getRoomPowerLevels(ctx context.Context, roomID string) (*goma } func (r *Upgrader) restrictOldRoomPowerLevels(ctx context.Context, evTime time.Time, userID, roomID string) *api.PerformError { - powerLevelContent, pErr := r.getRoomPowerLevels(ctx, roomID) + restrictedPowerLevelContent, pErr := r.getRoomPowerLevels(ctx, roomID) if pErr != nil { return pErr } - restrictedPowerLevelContent := &gomatrixserverlib.PowerLevelContent{} - *restrictedPowerLevelContent = *powerLevelContent - + // From: https://spec.matrix.org/v1.2/client-server-api/#server-behaviour-16 + // If possible, the power levels in the old room should also be modified to + // prevent sending of events and inviting new users. For example, setting + // events_default and invite to the greater of 50 and users_default + 1. restrictedDefaultPowerLevel := int64(50) if restrictedPowerLevelContent.UsersDefault+1 > restrictedDefaultPowerLevel { restrictedDefaultPowerLevel = restrictedPowerLevelContent.UsersDefault + 1 @@ -159,8 +160,9 @@ func (r *Upgrader) restrictOldRoomPowerLevels(ctx context.Context, evTime time.T restrictedPowerLevelContent.Invite = restrictedDefaultPowerLevel restrictedPowerLevelsHeadered, resErr := r.makeHeaderedEvent(ctx, evTime, userID, roomID, fledglingEvent{ - Type: gomatrixserverlib.MRoomPowerLevels, - Content: restrictedPowerLevelContent, + Type: gomatrixserverlib.MRoomPowerLevels, + StateKey: "", + Content: restrictedPowerLevelContent, }) if resErr != nil { if resErr.Code == api.PerformErrorNotAllowed { @@ -242,12 +244,12 @@ func (r *Upgrader) publishIfOldRoomWasPublic(ctx context.Context, roomID, newRoo // if the old room is published (was public), publish the new room if len(pubQueryRes.RoomIDs) == 1 { - publishNewRoom(ctx, r.URSAPI, roomID, newRoomID) + publishNewRoomAndUnpublishOldRoom(ctx, r.URSAPI, roomID, newRoomID) } return nil } -func publishNewRoom( +func publishNewRoomAndUnpublishOldRoom( ctx context.Context, URSAPI api.RoomserverInternalAPI, oldRoomID, newRoomID string, diff --git a/sytest-whitelist b/sytest-whitelist index 82635524d..5baac2ad4 100644 --- a/sytest-whitelist +++ b/sytest-whitelist @@ -680,6 +680,3 @@ remote user has push rules copied to upgraded room Cannot send tombstone event that points to the same room Room summary counts change when membership changes /upgrade copies >100 power levels to the new room -/upgrade moves remote aliases to the new room -/upgrade preserves direct room state -Local and remote users' homeservers remove a room from their public directory on upgrade