Merge remote-tracking branch 'upstream/main' into conduwuit-changes

This commit is contained in:
strawberry 2024-03-08 00:07:10 -05:00
commit 88e857db7d
7 changed files with 29 additions and 3 deletions

View File

@ -26,6 +26,8 @@ Improvements:
- Add optional cookie field to `session::sso_login*::v3` responses. - Add optional cookie field to `session::sso_login*::v3` responses.
- Add support for local user erasure to `account::deactivate::v3::Request`, - Add support for local user erasure to `account::deactivate::v3::Request`,
according to MSC4025. according to MSC4025.
- Allow `discovery::get_supported_versions::v1` to optionally accept
authentication, according to MSC4026.
# 0.17.4 # 0.17.4

View File

@ -14,7 +14,7 @@ use ruma_common::{
const METADATA: Metadata = metadata! { const METADATA: Metadata = metadata! {
method: GET, method: GET,
rate_limited: false, rate_limited: false,
authentication: None, authentication: AccessTokenOptional,
history: { history: {
1.0 => "/_matrix/client/versions", 1.0 => "/_matrix/client/versions",
} }
@ -32,6 +32,9 @@ pub struct Response {
pub versions: Vec<String>, pub versions: Vec<String>,
/// Experimental features supported by the server. /// Experimental features supported by the server.
///
/// Servers can enable some unstable features only for some users, so this
/// list might differ when an access token is provided.
#[serde(default, skip_serializing_if = "BTreeMap::is_empty")] #[serde(default, skip_serializing_if = "BTreeMap::is_empty")]
pub unstable_features: BTreeMap<String, bool>, pub unstable_features: BTreeMap<String, bool>,
} }

View File

@ -9,6 +9,7 @@ Breaking changes:
If the field is missing, push rules that depend on it will never match. However, this allows to If the field is missing, push rules that depend on it will never match. However, this allows to
match the `.m.rule.invite_for_me` push rule because usually the `invite_state` doesn't include match the `.m.rule.invite_for_me` push rule because usually the `invite_state` doesn't include
`m.room.power_levels`. `m.room.power_levels`.
- Add support for endpoints that take an optional authentication
Improvements: Improvements:

View File

@ -484,6 +484,12 @@ pub enum AuthScheme {
/// It is recommended to use the header over the query parameter. /// It is recommended to use the header over the query parameter.
AccessToken, AccessToken,
/// Authentication is optional, and it is performed by including an access token in the
/// `Authentication` http header, or an `access_token` query parameter.
///
/// It is recommended to use the header over the query parameter.
AccessTokenOptional,
/// Authentication is performed by including X-Matrix signatures in the request headers, /// Authentication is performed by including X-Matrix signatures in the request headers,
/// as defined in the federation API. /// as defined in the federation API.
ServerSignatures, ServerSignatures,

View File

@ -74,6 +74,11 @@ impl Metadata {
Some((header::AUTHORIZATION, format!("Bearer {token}").try_into()?)) Some((header::AUTHORIZATION, format!("Bearer {token}").try_into()?))
} }
AuthScheme::AccessTokenOptional => match access_token.get_required_for_endpoint() {
Some(token) => Some((header::AUTHORIZATION, format!("Bearer {token}").try_into()?)),
None => None,
},
AuthScheme::ServerSignatures => None, AuthScheme::ServerSignatures => None,
}) })
} }

View File

@ -1,5 +1,13 @@
# [unreleased] # [unreleased]
Bug fixes:
- Allow underscores (`_`) when validating MXC URIs.
- They have always been allowed in [the spec][mxc validation spec]
in order to support URL-safe base64-encoded media IDs.
[mxc validation spec]: https://spec.matrix.org/v1.9/client-server-api/#security-considerations-5
Improvements: Improvements:
- Point links to the Matrix 1.9 specification - Point links to the Matrix 1.9 specification

View File

@ -18,8 +18,9 @@ pub fn validate(uri: &str) -> Result<NonZeroU8, MxcUriError> {
let server_name = &uri[..index]; let server_name = &uri[..index];
let media_id = &uri[index + 1..]; let media_id = &uri[index + 1..];
// See: https://spec.matrix.org/v1.9/client-server-api/#security-considerations-5 // See: https://spec.matrix.org/v1.9/client-server-api/#security-considerations-5
let media_id_is_valid = let media_id_is_valid = media_id
media_id.bytes().all(|b| matches!(b, b'0'..=b'9' | b'a'..=b'z' | b'A'..=b'Z' | b'-' )); .bytes()
.all(|b| matches!(b, b'0'..=b'9' | b'a'..=b'z' | b'A'..=b'Z' | b'-' | b'_' ));
if !media_id_is_valid { if !media_id_is_valid {
Err(MxcUriError::MediaIdMalformed) Err(MxcUriError::MediaIdMalformed)