chore: deprecate support for unstable room versions

This commit is contained in:
avdb13 2024-07-22 13:38:29 +02:00
parent 91739899e7
commit 00b77144c1
7 changed files with 41 additions and 101 deletions

View file

@ -14,9 +14,6 @@ pub(crate) async fn get_capabilities_route(
_body: Ar<get_capabilities::v3::Request>, _body: Ar<get_capabilities::v3::Request>,
) -> Result<Ra<get_capabilities::v3::Response>> { ) -> Result<Ra<get_capabilities::v3::Response>> {
let mut available = BTreeMap::new(); let mut available = BTreeMap::new();
for room_version in &services().globals.unstable_room_versions {
available.insert(room_version.clone(), RoomVersionStability::Unstable);
}
for room_version in &services().globals.stable_room_versions { for room_version in &services().globals.stable_room_versions {
available.insert(room_version.clone(), RoomVersionStability::Stable); available.insert(room_version.clone(), RoomVersionStability::Stable);
} }

View file

@ -138,17 +138,8 @@ pub(crate) async fn create_room_route(
.deserialize_as::<CanonicalJsonObject>() .deserialize_as::<CanonicalJsonObject>()
.expect("Invalid creation content"); .expect("Invalid creation content");
match room_version { match &room_version {
RoomVersionId::V1 room_version if *room_version < RoomVersionId::V11 => {
| RoomVersionId::V2
| RoomVersionId::V3
| RoomVersionId::V4
| RoomVersionId::V5
| RoomVersionId::V6
| RoomVersionId::V7
| RoomVersionId::V8
| RoomVersionId::V9
| RoomVersionId::V10 => {
content.insert( content.insert(
"creator".into(), "creator".into(),
json!(&sender_user).try_into().map_err(|_| { json!(&sender_user).try_into().map_err(|_| {
@ -161,7 +152,11 @@ pub(crate) async fn create_room_route(
} }
// V11 removed the "creator" key // V11 removed the "creator" key
RoomVersionId::V11 => {} RoomVersionId::V11 => {}
_ => unreachable!("Validity of room version already checked"), _ => {
return Err(Error::BadServerResponse(
"Unsupported room version.",
))
}
} }
content.insert( content.insert(
@ -176,21 +171,16 @@ pub(crate) async fn create_room_route(
content content
} }
None => { None => {
let content = match room_version { let content = match &room_version {
RoomVersionId::V1 room_version if *room_version < RoomVersionId::V11 => {
| RoomVersionId::V2
| RoomVersionId::V3
| RoomVersionId::V4
| RoomVersionId::V5
| RoomVersionId::V6
| RoomVersionId::V7
| RoomVersionId::V8
| RoomVersionId::V9
| RoomVersionId::V10 => {
RoomCreateEventContent::new_v1(sender_user.to_owned()) RoomCreateEventContent::new_v1(sender_user.to_owned())
} }
RoomVersionId::V11 => RoomCreateEventContent::new_v11(), RoomVersionId::V11 => RoomCreateEventContent::new_v11(),
_ => unreachable!("Validity of room version already checked"), _ => {
return Err(Error::BadServerResponse(
"Unsupported room version.",
))
}
}; };
let mut content = serde_json::from_str::<CanonicalJsonObject>( let mut content = serde_json::from_str::<CanonicalJsonObject>(
to_raw_value(&content) to_raw_value(&content)
@ -671,17 +661,8 @@ pub(crate) async fn upgrade_room_route(
// Send a m.room.create event containing a predecessor field and the // Send a m.room.create event containing a predecessor field and the
// applicable room_version // applicable room_version
match body.new_version { match &body.new_version {
RoomVersionId::V1 room_version if *room_version < RoomVersionId::V11 => {
| RoomVersionId::V2
| RoomVersionId::V3
| RoomVersionId::V4
| RoomVersionId::V5
| RoomVersionId::V6
| RoomVersionId::V7
| RoomVersionId::V8
| RoomVersionId::V9
| RoomVersionId::V10 => {
create_event_content.insert( create_event_content.insert(
"creator".into(), "creator".into(),
json!(&sender_user).try_into().map_err(|_| { json!(&sender_user).try_into().map_err(|_| {
@ -696,7 +677,7 @@ pub(crate) async fn upgrade_room_route(
// "creator" key no longer exists in V11 rooms // "creator" key no longer exists in V11 rooms
create_event_content.remove("creator"); create_event_content.remove("creator");
} }
_ => unreachable!("Validity of room version already checked"), _ => return Err(Error::BadServerResponse("Unsupported room version.")),
} }
create_event_content.insert( create_event_content.insert(
"room_version".into(), "room_version".into(),

View file

@ -50,8 +50,6 @@ pub(crate) struct Config {
pub(crate) allow_encryption: bool, pub(crate) allow_encryption: bool,
#[serde(default = "true_fn")] #[serde(default = "true_fn")]
pub(crate) allow_room_creation: bool, pub(crate) allow_room_creation: bool,
#[serde(default = "true_fn")]
pub(crate) allow_unstable_room_versions: bool,
#[serde(default = "default_default_room_version")] #[serde(default = "default_default_room_version")]
pub(crate) default_room_version: RoomVersionId, pub(crate) default_room_version: RoomVersionId,
#[serde(default)] #[serde(default)]

View file

@ -1222,21 +1222,18 @@ impl Service {
services().users.create(&services().globals.admin_bot_user_id, None)?; services().users.create(&services().globals.admin_bot_user_id, None)?;
let room_version = services().globals.default_room_version(); let room_version = services().globals.default_room_version();
let mut content = match room_version { let mut content = match &room_version {
RoomVersionId::V1 room_version if *room_version < RoomVersionId::V11 => {
| RoomVersionId::V2 RoomCreateEventContent::new_v1(
| RoomVersionId::V3 services().globals.admin_bot_user_id.clone(),
| RoomVersionId::V4 )
| RoomVersionId::V5 }
| RoomVersionId::V6
| RoomVersionId::V7
| RoomVersionId::V8
| RoomVersionId::V9
| RoomVersionId::V10 => RoomCreateEventContent::new_v1(
services().globals.admin_bot_user_id.clone(),
),
RoomVersionId::V11 => RoomCreateEventContent::new_v11(), RoomVersionId::V11 => RoomCreateEventContent::new_v11(),
_ => unreachable!("Validity of room version already checked"), _ => {
return Err(Error::BadServerResponse(
"Unsupported room version.",
))
}
}; };
content.federate = true; content.federate = true;
content.predecessor = None; content.predecessor = None;

View file

@ -68,7 +68,6 @@ pub(crate) struct Service {
federation_client: reqwest::Client, federation_client: reqwest::Client,
default_client: reqwest::Client, default_client: reqwest::Client,
pub(crate) stable_room_versions: Vec<RoomVersionId>, pub(crate) stable_room_versions: Vec<RoomVersionId>,
pub(crate) unstable_room_versions: Vec<RoomVersionId>,
pub(crate) admin_bot_user_id: OwnedUserId, pub(crate) admin_bot_user_id: OwnedUserId,
pub(crate) admin_bot_room_alias_id: OwnedRoomAliasId, pub(crate) admin_bot_room_alias_id: OwnedRoomAliasId,
pub(crate) bad_event_ratelimiter: pub(crate) bad_event_ratelimiter:
@ -224,9 +223,6 @@ impl Service {
RoomVersionId::V10, RoomVersionId::V10,
RoomVersionId::V11, RoomVersionId::V11,
]; ];
// Experimental, partially supported room versions
let unstable_room_versions =
vec![RoomVersionId::V3, RoomVersionId::V4, RoomVersionId::V5];
let admin_bot_user_id = UserId::parse(format!( let admin_bot_user_id = UserId::parse(format!(
"@{}:{}", "@{}:{}",
@ -268,7 +264,6 @@ impl Service {
default_client, default_client,
jwt_decoding_key, jwt_decoding_key,
stable_room_versions, stable_room_versions,
unstable_room_versions,
admin_bot_user_id, admin_bot_user_id,
admin_bot_room_alias_id, admin_bot_room_alias_id,
bad_event_ratelimiter: Arc::new(RwLock::new(HashMap::new())), bad_event_ratelimiter: Arc::new(RwLock::new(HashMap::new())),
@ -369,10 +364,6 @@ impl Service {
self.config.allow_room_creation self.config.allow_room_creation
} }
pub(crate) fn allow_unstable_room_versions(&self) -> bool {
self.config.allow_unstable_room_versions
}
pub(crate) fn default_room_version(&self) -> RoomVersionId { pub(crate) fn default_room_version(&self) -> RoomVersionId {
self.config.default_room_version.clone() self.config.default_room_version.clone()
} }
@ -416,12 +407,7 @@ impl Service {
} }
pub(crate) fn supported_room_versions(&self) -> Vec<RoomVersionId> { pub(crate) fn supported_room_versions(&self) -> Vec<RoomVersionId> {
let mut room_versions: Vec<RoomVersionId> = vec![]; self.stable_room_versions.clone()
room_versions.extend(self.stable_room_versions.clone());
if self.allow_unstable_room_versions() {
room_versions.extend(self.unstable_room_versions.clone());
};
room_versions
} }
/// This doesn't actually check that the keys provided are newer than the /// This doesn't actually check that the keys provided are newer than the
@ -479,15 +465,10 @@ impl Service {
&self, &self,
keys: SigningKeys, keys: SigningKeys,
timestamp: MilliSecondsSinceUnixEpoch, timestamp: MilliSecondsSinceUnixEpoch,
room_version_id: &RoomVersionId, _room_version_id: &RoomVersionId,
) -> Option<BTreeMap<String, Base64>> { ) -> Option<BTreeMap<String, Base64>> {
let all_valid = keys.valid_until_ts > timestamp let all_valid = keys.valid_until_ts > timestamp;
// valid_until_ts MUST be ignored in room versions 1, 2, 3, and 4.
// https://spec.matrix.org/v1.10/server-server-api/#get_matrixkeyv2server
|| matches!(room_version_id, RoomVersionId::V1
| RoomVersionId::V2
| RoomVersionId::V4
| RoomVersionId::V3);
all_valid.then(|| { all_valid.then(|| {
// Given that either the room version allows stale keys, or the // Given that either the room version allows stale keys, or the
// valid_until_ts is in the future, all verify_keys are // valid_until_ts is in the future, all verify_keys are

View file

@ -942,16 +942,7 @@ impl Service {
})? || incoming_pdu.kind })? || incoming_pdu.kind
== TimelineEventType::RoomRedaction == TimelineEventType::RoomRedaction
&& match room_version_id { && match room_version_id {
RoomVersionId::V1 room_version if *room_version < RoomVersionId::V11 => {
| RoomVersionId::V2
| RoomVersionId::V3
| RoomVersionId::V4
| RoomVersionId::V5
| RoomVersionId::V6
| RoomVersionId::V7
| RoomVersionId::V8
| RoomVersionId::V9
| RoomVersionId::V10 => {
if let Some(redact_id) = &incoming_pdu.redacts { if let Some(redact_id) = &incoming_pdu.redacts {
!services().rooms.state_accessor.user_can_redact( !services().rooms.state_accessor.user_can_redact(
redact_id, redact_id,
@ -985,7 +976,9 @@ impl Service {
} }
} }
_ => { _ => {
unreachable!("Validity of room version already checked") return Err(Error::BadServerResponse(
"Unsupported room version.",
))
} }
}; };

View file

@ -391,17 +391,8 @@ impl Service {
TimelineEventType::RoomRedaction => { TimelineEventType::RoomRedaction => {
let room_version_id = let room_version_id =
services().rooms.state.get_room_version(&pdu.room_id)?; services().rooms.state.get_room_version(&pdu.room_id)?;
match room_version_id { match &room_version_id {
RoomVersionId::V1 room_version if *room_version < RoomVersionId::V11 => {
| RoomVersionId::V2
| RoomVersionId::V3
| RoomVersionId::V4
| RoomVersionId::V5
| RoomVersionId::V6
| RoomVersionId::V7
| RoomVersionId::V8
| RoomVersionId::V9
| RoomVersionId::V10 => {
if let Some(redact_id) = &pdu.redacts { if let Some(redact_id) = &pdu.redacts {
if services().rooms.state_accessor.user_can_redact( if services().rooms.state_accessor.user_can_redact(
redact_id, redact_id,
@ -435,7 +426,9 @@ impl Service {
} }
} }
_ => { _ => {
unreachable!("Validity of room version already checked") return Err(Error::BadServerResponse(
"Unsupported room version.",
));
} }
}; };
} }