depolymerization

wire gateway for Bitcoin/Ethereum
Log | Files | Refs | Submodules | README | LICENSE

commit f88ea25dbe25a0192fb3029e36f6b2eac763c389
parent 5579e64e79ccfc38105ce302704267e3d899fd52
Author: Antoine A <>
Date:   Mon,  2 Dec 2024 12:08:38 +0100

Support unix domain socket and listenfd

Diffstat:
MCargo.lock | 214+++++++++++++++++++++++++++++++++++++++++++++++++------------------------------
Mtaler-api/Cargo.toml | 4+---
Mtaler-api/src/lib.rs | 69++++++++++++++++++++++++++-------------------------------------------
Mtest-utils/Cargo.toml | 2+-
Mwire-gateway/Cargo.toml | 2+-
Mwire-gateway/src/main.rs | 39+++++++++++----------------------------
6 files changed, 172 insertions(+), 158 deletions(-)

diff --git a/Cargo.lock b/Cargo.lock @@ -40,9 +40,9 @@ dependencies = [ [[package]] name = "allocator-api2" -version = "0.2.20" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45862d1c77f2228b9e10bc609d5bc203d86ebc9b87ad8d5d5167a6c9abf739d9" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "android-tzdata" @@ -138,7 +138,7 @@ checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] @@ -169,7 +169,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "edca88bc138befd0323b20752846e6587272d3b03b0343c8ea28a6f819e6e71f" dependencies = [ "async-trait", - "axum-core", + "axum-core 0.4.5", "bytes", "futures-util", "http 1.1.0", @@ -178,7 +178,39 @@ dependencies = [ "hyper", "hyper-util", "itoa", - "matchit", + "matchit 0.7.3", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite", + "rustversion", + "serde", + "serde_json", + "serde_path_to_error", + "serde_urlencoded", + "sync_wrapper 1.0.2", + "tokio", + "tower", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "axum" +version = "0.8.0-alpha.1" +source = "git+https://github.com/tokio-rs/axum#9fab45af46bc8bc7ca79566e45a14f86ed03305e" +dependencies = [ + "axum-core 0.5.0-alpha.1", + "bytes", + "futures-util", + "http 1.1.0", + "http-body", + "http-body-util", + "hyper", + "hyper-util", + "itoa", + "matchit 0.8.4", "memchr", "mime", "percent-encoding", @@ -218,6 +250,25 @@ dependencies = [ ] [[package]] +name = "axum-core" +version = "0.5.0-alpha.1" +source = "git+https://github.com/tokio-rs/axum#9fab45af46bc8bc7ca79566e45a14f86ed03305e" +dependencies = [ + "bytes", + "futures-util", + "http 1.1.0", + "http-body", + "http-body-util", + "mime", + "pin-project-lite", + "rustversion", + "sync_wrapper 1.0.2", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] name = "axum-test" version = "16.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -226,7 +277,7 @@ dependencies = [ "anyhow", "assert-json-diff", "auto-future", - "axum", + "axum 0.7.9", "bytes", "bytesize", "cookie", @@ -378,9 +429,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.8.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ac0150caa2ae65ca5bd83f25c7de183dea78d4d366469f148435e2acfbad0da" +checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" [[package]] name = "bytesize" @@ -396,9 +447,9 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd9de9f2205d5ef3fd67e685b0df337994ddd4495e2a28d185500d0e1edfea47" +checksum = "f34d93e62b03caf570cccc334cbc6c2fceca82f39211051345108adcba3eebdc" dependencies = [ "shlex", ] @@ -480,7 +531,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] @@ -561,9 +612,9 @@ dependencies = [ [[package]] name = "const-hex" -version = "1.13.2" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "487981fa1af147182687064d0a2c336586d337a606595ced9ffb0c685c250c73" +checksum = "4b0485bab839b018a8f1723fc5391819fea5f8f0f32288ef8a735fd096b6160c" dependencies = [ "cfg-if", "cpufeatures", @@ -775,7 +826,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] @@ -786,7 +837,7 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core", "quote", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] @@ -856,7 +907,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] @@ -907,12 +958,12 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -1108,7 +1159,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] @@ -1216,12 +1267,6 @@ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hermit-abi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" - -[[package]] -name = "hermit-abi" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" @@ -1505,7 +1550,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] @@ -1557,9 +1602,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.6.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" +checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" dependencies = [ "equivalent", "hashbrown 0.15.2", @@ -1610,7 +1655,7 @@ version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "261f68e344040fbd0edea105bef17c66edf46f984ddb1115b775ce31be948f4b" dependencies = [ - "hermit-abi 0.4.0", + "hermit-abi", "libc", "windows-sys 0.52.0", ] @@ -1638,10 +1683,11 @@ checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" [[package]] name = "js-sys" -version = "0.3.72" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9" +checksum = "a865e038f7f6ed956f788f0d7d60c541fff74c7bd74272c5d4cf15c63743e705" dependencies = [ + "once_cell", "wasm-bindgen", ] @@ -1656,9 +1702,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.166" +version = "0.2.167" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2ccc108bbc0b1331bd061864e7cd823c0cab660bbe6970e66e2c0614decde36" +checksum = "09d6582e104315a817dff97f75133544b2e094ee22447d2acf4a74e189ba06fc" [[package]] name = "libdeflate-sys" @@ -1750,6 +1796,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" [[package]] +name = "matchit" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3" + +[[package]] name = "md-5" version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1798,11 +1850,10 @@ dependencies = [ [[package]] name = "mio" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" +checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" dependencies = [ - "hermit-abi 0.3.9", "libc", "wasi", "windows-sys 0.52.0", @@ -2423,9 +2474,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.18" +version = "0.23.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c9cc1d47e243d655ace55ed38201c19ae02c148ae56412ab8750e8f0166ab7f" +checksum = "934b404430bb06b3fae2cba809eb45a1ab1aecd64491213d7c3301b88393f8d1" dependencies = [ "log", "once_cell", @@ -2526,7 +2577,7 @@ checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] @@ -2559,7 +2610,7 @@ checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] @@ -2584,7 +2635,7 @@ dependencies = [ "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.6.0", + "indexmap 2.7.0", "serde", "serde_derive", "serde_json", @@ -2601,7 +2652,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] @@ -2692,9 +2743,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.5.7" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" dependencies = [ "libc", "windows-sys 0.52.0", @@ -2763,7 +2814,7 @@ dependencies = [ "hashbrown 0.14.5", "hashlink", "hex", - "indexmap 2.6.0", + "indexmap 2.7.0", "log", "memchr", "once_cell", @@ -2795,7 +2846,7 @@ dependencies = [ "quote", "sqlx-core", "sqlx-macros-core", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] @@ -2818,7 +2869,7 @@ dependencies = [ "sqlx-mysql", "sqlx-postgres", "sqlx-sqlite", - "syn 2.0.89", + "syn 2.0.90", "tempfile", "tokio", "url", @@ -2978,9 +3029,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.89" +version = "2.0.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d46482f1c1c87acd84dea20c1bf5ebff4c757009ed6bf19cfd36fb10e92c4e" +checksum = "919d3b74a5dd0ccd15aeb8f93e7006bd9e14c295087c9896a110f490752bcf31" dependencies = [ "proc-macro2", "quote", @@ -3007,18 +3058,17 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] name = "taler-api" version = "0.1.0" dependencies = [ - "axum", + "axum 0.8.0-alpha.1", "dashmap", "http-body-util", "libdeflater", - "listenfd", "serde", "serde_json", "sqlx", @@ -3072,7 +3122,7 @@ dependencies = [ name = "test-utils" version = "0.1.0" dependencies = [ - "axum", + "axum 0.8.0-alpha.1", "axum-test", "serde", "serde_json", @@ -3106,7 +3156,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] @@ -3117,7 +3167,7 @@ checksum = "f077553d607adc1caf65430528a576c757a71ed73944b66ebb58ef2bbd243568" dependencies = [ "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] @@ -3236,7 +3286,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] @@ -3319,9 +3369,9 @@ checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.40" +version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ "log", "pin-project-lite", @@ -3337,7 +3387,7 @@ checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] @@ -3363,9 +3413,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.18" +version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" dependencies = [ "matchers", "nu-ansi-term", @@ -3397,7 +3447,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04659ddb06c87d233c566112c1c9c5b9e98256d9af50ec3bc9c8327f873a7568" dependencies = [ "quote", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] @@ -3612,9 +3662,9 @@ checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" [[package]] name = "wasm-bindgen" -version = "0.2.95" +version = "0.2.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e" +checksum = "d15e63b4482863c109d70a7b8706c1e364eb6ea449b201a76c5b89cedcec2d5c" dependencies = [ "cfg-if", "once_cell", @@ -3623,24 +3673,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.95" +version = "0.2.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358" +checksum = "8d36ef12e3aaca16ddd3f67922bc63e48e953f126de60bd33ccc0101ef9998cd" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.90", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.95" +version = "0.2.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56" +checksum = "705440e08b42d3e4b36de7d66c944be628d579796b8090bfa3471478a2260051" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3648,28 +3698,28 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.95" +version = "0.2.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" +checksum = "98c9ae5a76e46f4deecd0f0255cc223cfa18dc9b261213b8aa0c7b36f61b3f1d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.90", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.95" +version = "0.2.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d" +checksum = "6ee99da9c5ba11bd675621338ef6fa52296b76b83305e9b6e5c77d4c286d6d49" [[package]] name = "web-sys" -version = "0.3.72" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6488b90108c040df0fe62fa815cbdee25124641df01814dd7282749234c6112" +checksum = "a98bc3c33f0fe7e59ad7cd041b89034fa82a7c2d4365ca538dda6cdaf513863c" dependencies = [ "js-sys", "wasm-bindgen", @@ -3897,7 +3947,7 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" name = "wire-gateway" version = "0.1.0" dependencies = [ - "axum", + "axum 0.8.0-alpha.1", "bitcoin", "clap", "clap_lex", @@ -3950,7 +4000,7 @@ checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" dependencies = [ "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.90", "synstructure", ] @@ -3972,7 +4022,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] @@ -3992,7 +4042,7 @@ checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" dependencies = [ "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.90", "synstructure", ] @@ -4021,5 +4071,5 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.90", ] diff --git a/taler-api/Cargo.toml b/taler-api/Cargo.toml @@ -7,9 +7,7 @@ edition = "2021" # Async tokio = { version = "1.40", features = ["rt-multi-thread", "macros", "signal"] } # HTTP API -axum = "0.7.9" -# Socket activation -listenfd = "1.0.0" +axum = { git = "https://github.com/tokio-rs/axum" } url = { version = "2.2", features = ["serde"] } taler-common = { path = "../taler-common" } tracing = "0.1" diff --git a/taler-api/src/lib.rs b/taler-api/src/lib.rs @@ -1,5 +1,4 @@ use std::{ - net::SocketAddr, sync::{ atomic::{AtomicU32, Ordering}, Arc, @@ -9,7 +8,6 @@ use std::{ use auth::{auth_middleware, AuthMethod}; use axum::{ - async_trait, body::Bytes, extract::{FromRequest, Path, Query, Request, State}, http::{header, StatusCode}, @@ -22,7 +20,6 @@ use constants::{MAX_BODY_LENGTH, MAX_PAGE_SIZE, MAX_TIMEOUT_MS, WIRE_GATEWAY_API use db::notification_listener; use error::{failure, failure_code, ApiError, ApiResult}; use http_body_util::BodyExt; -use listenfd::ListenFd; use serde::de::DeserializeOwned; use sqlx::PgPool; use taler_common::{ @@ -34,7 +31,11 @@ use taler_common::{ }, error_code::ErrorCode, }; -use tokio::{net::TcpListener, signal, sync::watch::Sender}; +use tokio::{ + net::{TcpListener, UnixListener}, + signal, + sync::watch::Sender, +}; use tracing::info; use url::Url; @@ -48,7 +49,6 @@ mod notification; #[must_use] pub struct Req<T>(pub T); -#[async_trait] impl<T, S> FromRequest<S> for Req<T> where T: DeserializeOwned, @@ -220,8 +220,13 @@ pub fn standard_layer(router: Router, auth: AuthMethod) -> Router { )) } +pub enum Listener { + Tcp(TcpListener), + Unix(UnixListener), +} + pub async fn server( - tcp_listener: TcpListener, + listener: Listener, mut router: Router, auth: AuthMethod, lifetime_counter: Option<AtomicU32>, @@ -236,14 +241,20 @@ pub async fn server( lifetime_middleware, )) } - let router = standard_layer(router, auth); - - axum::serve( - tcp_listener, - router.layer(middleware::from_fn(logger_middleware)), - ) - .with_graceful_shutdown(shutdown_signal(notify)) - .await + let router = standard_layer(router, auth).layer(middleware::from_fn(logger_middleware)); + + match listener { + Listener::Tcp(tcp_listener) => { + axum::serve(tcp_listener, router) + .with_graceful_shutdown(shutdown_signal(notify)) + .await + } + Listener::Unix(unix_listener) => { + axum::serve(unix_listener, router) + .with_graceful_shutdown(shutdown_signal(notify)) + .await + } + } } struct LifetimeMiddlewareState { @@ -356,7 +367,7 @@ pub fn wire_gateway_api<I: WireGatewayImpl + 'static>(wg: Arc<I>) -> Router { ), ) .route( - "/transfers/:id", + "/transfers/{id}", get( |State(state): State<Arc<I>>, Path(id): Path<u64>| async move { match state.transfer_by_id(id).await? { @@ -554,31 +565,3 @@ pub async fn sample_wire_gateway_api(pool: Option<PgPool>, currency: String) -> )); wire_gateway_api(Arc::new(wg)) } - -struct ApiConfig { - pool: PgPool, - currency: String, - listener: SocketAddr, -} - -async fn serve(cfg: ApiConfig) { - let mut listenfd = ListenFd::from_env(); - - let listener = if let Some(listener) = listenfd.take_tcp_listener(0).unwrap() { - info!( - "Server listening on activated tcp socket {}", - listener.local_addr().unwrap() - ); - tokio::net::TcpListener::from_std(listener) - } else { - info!("Server listening on http://{}", &cfg.listener); - tokio::net::TcpListener::bind(cfg.listener).await - } - .expect("Failed to open socket"); - axum::serve( - listener, - sample_wire_gateway_api(Some(cfg.pool), cfg.currency).await, - ) - .await - .unwrap() -} diff --git a/test-utils/Cargo.toml b/test-utils/Cargo.toml @@ -8,5 +8,5 @@ axum-test = "16.2" serde_json = "1.0" taler-common = { path = "../taler-common" } serde = { version = "1.0" } -axum = "0.7.7" +axum = { git = "https://github.com/tokio-rs/axum" } tokio = { version = "1.41.0", features = ["macros"] } diff --git a/wire-gateway/Cargo.toml b/wire-gateway/Cargo.toml @@ -6,7 +6,7 @@ license = "AGPL-3.0-or-later" rust-version = "1.72.1" [dependencies] -axum = { version = "0.7.7" } +axum = { git = "https://github.com/tokio-rs/axum" } taler-api = { path = "../taler-api" } taler-common = { path = "../taler-common" } # Async runtime diff --git a/wire-gateway/src/main.rs b/wire-gateway/src/main.rs @@ -23,7 +23,10 @@ use clap::Parser; use common::{ config::{AuthMethod, TalerConfig}, currency::Currency, - log::log::{error, info}, + log::{ + fail, + log::{error, info}, + }, url::Url, }; use listenfd::ListenFd; @@ -42,7 +45,7 @@ use std::{ use taler_api::{ db::{query_helper::SqlQueryHelper, type_helper::SqlTypeHelper}, error::{failure, failure_status, ApiResult}, - wire_gateway_api, WireGatewayImpl, + wire_gateway_api, Listener, WireGatewayImpl, }; use taler_common::{ api_common::Timestamp, @@ -266,48 +269,28 @@ async fn main() { let mut listenfd = ListenFd::from_env(); - if let Some(listener) = listenfd.take_tcp_listener(0).unwrap() { + let listener = if let Some(listener) = listenfd.take_tcp_listener(0).unwrap() { info!( "Server listening on activated socket {}", listener.local_addr().unwrap() ); - - taler_api::server( - tokio::net::TcpListener::from_std(listener).unwrap(), - router, - auth, - lifetime, - ) - .await - .unwrap(); + Listener::Tcp(tokio::net::TcpListener::from_std(listener).unwrap()) } else if let Some(path) = taler_config.unix_path() { - /*use hyperlocal::UnixServerExt; info!("Server listening on unix domain socket {:?}", path); if let Err(err) = std::fs::remove_file(&path) { if err.kind() != std::io::ErrorKind::NotFound { fail(format_args!("{}", err)); } } - let server = Server::bind_unix(path) - .unwrap() - .serve(make_service_unix) - .with_graceful_shutdown(state.shutdown_signal()); - if let Err(e) = server.await { - error!("server: {}", e); - }*/ - todo!() + Listener::Unix(tokio::net::UnixListener::bind(path).unwrap()) } else { let addr: SocketAddr = ([0, 0, 0, 0], taler_config.port()).into(); info!("Server listening on http://{}", &addr); - taler_api::server( - tokio::net::TcpListener::bind(addr).await.unwrap(), - router, - auth, - lifetime, - ) + Listener::Tcp(tokio::net::TcpListener::bind(addr).await.unwrap()) + }; + taler_api::server(listener, router, auth, lifetime) .await .unwrap(); - }; info!("wire-gateway stopped"); }