commit f88ea25dbe25a0192fb3029e36f6b2eac763c389
parent 5579e64e79ccfc38105ce302704267e3d899fd52
Author: Antoine A <>
Date: Mon, 2 Dec 2024 12:08:38 +0100
Support unix domain socket and listenfd
Diffstat:
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");
}