fix: Don't give v12 rooms room IDs

This commit is contained in:
timedout
2026-05-24 16:40:40 +01:00
parent 057eb9f644
commit 7b68572b2e
+16 -11
View File
@@ -267,12 +267,12 @@ pub(crate) async fn upgrade_room_route(
})?; })?;
// Create a replacement room // Create a replacement room
let room_version_rules = body let new_version_rules = body
.new_version .new_version
.rules() .rules()
.expect("new room version should have defined rules"); .expect("new room version should have defined rules");
let last_event = if room_version_rules let last_event = if new_version_rules
.authorization .authorization
.room_create_event_id_as_room_id .room_create_event_id_as_room_id
{ {
@@ -294,7 +294,7 @@ pub(crate) async fn upgrade_room_route(
.room_state_get_content(&body.room_id, &StateEventType::RoomCreate, "") .room_state_get_content(&body.room_id, &StateEventType::RoomCreate, "")
.await .await
.map_err(|_| err!(Database("Found room without m.room.create event.")))?; .map_err(|_| err!(Database("Found room without m.room.create event.")))?;
let create_event_content = if room_version_rules.authorization.use_room_create_sender { let create_event_content = if new_version_rules.authorization.use_room_create_sender {
RoomCreateEventContent::new_v1(sender_user.to_owned()) RoomCreateEventContent::new_v1(sender_user.to_owned())
} else { } else {
RoomCreateEventContent::new_v11() RoomCreateEventContent::new_v11()
@@ -304,10 +304,10 @@ pub(crate) async fn upgrade_room_route(
assign!( assign!(
create_event_content, create_event_content,
{ {
additional_creators: if room_version_rules.authorization.additional_room_creators { additional_creators: if new_version_rules.authorization.additional_room_creators {
body.additional_creators.clone() body.additional_creators.clone()
} else { Vec::new() }, } else { Vec::new() },
creator: if room_version_rules.authorization.use_room_create_sender { creator: if new_version_rules.authorization.use_room_create_sender {
Some(sender_user.to_owned()) Some(sender_user.to_owned())
} else { None }, } else { None },
predecessor: Some(assign!(PreviousRoom::new(body.room_id.clone()), { predecessor: Some(assign!(PreviousRoom::new(body.room_id.clone()), {
@@ -320,10 +320,10 @@ pub(crate) async fn upgrade_room_route(
}; };
let replacement_room_id: Option<OwnedRoomId> = let replacement_room_id: Option<OwnedRoomId> =
if room_version_rules.room_id_format == RoomIdFormatVersion::V2 { if new_version_rules.room_id_format == RoomIdFormatVersion::V2 {
Some(RoomId::new_v1(services.globals.server_name()))
} else {
None None
} else {
Some(RoomId::new_v1(services.globals.server_name()))
}; };
let new_room_state_lock = if let Some(new_room_id) = replacement_room_id.as_ref() { let new_room_state_lock = if let Some(new_room_id) = replacement_room_id.as_ref() {
@@ -351,8 +351,13 @@ pub(crate) async fn upgrade_room_route(
// we get one anyway because the function requires it and I can't be bothered // we get one anyway because the function requires it and I can't be bothered
// refactoring it. // refactoring it.
let (replacement_room_id, new_room_state_lock) = let (replacement_room_id, new_room_state_lock) =
if room_version_rules.room_id_format == RoomIdFormatVersion::V2 { if new_version_rules.room_id_format == RoomIdFormatVersion::V2 {
let parsed_room_id = RoomId::new_v2(create_event_id.as_str())?; let parsed_room_id = RoomId::new_v2(
create_event_id
.as_str()
.strip_prefix("$")
.expect("event ID must start with $ sigil"),
)?;
let lock = services let lock = services
.rooms .rooms
.state .state
@@ -417,7 +422,7 @@ pub(crate) async fn upgrade_room_route(
serde_json::from_str(event_content.get()).map_err(|_| { serde_json::from_str(event_content.get()).map_err(|_| {
err!(Request(BadJson("Power levels event content is not valid"))) err!(Request(BadJson("Power levels event content is not valid")))
})?; })?;
if room_version_rules if new_version_rules
.authorization .authorization
.explicitly_privilege_room_creators .explicitly_privilege_room_creators
{ {