From 14cb26cebd729fb0e209eb1ab3d626f431efb83a Mon Sep 17 00:00:00 2001 From: Cameron Garnham Date: Tue, 26 Dec 2023 18:20:52 +0800 Subject: [PATCH] chore: update deps to hyper v1 ``` Updating crates.io index Updating axum v0.6.20 -> v0.7.2 Updating axum-client-ip v0.4.2 -> v0.5.0 Updating axum-core v0.3.4 -> v0.4.1 Updating axum-macros v0.3.8 -> v0.4.0 Updating axum-server v0.5.1 -> v0.6.0 Adding h2 v0.4.0 Adding http-body-util v0.1.0 Removing http-range-header v0.3.1 Adding hyper-util v0.1.2 Updating rustls-pemfile v1.0.4 -> v2.0.0 Adding rustls-pki-types v1.1.0 Updating tower-http v0.4.4 -> v0.5.0 ``` --- Cargo.lock | 179 ++++++++++++++++++------ Cargo.toml | 10 +- src/servers/apis/server.rs | 30 ++-- src/servers/apis/v1/middlewares/auth.rs | 11 +- src/servers/health_check_api/server.rs | 22 ++- src/servers/http/v1/launcher.rs | 35 +++-- 6 files changed, 208 insertions(+), 79 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ac0e95ce..b696fc0d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -196,19 +196,20 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "axum" -version = "0.6.20" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf" +checksum = "202651474fe73c62d9e0a56c6133f7a0ff1dc1c8cf7a5b03381af2a26553ac9d" dependencies = [ "async-trait", "axum-core", "axum-macros", - "bitflags 1.3.2", "bytes", "futures-util", - "http", - "http-body", - "hyper", + "http 1.0.0", + "http-body 1.0.0", + "http-body-util", + "hyper 1.1.0", + "hyper-util", "itoa", "matchit", "memchr", @@ -229,9 +230,9 @@ dependencies = [ [[package]] name = "axum-client-ip" -version = "0.4.2" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ef117890a418b7832678d9ea1e1c08456dd7b2fd1dadb9676cd6f0fe7eb4b21" +checksum = "0f5ffe4637708b326c621d5494ab6c91dcf62ee440fa6ee967d289315a9c6f81" dependencies = [ "axum", "forwarded-header-value", @@ -240,26 +241,29 @@ dependencies = [ [[package]] name = "axum-core" -version = "0.3.4" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c" +checksum = "77cb22c689c44d4c07b0ab44ebc25d69d8ae601a2f28fb8d672d344178fa17aa" dependencies = [ "async-trait", "bytes", "futures-util", - "http", - "http-body", + "http 1.0.0", + "http-body 1.0.0", + "http-body-util", "mime", + "pin-project-lite", "rustversion", + "sync_wrapper", "tower-layer", "tower-service", ] [[package]] name = "axum-macros" -version = "0.3.8" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdca6a10ecad987bda04e95606ef85a5417dcaac1a78455242d72e031e2b6b62" +checksum = "5a2edad600410b905404c594e2523549f1bcd4bded1e252c8f74524ccce0b867" dependencies = [ "heck", "proc-macro2", @@ -269,21 +273,24 @@ dependencies = [ [[package]] name = "axum-server" -version = "0.5.1" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "447f28c85900215cc1bea282f32d4a2f22d55c5a300afdfbc661c8d6a632e063" +checksum = "c1ad46c3ec4e12f4a4b6835e173ba21c25e484c9d02b49770bf006ce5367c036" dependencies = [ "arc-swap", "bytes", "futures-util", - "http", - "http-body", - "hyper", + "http 1.0.0", + "http-body 1.0.0", + "http-body-util", + "hyper 1.1.0", + "hyper-util", "pin-project-lite", "rustls", "rustls-pemfile", "tokio", "tokio-rustls", + "tower", "tower-service", ] @@ -1197,7 +1204,26 @@ dependencies = [ "futures-core", "futures-sink", "futures-util", - "http", + "http 0.2.11", + "indexmap 2.1.0", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "h2" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1d308f63daf4181410c242d34c11f928dcb3aa105852019e043c9d1f4e4368a" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http 1.0.0", "indexmap 2.1.0", "slab", "tokio", @@ -1277,6 +1303,17 @@ dependencies = [ "itoa", ] +[[package]] +name = "http" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b32afd38673a8016f7c9ae69e5af41a58f81b1d31689040f2f1959594ce194ea" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + [[package]] name = "http-body" version = "0.4.6" @@ -1284,15 +1321,32 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" dependencies = [ "bytes", - "http", + "http 0.2.11", "pin-project-lite", ] [[package]] -name = "http-range-header" -version = "0.3.1" +name = "http-body" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cac85db508abc24a2e48553ba12a996e87244a0395ce011e62b37158745d643" +dependencies = [ + "bytes", + "http 1.0.0", +] + +[[package]] +name = "http-body-util" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "add0ab9360ddbd88cfeb3bd9574a1d85cfdfa14db10b3e21d3700dbc4328758f" +checksum = "41cb79eb393015dadd30fc252023adb0b2400a0caee0fa2a077e6e21a551e840" +dependencies = [ + "bytes", + "futures-util", + "http 1.0.0", + "http-body 1.0.0", + "pin-project-lite", +] [[package]] name = "httparse" @@ -1316,9 +1370,9 @@ dependencies = [ "futures-channel", "futures-core", "futures-util", - "h2", - "http", - "http-body", + "h2 0.3.22", + "http 0.2.11", + "http-body 0.4.6", "httparse", "httpdate", "itoa", @@ -1330,6 +1384,25 @@ dependencies = [ "want", ] +[[package]] +name = "hyper" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb5aa53871fc917b1a9ed87b683a5d86db645e23acb32c2e0785a353e522fb75" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "h2 0.4.0", + "http 1.0.0", + "http-body 1.0.0", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "tokio", +] + [[package]] name = "hyper-tls" version = "0.5.0" @@ -1337,12 +1410,30 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" dependencies = [ "bytes", - "hyper", + "hyper 0.14.28", "native-tls", "tokio", "tokio-native-tls", ] +[[package]] +name = "hyper-util" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdea9aac0dbe5a9240d68cfd9501e2db94222c6dc06843e06640b9e07f0fdc67" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http 1.0.0", + "http-body 1.0.0", + "hyper 1.1.0", + "pin-project-lite", + "socket2", + "tokio", + "tracing", +] + [[package]] name = "iana-time-zone" version = "0.1.58" @@ -2477,10 +2568,10 @@ dependencies = [ "encoding_rs", "futures-core", "futures-util", - "h2", - "http", - "http-body", - "hyper", + "h2 0.3.22", + "http 0.2.11", + "http-body 0.4.6", + "hyper 0.14.28", "hyper-tls", "ipnet", "js-sys", @@ -2646,13 +2737,20 @@ dependencies = [ [[package]] name = "rustls-pemfile" -version = "1.0.4" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +checksum = "35e4980fa29e4c4b212ffb3db068a564cbf560e51d3944b7c88bd8bf5bec64f4" dependencies = [ "base64 0.21.5", + "rustls-pki-types", ] +[[package]] +name = "rustls-pki-types" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e9d979b3ce68192e42760c7810125eb6cf2ea10efae545a156063e61f314e2a" + [[package]] name = "rustls-webpki" version = "0.101.7" @@ -3323,7 +3421,7 @@ dependencies = [ "derive_more", "fern", "futures", - "hyper", + "hyper 1.1.0", "lazy_static", "local-ip-address", "log", @@ -3424,18 +3522,17 @@ dependencies = [ [[package]] name = "tower-http" -version = "0.4.4" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61c5bb1d698276a2443e5ecfabc1008bf15a36c12e6a7176e7bf089ea9131140" +checksum = "09e12e6351354851911bdf8c2b8f2ab15050c567d70a8b9a37ae7b8301a4080d" dependencies = [ "async-compression", "bitflags 2.4.1", "bytes", - "futures-core", "futures-util", - "http", - "http-body", - "http-range-header", + "http 1.0.0", + "http-body 1.0.0", + "http-body-util", "pin-project-lite", "tokio", "tokio-util", diff --git a/Cargo.toml b/Cargo.toml index f2dd1fe9..64f913e4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -32,16 +32,16 @@ version = "3.0.0-alpha.12-develop" [dependencies] aquatic_udp_protocol = "0" async-trait = "0" -axum = { version = "0.6", features = ["macros"] } -axum-client-ip = "0.4" -axum-server = { version = "0.5", features = ["tls-rustls"] } +axum = { version = "0", features = ["macros"] } +axum-client-ip = "0" +axum-server = { version = "0", features = ["tls-rustls"] } binascii = "0" chrono = { version = "0", default-features = false, features = ["clock"] } config = "0" derive_more = "0" fern = "0" futures = "0" -hyper = "0" +hyper = "1" lazy_static = "1" log = { version = "0", features = ["release_max_level_info"] } multimap = "0" @@ -64,7 +64,7 @@ torrust-tracker-configuration = { version = "3.0.0-alpha.12-develop", path = "pa torrust-tracker-contrib-bencode = { version = "3.0.0-alpha.12-develop", path = "contrib/bencode" } torrust-tracker-located-error = { version = "3.0.0-alpha.12-develop", path = "packages/located-error" } torrust-tracker-primitives = { version = "3.0.0-alpha.12-develop", path = "packages/primitives" } -tower-http = { version = "0.4", features = ["compression-full"] } +tower-http = { version = "0", features = ["compression-full"] } uuid = { version = "1", features = ["v4"] } [dev-dependencies] diff --git a/src/servers/apis/server.rs b/src/servers/apis/server.rs index 58b60638..c42083f9 100644 --- a/src/servers/apis/server.rs +++ b/src/servers/apis/server.rs @@ -187,11 +187,19 @@ impl Launcher { { let app = router(tracker); + let handle = Handle::new(); + + let cloned_handle = handle.clone(); + + tokio::task::spawn(async move { + shutdown_signal.await; + cloned_handle.shutdown(); + }); + Box::pin(async { - axum::Server::from_tcp(tcp_listener) - .expect("Could not bind to tcp listener.") + axum_server::from_tcp(tcp_listener) + .handle(handle) .serve(app.into_make_service_with_connect_info::()) - .with_graceful_shutdown(shutdown_signal) .await .expect("Axum server crashed."); }) @@ -213,7 +221,7 @@ impl Launcher { let cloned_handle = handle.clone(); - tokio::task::spawn_local(async move { + tokio::task::spawn(async move { shutdown_signal.await; cloned_handle.shutdown(); }); @@ -237,15 +245,19 @@ impl Launcher { /// # Panics /// /// It would panic if it fails to listen to shutdown signal. -pub fn start(socket_addr: SocketAddr, tracker: Arc) -> impl Future> { +pub fn start(socket_addr: SocketAddr, tracker: Arc) -> impl Future> { let app = router(tracker); - let server = axum::Server::bind(&socket_addr).serve(app.into_make_service()); + let handle = Handle::new(); + let shutdown_handle = handle.clone(); - server.with_graceful_shutdown(async move { + tokio::spawn(async move { tokio::signal::ctrl_c().await.expect("Failed to listen to shutdown signal."); - info!("Stopping Torrust APIs server on http://{} ...", socket_addr); - }) + info!("Stopping Torrust APIs server on https://{} ...", socket_addr); + shutdown_handle.shutdown(); + }); + + axum_server::bind(socket_addr).handle(handle).serve(app.into_make_service()) } /// Starts the API server with graceful shutdown and TLS on the current thread. diff --git a/src/servers/apis/v1/middlewares/auth.rs b/src/servers/apis/v1/middlewares/auth.rs index 3e8f74d0..7749b3b3 100644 --- a/src/servers/apis/v1/middlewares/auth.rs +++ b/src/servers/apis/v1/middlewares/auth.rs @@ -40,15 +40,12 @@ pub struct QueryParams { /// Middleware for authentication using a "token" GET param. /// The token must be one of the tokens in the tracker [HTTP API configuration](torrust_tracker_configuration::HttpApi). -pub async fn auth( +pub async fn auth( State(config): State>, Query(params): Query, - request: Request, - next: Next, -) -> Response -where - B: Send, -{ + request: Request, + next: Next, +) -> Response { let Some(token) = params.token else { return AuthError::Unauthorized.into_response(); }; diff --git a/src/servers/health_check_api/server.rs b/src/servers/health_check_api/server.rs index 562772a8..d4654d61 100644 --- a/src/servers/health_check_api/server.rs +++ b/src/servers/health_check_api/server.rs @@ -7,6 +7,7 @@ use std::sync::Arc; use axum::routing::get; use axum::{Json, Router}; +use axum_server::Handle; use futures::Future; use log::info; use serde_json::json; @@ -25,23 +26,30 @@ pub fn start( socket_addr: SocketAddr, tx: Sender, config: Arc, -) -> impl Future> { +) -> impl Future> { let app = Router::new() .route("/", get(|| async { Json(json!({})) })) .route("/health_check", get(health_check_handler)) .with_state(config); - let server = axum::Server::bind(&socket_addr).serve(app.into_make_service()); + let handle = Handle::new(); + let cloned_handle = handle.clone(); - let bound_addr = server.local_addr(); + let tcp_listener = std::net::TcpListener::bind(socket_addr).expect("Could not bind tcp_listener to address."); + let bound_addr = tcp_listener + .local_addr() + .expect("Could not get local_addr from tcp_listener."); - info!("Health Check API server listening on http://{}", bound_addr); - - let running = server.with_graceful_shutdown(async move { + tokio::task::spawn(async move { tokio::signal::ctrl_c().await.expect("Failed to listen to shutdown signal."); - info!("Stopping Torrust Health Check API server o http://{} ...", socket_addr); + info!("Stopping Torrust Health Check API server o http://{} ...", bound_addr); + cloned_handle.shutdown(); }); + let running = axum_server::from_tcp(tcp_listener) + .handle(handle) + .serve(app.into_make_service_with_connect_info::()); + tx.send(ApiServerJobStarted { bound_addr }) .expect("the Health Check API server should not be dropped"); diff --git a/src/servers/http/v1/launcher.rs b/src/servers/http/v1/launcher.rs index 1ae09a5f..6b89e8ce 100644 --- a/src/servers/http/v1/launcher.rs +++ b/src/servers/http/v1/launcher.rs @@ -40,11 +40,19 @@ impl Launcher { { let app = router(tracker); + let handle = Handle::new(); + + let cloned_handle = handle.clone(); + + tokio::task::spawn(async move { + shutdown_signal.await; + cloned_handle.shutdown(); + }); + Box::pin(async { - axum::Server::from_tcp(tcp_listener) - .expect("Could not bind to tcp listener.") - .serve(app.into_make_service_with_connect_info::()) - .with_graceful_shutdown(shutdown_signal) + axum_server::from_tcp(tcp_listener) + .handle(handle) + .serve(app.into_make_service_with_connect_info::()) .await .expect("Axum server crashed."); }) @@ -73,7 +81,7 @@ impl Launcher { let cloned_handle = handle.clone(); - tokio::task::spawn_local(async move { + tokio::task::spawn(async move { shutdown_signal.await; cloned_handle.shutdown(); }); @@ -135,15 +143,22 @@ impl HttpServerLauncher for Launcher { /// # Panics /// /// Panics if the server could not listen to shutdown (ctrl+c) signal. -pub fn start(socket_addr: std::net::SocketAddr, tracker: Arc) -> impl Future> { +pub fn start(socket_addr: std::net::SocketAddr, tracker: Arc) -> impl Future> { let app = router(tracker); - let server = axum::Server::bind(&socket_addr).serve(app.into_make_service_with_connect_info::()); + let handle = Handle::new(); + + let cloned_handle = handle.clone(); - server.with_graceful_shutdown(async move { + tokio::task::spawn(async move { tokio::signal::ctrl_c().await.expect("Failed to listen to shutdown signal."); - info!("Stopping Torrust HTTP tracker server on http://{} ...", socket_addr); - }) + info!("Stopping Torrust Health Check API server o http://{} ...", socket_addr); + cloned_handle.shutdown(); + }); + + axum_server::bind(socket_addr) + .handle(handle) + .serve(app.into_make_service_with_connect_info::()) } /// Starts a new HTTPS server instance.