From bdcaa6047441d6a7652a1929b27909c16eb86ba6 Mon Sep 17 00:00:00 2001 From: Sebastian Martinez Date: Thu, 14 Dec 2023 15:50:47 +0100 Subject: [PATCH] httpd: Update axum and hyper dependency --- Cargo.lock | 237 ++++++++++++++++++----------- radicle-httpd/Cargo.toml | 10 +- radicle-httpd/src/lib.rs | 12 +- radicle-httpd/src/test.rs | 4 +- radicle-httpd/src/tracing_extra.rs | 4 +- 5 files changed, 162 insertions(+), 105 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0e76f03e..57076f80 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -203,9 +203,9 @@ checksum = "d92bec98840b8f03a5ff5413de5293bfcd8bf96467cf5452609f939ec6f5de16" [[package]] name = "async-trait" -version = "0.1.71" +version = "0.1.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a564d521dd56509c4c47480d00b80ee55f7e385ae48db5744c67ad50c92d2ebf" +checksum = "a66537f1bb974b254c98ed142ff995236e81b9d0fe4db0575f46612cb15eb0f9" dependencies = [ "proc-macro2", "quote", @@ -220,19 +220,19 @@ 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", - "bitflags 1.3.2", "bytes", "futures-util", - "headers", - "http", - "http-body", - "hyper", + "http 1.0.0", + "http-body 1.0.0", + "http-body-util", + "hyper 1.0.1", + "hyper-util", "itoa", "matchit", "memchr", @@ -253,29 +253,32 @@ dependencies = [ [[package]] name = "axum-auth" -version = "0.4.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "620b37645b77baab8160f93421568d7b3dd25da0a160fab38eb1c4ef611f6d98" +checksum = "8169113a185f54f68614fcfc3581df585d30bf8542bcb99496990e1025e4120a" dependencies = [ "async-trait", "axum-core", - "base64 0.13.1", - "http", + "base64 0.21.3", + "http 1.0.0", ] [[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", ] @@ -288,9 +291,9 @@ checksum = "447f28c85900215cc1bea282f32d4a2f22d55c5a300afdfbc661c8d6a632e063" dependencies = [ "bytes", "futures-util", - "http", - "http-body", - "hyper", + "http 0.2.11", + "http-body 0.4.6", + "hyper 0.14.27", "tokio", "tower-service", ] @@ -1384,17 +1387,36 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.20" +version = "0.3.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97ec8491ebaf99c8eaa73058b045fe58073cd6be7f596ac993ced0b0a0c01049" +checksum = "4d6250322ef6e60f93f9a2162799302cd6f68f79f6e5d85c8c16f14d1d958178" dependencies = [ "bytes", "fnv", "futures-core", "futures-sink", "futures-util", - "http", - "indexmap 1.9.3", + "http 0.2.11", + "indexmap 2.0.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.0.0", "slab", "tokio", "tokio-util", @@ -1417,31 +1439,6 @@ dependencies = [ "allocator-api2", ] -[[package]] -name = "headers" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3e372db8e5c0d213e0cd0b9be18be2aca3d44cf2fe30a9d46a65581cd454584" -dependencies = [ - "base64 0.13.1", - "bitflags 1.3.2", - "bytes", - "headers-core", - "http", - "httpdate", - "mime", - "sha1", -] - -[[package]] -name = "headers-core" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7f66481bfee273957b1f20485a4ff3362987f85b2c236580d81b4eb7a326429" -dependencies = [ - "http", -] - [[package]] name = "hermit-abi" version = "0.3.2" @@ -1468,9 +1465,20 @@ dependencies = [ [[package]] name = "http" -version = "0.2.9" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" +checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b32afd38673a8016f7c9ae69e5af41a58f81b1d31689040f2f1959594ce194ea" dependencies = [ "bytes", "fnv", @@ -1479,20 +1487,37 @@ dependencies = [ [[package]] name = "http-body" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" dependencies = [ "bytes", - "http", + "http 0.2.11", "pin-project-lite", ] [[package]] -name = "http-range-header" -version = "0.3.0" +name = "http-body" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bfe8eed0a9285ef776bb792479ea3834e8b94e13d615c2f66d03dd50a435a29" +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 = "41cb79eb393015dadd30fc252023adb0b2400a0caee0fa2a077e6e21a551e840" +dependencies = [ + "bytes", + "futures-util", + "http 1.0.0", + "http-body 1.0.0", + "pin-project-lite", +] [[package]] name = "httparse" @@ -1516,20 +1541,60 @@ 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", "pin-project-lite", - "socket2 0.4.9", + "socket2 0.4.10", "tokio", "tower-service", "tracing", "want", ] +[[package]] +name = "hyper" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "403f9214f3e703236b221f1a9cd88ec8b4adfa5296de01ab96216361f4692f56" +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", + "want", +] + +[[package]] +name = "hyper-util" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ca339002caeb0d159cc6e023dff48e199f081e42fa039895c7c6f38b37f2e9d" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http 1.0.0", + "http-body 1.0.0", + "hyper 1.0.1", + "pin-project-lite", + "socket2 0.5.5", + "tokio", + "tower", + "tower-service", + "tracing", +] + [[package]] name = "iana-time-zone" version = "0.1.57" @@ -1821,9 +1886,9 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.8" +version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" +checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" dependencies = [ "libc", "wasi", @@ -1852,7 +1917,7 @@ dependencies = [ "io-reactor", "libc", "rand", - "socket2 0.5.3", + "socket2 0.5.5", ] [[package]] @@ -2478,7 +2543,7 @@ dependencies = [ "chrono", "fastrand", "flate2", - "hyper", + "hyper 1.0.1", "lexopt", "lru", "nonempty 0.8.1", @@ -2891,17 +2956,6 @@ dependencies = [ "yaml-rust", ] -[[package]] -name = "sha1" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - [[package]] name = "sha1_smol" version = "1.0.0" @@ -3011,9 +3065,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" +checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" dependencies = [ "libc", "winapi", @@ -3021,9 +3075,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.5.3" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2538b18701741680e0322a2302176d3253a35388e2e62f172f64f4f16605f877" +checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" dependencies = [ "libc", "windows-sys", @@ -3298,9 +3352,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.33.0" +version = "1.35.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f38200e3ef7995e5ef13baec2f432a6da0aa9ac495b2c0e8f3b7eec2c92d653" +checksum = "841d45b238a16291a4e1584e61820b8ae57d696cc5015c459c229ccc6990cc1c" dependencies = [ "backtrace", "bytes", @@ -3308,16 +3362,16 @@ dependencies = [ "mio", "num_cpus", "pin-project-lite", - "socket2 0.5.3", + "socket2 0.5.5", "tokio-macros", "windows-sys", ] [[package]] name = "tokio-macros" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" +checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" dependencies = [ "proc-macro2", "quote", @@ -3356,17 +3410,16 @@ dependencies = [ [[package]] name = "tower-http" -version = "0.3.5" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f873044bf02dd1e8239e9c1293ea39dad76dc594ec16185d0a1bf31d8dc8d858" +checksum = "09e12e6351354851911bdf8c2b8f2ab15050c567d70a8b9a37ae7b8301a4080d" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.4.0", "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", "tower-layer", "tower-service", diff --git a/radicle-httpd/Cargo.toml b/radicle-httpd/Cargo.toml index 2c50bfb5..93825e6c 100644 --- a/radicle-httpd/Cargo.toml +++ b/radicle-httpd/Cargo.toml @@ -16,14 +16,14 @@ logfmt = [ [dependencies] anyhow = { version = "1" } -axum = { version = "0.6.7", default-features = false, features = ["headers", "json", "query", "tokio"] } -axum-auth = { version= "0.4.0", default-features = false, features = ["auth-bearer"] } +axum = { version = "0.7.2", default-features = false, features = ["json", "query", "tokio", "http1"] } +axum-auth = { version= "0.7.0", default-features = false, features = ["auth-bearer"] } axum-server = { version = "0.5.1", default-features = false } base64 = "0.21.3" chrono = { version = "0.4.22", default-features = false, features = ["clock"] } fastrand = { version = "2.0.0" } flate2 = { version = "1" } -hyper = { version = "0.14.17", default-features = false } +hyper = { version = "1.0.1", default-features = false } lexopt = { version = "0.2.1" } lru = { version = "0.11.0" } nonempty = { version = "0.8.1", features = ["serialize"] } @@ -33,7 +33,7 @@ serde_json = { version = "1", features = ["preserve_order"] } thiserror = { version = "1" } time = { version = "0.3.17", features = ["parsing", "serde"] } tokio = { version = "1.21", default-features = false, features = ["macros", "rt-multi-thread"] } -tower-http = { version = "0.3.4", default-features = false, features = ["trace", "cors", "set-header"] } +tower-http = { version = "0.5", default-features = false, features = ["trace", "cors", "set-header"] } tracing = { version = "0.1.37", default-features = false, features = ["std", "log"] } tracing-logfmt = { version = "0.2", optional = true } tracing-subscriber = { version = "0.3", default-features = false, features = ["std", "ansi", "fmt"] } @@ -50,7 +50,7 @@ path = "../radicle-term" path = "../radicle-cli" [dev-dependencies] -hyper = { version = "0.14.17", default-features = false, features = ["client"] } +hyper = { version = "1.0.1", default-features = false, features = ["client"] } pretty_assertions = { version = "1.3.0" } radicle-cli = { path = "../radicle-cli" } radicle-crypto = { path = "../radicle-crypto", features = ["test"] } diff --git a/radicle-httpd/src/lib.rs b/radicle-httpd/src/lib.rs index 4fae7f24..61822bc0 100644 --- a/radicle-httpd/src/lib.rs +++ b/radicle-httpd/src/lib.rs @@ -13,10 +13,11 @@ use std::sync::Arc; use std::time::Duration; use anyhow::Context as _; -use axum::body::{Body, BoxBody, HttpBody}; +use axum::body::{Body, HttpBody}; use axum::http::{Request, Response}; use axum::middleware; use axum::Router; +use tokio::net::TcpListener; use tower_http::trace::TraceLayer; use tracing::Span; @@ -54,9 +55,9 @@ pub async fn run(options: Options) -> anyhow::Result<()> { tracing::info!("{}", str::from_utf8(&git_version)?.trim()); - let listen = options.listen; + let listener = TcpListener::bind(options.listen).await?; - tracing::info!("listening on http://{}", listen); + tracing::info!("listening on http://{}", options.listen); let profile = Profile::load()?; let request_id = RequestId::new(); @@ -72,7 +73,7 @@ pub async fn run(options: Options) -> anyhow::Result<()> { tracing::info_span!("request", id = %request_id.clone().next()) }) .on_response( - |response: &Response, latency: Duration, _span: &Span| { + |response: &Response, latency: Duration, _span: &Span| { if let Some(info) = response.extensions().get::() { tracing::info!( "{} \"{} {} {:?}\" {} {:?} {}", @@ -100,8 +101,7 @@ pub async fn run(options: Options) -> anyhow::Result<()> { ) .into_make_service_with_connect_info::(); - axum::Server::bind(&listen) - .serve(app) + axum::serve(listener, app) .await .map_err(anyhow::Error::from) } diff --git a/radicle-httpd/src/test.rs b/radicle-httpd/src/test.rs index c227af01..744baf98 100644 --- a/radicle-httpd/src/test.rs +++ b/radicle-httpd/src/test.rs @@ -381,6 +381,8 @@ impl Response { } pub async fn body(self) -> Bytes { - hyper::body::to_bytes(self.0.into_body()).await.unwrap() + axum::body::to_bytes(self.0.into_body(), usize::MAX) + .await + .unwrap() } } diff --git a/radicle-httpd/src/tracing_extra.rs b/radicle-httpd/src/tracing_extra.rs index 91cecae5..bb61321f 100644 --- a/radicle-httpd/src/tracing_extra.rs +++ b/radicle-httpd/src/tracing_extra.rs @@ -3,6 +3,7 @@ use std::net::SocketAddr; use std::sync::atomic::{AtomicU64, Ordering}; use std::sync::Arc; +use axum::body::Body; use axum::extract::ConnectInfo; use axum::http::Request; use axum::middleware::Next; @@ -25,6 +26,7 @@ impl RequestId { } } +#[derive(Clone)] pub struct TracingInfo { pub connect_info: ConnectInfo, pub method: Method, @@ -45,7 +47,7 @@ impl fmt::Display for ColoredStatus { } } -pub async fn tracing_middleware(request: Request, next: Next) -> impl IntoResponse { +pub async fn tracing_middleware(request: Request, next: Next) -> impl IntoResponse { let connect_info = *request .extensions() .get::>()