chore: Migrate to axum 0.8

Co-authored-by: dasha_uwu
This commit is contained in:
Jade Ellis 2025-04-28 22:39:32 +01:00
parent 4158c1cf62
commit 87d26e69ed
No known key found for this signature in database
GPG key ID: 8705A2A3EBF77BD2
6 changed files with 89 additions and 38 deletions

79
Cargo.lock generated
View file

@ -260,16 +260,43 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "edca88bc138befd0323b20752846e6587272d3b03b0343c8ea28a6f819e6e71f" checksum = "edca88bc138befd0323b20752846e6587272d3b03b0343c8ea28a6f819e6e71f"
dependencies = [ dependencies = [
"async-trait", "async-trait",
"axum-core", "axum-core 0.4.5",
"bytes", "bytes",
"futures-util", "futures-util",
"http", "http",
"http-body", "http-body",
"http-body-util", "http-body-util",
"itoa",
"matchit 0.7.3",
"memchr",
"mime",
"percent-encoding",
"pin-project-lite",
"rustversion",
"serde",
"sync_wrapper",
"tower 0.5.2",
"tower-layer",
"tower-service",
]
[[package]]
name = "axum"
version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "de45108900e1f9b9242f7f2e254aa3e2c029c921c258fe9e6b4217eeebd54288"
dependencies = [
"axum-core 0.5.2",
"bytes",
"form_urlencoded",
"futures-util",
"http",
"http-body",
"http-body-util",
"hyper", "hyper",
"hyper-util", "hyper-util",
"itoa", "itoa",
"matchit", "matchit 0.8.4",
"memchr", "memchr",
"mime", "mime",
"percent-encoding", "percent-encoding",
@ -289,11 +316,11 @@ dependencies = [
[[package]] [[package]]
name = "axum-client-ip" name = "axum-client-ip"
version = "0.6.1" version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9eefda7e2b27e1bda4d6fa8a06b50803b8793769045918bc37ad062d48a6efac" checksum = "dff8ee1869817523c8f91c20bf17fd932707f66c2e7e0b0f811b29a227289562"
dependencies = [ dependencies = [
"axum", "axum 0.8.3",
"forwarded-header-value", "forwarded-header-value",
"serde", "serde",
] ]
@ -316,17 +343,36 @@ dependencies = [
"sync_wrapper", "sync_wrapper",
"tower-layer", "tower-layer",
"tower-service", "tower-service",
]
[[package]]
name = "axum-core"
version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "68464cd0412f486726fb3373129ef5d2993f90c34bc2bc1c1e9943b2f4fc7ca6"
dependencies = [
"bytes",
"futures-core",
"http",
"http-body",
"http-body-util",
"mime",
"pin-project-lite",
"rustversion",
"sync_wrapper",
"tower-layer",
"tower-service",
"tracing", "tracing",
] ]
[[package]] [[package]]
name = "axum-extra" name = "axum-extra"
version = "0.9.6" version = "0.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c794b30c904f0a1c2fb7740f7df7f7972dfaa14ef6f57cb6178dc63e5dca2f04" checksum = "45bf463831f5131b7d3c756525b305d40f1185b688565648a92e1392ca35713d"
dependencies = [ dependencies = [
"axum", "axum 0.8.3",
"axum-core", "axum-core 0.5.2",
"bytes", "bytes",
"futures-util", "futures-util",
"headers", "headers",
@ -335,6 +381,7 @@ dependencies = [
"http-body-util", "http-body-util",
"mime", "mime",
"pin-project-lite", "pin-project-lite",
"rustversion",
"serde", "serde",
"tower 0.5.2", "tower 0.5.2",
"tower-layer", "tower-layer",
@ -778,7 +825,7 @@ name = "conduwuit_api"
version = "0.5.0-rc.5" version = "0.5.0-rc.5"
dependencies = [ dependencies = [
"async-trait", "async-trait",
"axum", "axum 0.8.3",
"axum-client-ip", "axum-client-ip",
"axum-extra", "axum-extra",
"base64 0.22.1", "base64 0.22.1",
@ -811,7 +858,7 @@ version = "0.5.0-rc.5"
dependencies = [ dependencies = [
"argon2", "argon2",
"arrayvec", "arrayvec",
"axum", "axum 0.8.3",
"axum-extra", "axum-extra",
"bytes", "bytes",
"bytesize", "bytesize",
@ -895,7 +942,7 @@ dependencies = [
name = "conduwuit_router" name = "conduwuit_router"
version = "0.5.0-rc.5" version = "0.5.0-rc.5"
dependencies = [ dependencies = [
"axum", "axum 0.8.3",
"axum-client-ip", "axum-client-ip",
"axum-server", "axum-server",
"axum-server-dual-protocol", "axum-server-dual-protocol",
@ -2612,6 +2659,12 @@ version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94"
[[package]]
name = "matchit"
version = "0.8.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3"
[[package]] [[package]]
name = "maybe-rayon" name = "maybe-rayon"
version = "0.1.1" version = "0.1.1"
@ -4884,7 +4937,7 @@ checksum = "877c5b330756d856ffcc4553ab34a5684481ade925ecc54bcd1bf02b1d0d4d52"
dependencies = [ dependencies = [
"async-stream", "async-stream",
"async-trait", "async-trait",
"axum", "axum 0.7.9",
"base64 0.22.1", "base64 0.22.1",
"bytes", "bytes",
"h2", "h2",

View file

@ -93,7 +93,7 @@ version = "1.3.1"
version = "1.11.1" version = "1.11.1"
[workspace.dependencies.axum] [workspace.dependencies.axum]
version = "0.7.9" version = "0.8.3"
default-features = false default-features = false
features = [ features = [
"form", "form",
@ -106,7 +106,7 @@ features = [
] ]
[workspace.dependencies.axum-extra] [workspace.dependencies.axum-extra]
version = "0.9.6" version = "0.10.1"
default-features = false default-features = false
features = ["typed-header", "tracing"] features = ["typed-header", "tracing"]
@ -119,7 +119,7 @@ default-features = false
version = "0.7" version = "0.7"
[workspace.dependencies.axum-client-ip] [workspace.dependencies.axum-client-ip]
version = "0.6.1" version = "0.7"
[workspace.dependencies.tower] [workspace.dependencies.tower]
version = "0.5.2" version = "0.5.2"

View file

@ -60,7 +60,7 @@ pub(crate) async fn get_mutual_rooms_route(
}) })
} }
/// # `DELETE /_matrix/client/unstable/uk.tcpip.msc4133/profile/:user_id/us.cloke.msc4175.tz` /// # `DELETE /_matrix/client/unstable/uk.tcpip.msc4133/profile/{user_id}/us.cloke.msc4175.tz`
/// ///
/// Deletes the `tz` (timezone) of a user, as per MSC4133 and MSC4175. /// Deletes the `tz` (timezone) of a user, as per MSC4133 and MSC4175.
/// ///
@ -88,7 +88,7 @@ pub(crate) async fn delete_timezone_key_route(
Ok(delete_timezone_key::unstable::Response {}) Ok(delete_timezone_key::unstable::Response {})
} }
/// # `PUT /_matrix/client/unstable/uk.tcpip.msc4133/profile/:user_id/us.cloke.msc4175.tz` /// # `PUT /_matrix/client/unstable/uk.tcpip.msc4133/profile/{user_id}/us.cloke.msc4175.tz`
/// ///
/// Updates the `tz` (timezone) of a user, as per MSC4133 and MSC4175. /// Updates the `tz` (timezone) of a user, as per MSC4133 and MSC4175.
/// ///
@ -268,7 +268,7 @@ pub(crate) async fn delete_profile_key_route(
Ok(delete_profile_key::unstable::Response {}) Ok(delete_profile_key::unstable::Response {})
} }
/// # `GET /_matrix/client/unstable/uk.tcpip.msc4133/profile/:user_id/us.cloke.msc4175.tz` /// # `GET /_matrix/client/unstable/uk.tcpip.msc4133/profile/{user_id}/us.cloke.msc4175.tz`
/// ///
/// Returns the `timezone` of the user as per MSC4133 and MSC4175. /// Returns the `timezone` of the user as per MSC4133 and MSC4175.
/// ///

View file

@ -124,23 +124,23 @@ pub fn build(router: Router<State>, server: &Server) -> Router<State> {
// Ruma doesn't have support for multiple paths for a single endpoint yet, and these routes // Ruma doesn't have support for multiple paths for a single endpoint yet, and these routes
// share one Ruma request / response type pair with {get,send}_state_event_for_key_route // share one Ruma request / response type pair with {get,send}_state_event_for_key_route
.route( .route(
"/_matrix/client/r0/rooms/:room_id/state/:event_type", "/_matrix/client/r0/rooms/{room_id}/state/{event_type}",
get(client::get_state_events_for_empty_key_route) get(client::get_state_events_for_empty_key_route)
.put(client::send_state_event_for_empty_key_route), .put(client::send_state_event_for_empty_key_route),
) )
.route( .route(
"/_matrix/client/v3/rooms/:room_id/state/:event_type", "/_matrix/client/v3/rooms/{room_id}/state/{event_type}",
get(client::get_state_events_for_empty_key_route) get(client::get_state_events_for_empty_key_route)
.put(client::send_state_event_for_empty_key_route), .put(client::send_state_event_for_empty_key_route),
) )
// These two endpoints allow trailing slashes // These two endpoints allow trailing slashes
.route( .route(
"/_matrix/client/r0/rooms/:room_id/state/:event_type/", "/_matrix/client/r0/rooms/{room_id}/state/{event_type}/",
get(client::get_state_events_for_empty_key_route) get(client::get_state_events_for_empty_key_route)
.put(client::send_state_event_for_empty_key_route), .put(client::send_state_event_for_empty_key_route),
) )
.route( .route(
"/_matrix/client/v3/rooms/:room_id/state/:event_type/", "/_matrix/client/v3/rooms/{room_id}/state/{event_type}/",
get(client::get_state_events_for_empty_key_route) get(client::get_state_events_for_empty_key_route)
.put(client::send_state_event_for_empty_key_route), .put(client::send_state_event_for_empty_key_route),
) )
@ -180,7 +180,7 @@ pub fn build(router: Router<State>, server: &Server) -> Router<State> {
.ruma_route(&client::get_mutual_rooms_route) .ruma_route(&client::get_mutual_rooms_route)
.ruma_route(&client::get_room_summary) .ruma_route(&client::get_room_summary)
.route( .route(
"/_matrix/client/unstable/im.nheko.summary/rooms/:room_id_or_alias/summary", "/_matrix/client/unstable/im.nheko.summary/rooms/{room_id_or_alias}/summary",
get(client::get_room_summary_legacy) get(client::get_room_summary_legacy)
) )
.ruma_route(&client::well_known_support) .ruma_route(&client::well_known_support)
@ -194,7 +194,7 @@ pub fn build(router: Router<State>, server: &Server) -> Router<State> {
.ruma_route(&server::get_server_version_route) .ruma_route(&server::get_server_version_route)
.route("/_matrix/key/v2/server", get(server::get_server_keys_route)) .route("/_matrix/key/v2/server", get(server::get_server_keys_route))
.route( .route(
"/_matrix/key/v2/server/:key_id", "/_matrix/key/v2/server/{key_id}",
get(server::get_server_keys_deprecated_route), get(server::get_server_keys_deprecated_route),
) )
.ruma_route(&server::get_public_rooms_route) .ruma_route(&server::get_public_rooms_route)
@ -228,9 +228,9 @@ pub fn build(router: Router<State>, server: &Server) -> Router<State> {
.route("/_conduwuit/local_user_count", get(client::conduwuit_local_user_count)); .route("/_conduwuit/local_user_count", get(client::conduwuit_local_user_count));
} else { } else {
router = router router = router
.route("/_matrix/federation/*path", any(federation_disabled)) .route("/_matrix/federation/{*path}", any(federation_disabled))
.route("/.well-known/matrix/server", any(federation_disabled)) .route("/.well-known/matrix/server", any(federation_disabled))
.route("/_matrix/key/*path", any(federation_disabled)) .route("/_matrix/key/{*path}", any(federation_disabled))
.route("/_conduwuit/local_user_count", any(federation_disabled)); .route("/_conduwuit/local_user_count", any(federation_disabled));
} }
@ -248,27 +248,27 @@ pub fn build(router: Router<State>, server: &Server) -> Router<State> {
get(client::get_media_preview_legacy_legacy_route), get(client::get_media_preview_legacy_legacy_route),
) )
.route( .route(
"/_matrix/media/v1/download/:server_name/:media_id", "/_matrix/media/v1/download/{server_name}/{media_id}",
get(client::get_content_legacy_legacy_route), get(client::get_content_legacy_legacy_route),
) )
.route( .route(
"/_matrix/media/v1/download/:server_name/:media_id/:file_name", "/_matrix/media/v1/download/{server_name}/{media_id}/{file_name}",
get(client::get_content_as_filename_legacy_legacy_route), get(client::get_content_as_filename_legacy_legacy_route),
) )
.route( .route(
"/_matrix/media/v1/thumbnail/:server_name/:media_id", "/_matrix/media/v1/thumbnail/{server_name}/{media_id}",
get(client::get_content_thumbnail_legacy_legacy_route), get(client::get_content_thumbnail_legacy_legacy_route),
); );
} else { } else {
router = router router = router
.route("/_matrix/media/v1/*path", any(legacy_media_disabled)) .route("/_matrix/media/v1/{*path}", any(legacy_media_disabled))
.route("/_matrix/media/v3/config", any(legacy_media_disabled)) .route("/_matrix/media/v3/config", any(legacy_media_disabled))
.route("/_matrix/media/v3/download/*path", any(legacy_media_disabled)) .route("/_matrix/media/v3/download/{*path}", any(legacy_media_disabled))
.route("/_matrix/media/v3/thumbnail/*path", any(legacy_media_disabled)) .route("/_matrix/media/v3/thumbnail/{*path}", any(legacy_media_disabled))
.route("/_matrix/media/v3/preview_url", any(redirect_legacy_preview)) .route("/_matrix/media/v3/preview_url", any(redirect_legacy_preview))
.route("/_matrix/media/r0/config", any(legacy_media_disabled)) .route("/_matrix/media/r0/config", any(legacy_media_disabled))
.route("/_matrix/media/r0/download/*path", any(legacy_media_disabled)) .route("/_matrix/media/r0/download/{*path}", any(legacy_media_disabled))
.route("/_matrix/media/r0/thumbnail/*path", any(legacy_media_disabled)) .route("/_matrix/media/r0/thumbnail/{*path}", any(legacy_media_disabled))
.route("/_matrix/media/r0/preview_url", any(redirect_legacy_preview)); .route("/_matrix/media/r0/preview_url", any(redirect_legacy_preview));
} }

View file

@ -1,6 +1,5 @@
use std::{mem, ops::Deref}; use std::{mem, ops::Deref};
use async_trait::async_trait;
use axum::{body::Body, extract::FromRequest}; use axum::{body::Body, extract::FromRequest};
use bytes::{BufMut, Bytes, BytesMut}; use bytes::{BufMut, Bytes, BytesMut};
use conduwuit::{Error, Result, debug, debug_warn, err, trace, utils::string::EMPTY}; use conduwuit::{Error, Result, debug, debug_warn, err, trace, utils::string::EMPTY};
@ -79,7 +78,6 @@ where
fn deref(&self) -> &Self::Target { &self.body } fn deref(&self) -> &Self::Target { &self.body }
} }
#[async_trait]
impl<T> FromRequest<State, Body> for Args<T> impl<T> FromRequest<State, Body> for Args<T>
where where
T: IncomingRequest + Send + Sync + 'static, T: IncomingRequest + Send + Sync + 'static,

View file

@ -48,7 +48,7 @@ pub(super) async fn auth(
json_body: Option<&CanonicalJsonValue>, json_body: Option<&CanonicalJsonValue>,
metadata: &Metadata, metadata: &Metadata,
) -> Result<Auth> { ) -> Result<Auth> {
let bearer: Option<TypedHeader<Authorization<Bearer>>> = request.parts.extract().await?; let bearer: Option<TypedHeader<Authorization<Bearer>>> = request.parts.extract().await.unwrap_or(None);
let token = match &bearer { let token = match &bearer {
| Some(TypedHeader(Authorization(bearer))) => Some(bearer.token()), | Some(TypedHeader(Authorization(bearer))) => Some(bearer.token()),
| None => request.query.access_token.as_deref(), | None => request.query.access_token.as_deref(),