mirror of
https://gitlab.computer.surgery/matrix/grapevine.git
synced 2025-12-17 07:41:23 +01:00
chore: deprecate support for unstable room versions
This commit is contained in:
parent
91739899e7
commit
00b77144c1
7 changed files with 41 additions and 101 deletions
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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(),
|
||||||
|
|
|
||||||
|
|
@ -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)]
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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.",
|
||||||
|
))
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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.",
|
||||||
|
));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue