diff --git a/Cargo.lock b/Cargo.lock index 79e960dde4b5b9e0d81d3c91f74b08b53500017d..56938ebdfab98ad849ac56756bf91bdc3d01300f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -416,12 +416,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" -[[package]] -name = "base64" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" - [[package]] name = "base64" version = "0.21.7" @@ -631,6 +625,12 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + [[package]] name = "chrono" version = "0.4.39" @@ -1370,7 +1370,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -1791,7 +1791,7 @@ dependencies = [ "gobject-sys", "libc", "system-deps", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -2743,6 +2743,7 @@ dependencies = [ "pin-project-lite", "smallvec", "tokio", + "want", ] [[package]] @@ -2756,7 +2757,26 @@ dependencies = [ "hyper 0.14.32", "rustls 0.21.12", "tokio", - "tokio-rustls", + "tokio-rustls 0.24.1", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" +dependencies = [ + "futures-util", + "http 1.2.0", + "hyper 1.6.0", + "hyper-util", + "rustls 0.23.23", + "rustls-native-certs 0.8.1", + "rustls-pki-types", + "tokio", + "tokio-rustls 0.26.1", + "tower-service", + "webpki-roots", ] [[package]] @@ -2766,12 +2786,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" dependencies = [ "bytes", + "futures-channel", "futures-util", "http 1.2.0", "http-body 1.0.1", "hyper 1.6.0", "pin-project-lite", + "socket2 0.5.8", "tokio", + "tower-service", + "tracing", ] [[package]] @@ -3020,7 +3044,7 @@ checksum = "e19b23d53f35ce9f56aebc7d1bb4e6ac1e9c0db7ac85c8d1760c04379edced37" dependencies = [ "hermit-abi 0.4.0", "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -3091,7 +3115,7 @@ dependencies = [ "portable-atomic", "portable-atomic-util", "serde", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -3314,14 +3338,14 @@ dependencies = [ "pbjson-types", "prost", "rand 0.9.0", - "reqwest", + "reqwest 0.11.27", "scopeguard", "serde", "serde_json", "sha2", "thiserror 1.0.69", "tokio", - "tokio-tungstenite", + "tokio-tungstenite 0.20.1", "url", ] @@ -3581,16 +3605,16 @@ dependencies = [ [[package]] name = "oauth2" -version = "4.4.2" +version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c38841cdd844847e3e7c8d29cef9dcfed8877f8f56f9071f77843ecf3baf937f" +checksum = "51e219e79014df21a225b1860a479e2dcd7cbd9130f4defd4bd0e191ea31d67d" dependencies = [ - "base64 0.13.1", + "base64 0.22.1", "chrono", "getrandom 0.2.15", - "http 0.2.12", + "http 1.2.0", "rand 0.8.5", - "reqwest", + "reqwest 0.12.12", "serde", "serde_json", "serde_path_to_error", @@ -3634,16 +3658,16 @@ checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e" [[package]] name = "openidconnect" -version = "3.5.0" +version = "4.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f47e80a9cfae4462dd29c41e987edd228971d6565553fbc14b8a11e666d91590" +checksum = "6dd50d4a5e7730e754f94d977efe61f611aadd3131f6a2b464f6e3a4167e8ef7" dependencies = [ - "base64 0.13.1", + "base64 0.21.7", "chrono", "dyn-clone", "ed25519-dalek", "hmac", - "http 0.2.12", + "http 1.2.0", "itertools 0.10.5", "log", "oauth2", @@ -3653,7 +3677,6 @@ dependencies = [ "rsa", "serde", "serde-value", - "serde_derive", "serde_json", "serde_path_to_error", "serde_plain", @@ -3725,7 +3748,7 @@ dependencies = [ "opentalk-types-signaling-recording-service", "opentalk-version", "pin-project-lite", - "reqwest", + "reqwest 0.12.12", "serde", "serde_json", "service-probe", @@ -3734,7 +3757,7 @@ dependencies = [ "tokio", "tokio-executor-trait", "tokio-reactor-trait", - "tokio-tungstenite", + "tokio-tungstenite 0.26.2", "urlencoding", ] @@ -4364,7 +4387,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22505a5c94da8e3b7c2996394d1c933236c4d743e81a410bcca4e6989fc066a4" dependencies = [ "bytes", - "heck 0.4.1", + "heck 0.5.0", "itertools 0.12.1", "log", "multimap", @@ -4400,6 +4423,58 @@ dependencies = [ "prost", ] +[[package]] +name = "quinn" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62e96808277ec6f97351a2380e6c25114bc9e67037775464979f3037c92d05ef" +dependencies = [ + "bytes", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash", + "rustls 0.23.23", + "socket2 0.5.8", + "thiserror 2.0.11", + "tokio", + "tracing", +] + +[[package]] +name = "quinn-proto" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d" +dependencies = [ + "bytes", + "getrandom 0.2.15", + "rand 0.8.5", + "ring", + "rustc-hash", + "rustls 0.23.23", + "rustls-pki-types", + "slab", + "thiserror 2.0.11", + "tinyvec", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-udp" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e46f3055866785f6b92bc6164b76be02ca8f2eb4b002c0354b28cf4c119e5944" +dependencies = [ + "cfg_aliases", + "libc", + "once_cell", + "socket2 0.5.8", + "tracing", + "windows-sys 0.59.0", +] + [[package]] name = "quote" version = "1.0.38" @@ -4572,7 +4647,7 @@ dependencies = [ "http 0.2.12", "http-body 0.4.6", "hyper 0.14.32", - "hyper-rustls", + "hyper-rustls 0.24.2", "ipnet", "js-sys", "log", @@ -4581,24 +4656,67 @@ dependencies = [ "percent-encoding", "pin-project-lite", "rustls 0.21.12", - "rustls-native-certs", + "rustls-native-certs 0.6.3", "rustls-pemfile 1.0.4", "serde", "serde_json", "serde_urlencoded", - "sync_wrapper", + "sync_wrapper 0.1.2", "system-configuration", "tokio", - "tokio-rustls", + "tokio-rustls 0.24.1", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "winreg", +] + +[[package]] +name = "reqwest" +version = "0.12.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43e734407157c3c2034e0258f5e4473ddb361b1e85f95a66690d67264d7cd1da" +dependencies = [ + "base64 0.22.1", + "bytes", + "futures-core", + "futures-util", + "http 1.2.0", + "http-body 1.0.1", + "http-body-util", + "hyper 1.6.0", + "hyper-rustls 0.27.5", + "hyper-util", + "ipnet", + "js-sys", + "log", + "mime", + "once_cell", + "percent-encoding", + "pin-project-lite", + "quinn", + "rustls 0.23.23", + "rustls-native-certs 0.8.1", + "rustls-pemfile 2.2.0", + "rustls-pki-types", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper 1.0.2", + "tokio", + "tokio-rustls 0.26.1", "tokio-util", + "tower", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", "wasm-streams", "web-sys", - "webpki-roots 0.25.4", - "winreg", + "webpki-roots", + "windows-registry", ] [[package]] @@ -4669,6 +4787,12 @@ version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" +[[package]] +name = "rustc-hash" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" + [[package]] name = "rustc_version" version = "0.4.1" @@ -4726,7 +4850,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys 0.4.15", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -4764,7 +4888,7 @@ dependencies = [ "rustls 0.23.23", "rustls-pki-types", "rustls-webpki 0.102.8", - "webpki-roots 0.26.8", + "webpki-roots", ] [[package]] @@ -4776,7 +4900,19 @@ dependencies = [ "openssl-probe", "rustls-pemfile 1.0.4", "schannel", - "security-framework", + "security-framework 2.11.1", +] + +[[package]] +name = "rustls-native-certs" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fcff2dd52b58a8d98a70243663a0d234c4e2b79235637849d15913394a247d3" +dependencies = [ + "openssl-probe", + "rustls-pki-types", + "schannel", + "security-framework 3.2.0", ] [[package]] @@ -4802,6 +4938,9 @@ name = "rustls-pki-types" version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" +dependencies = [ + "web-time", +] [[package]] name = "rustls-webpki" @@ -4923,6 +5062,19 @@ dependencies = [ "security-framework-sys", ] +[[package]] +name = "security-framework" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "271720403f46ca04f7ba6f55d438f8bd878d6b8ca0a1046e8228c4145bcbb316" +dependencies = [ + "bitflags 2.8.0", + "core-foundation 0.10.0", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + [[package]] name = "security-framework-sys" version = "2.14.0" @@ -5188,7 +5340,7 @@ version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "03c3c6b7927ffe7ecaa769ee0e3994da3b8cafc8f444578982c83ecb161af917" dependencies = [ - "heck 0.4.1", + "heck 0.5.0", "proc-macro2", "quote", "syn", @@ -5296,6 +5448,15 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" +[[package]] +name = "sync_wrapper" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] + [[package]] name = "synstructure" version = "0.13.1" @@ -5384,7 +5545,7 @@ dependencies = [ "getrandom 0.3.1", "once_cell", "rustix 0.38.44", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -5557,6 +5718,16 @@ dependencies = [ "tokio", ] +[[package]] +name = "tokio-rustls" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37" +dependencies = [ + "rustls 0.23.23", + "tokio", +] + [[package]] name = "tokio-stream" version = "0.1.17" @@ -5577,11 +5748,26 @@ dependencies = [ "futures-util", "log", "rustls 0.21.12", - "rustls-native-certs", + "rustls-native-certs 0.6.3", "tokio", - "tokio-rustls", - "tungstenite", - "webpki-roots 0.25.4", + "tokio-rustls 0.24.1", + "tungstenite 0.20.1", +] + +[[package]] +name = "tokio-tungstenite" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a9daff607c6d2bf6c16fd681ccb7eecc83e4e2cdc1ca067ffaadfca5de7f084" +dependencies = [ + "futures-util", + "log", + "rustls 0.23.23", + "rustls-pki-types", + "tokio", + "tokio-rustls 0.26.1", + "tungstenite 0.26.2", + "webpki-roots", ] [[package]] @@ -5631,6 +5817,27 @@ dependencies = [ "winnow 0.7.2", ] +[[package]] +name = "tower" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper 1.0.2", + "tokio", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + [[package]] name = "tower-service" version = "0.3.3" @@ -5698,6 +5905,25 @@ dependencies = [ "utf-8", ] +[[package]] +name = "tungstenite" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4793cb5e56680ecbb1d843515b23b6de9a75eb04b66643e256a396d43be33c13" +dependencies = [ + "bytes", + "data-encoding", + "http 1.2.0", + "httparse", + "log", + "rand 0.9.0", + "rustls 0.23.23", + "rustls-pki-types", + "sha1", + "thiserror 2.0.11", + "utf-8", +] + [[package]] name = "typenum" version = "1.17.0" @@ -5984,10 +6210,14 @@ dependencies = [ ] [[package]] -name = "webpki-roots" -version = "0.25.4" +name = "web-time" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] [[package]] name = "webpki-roots" @@ -6020,7 +6250,7 @@ checksum = "3457df230a567f12bb337d197d70abce9409485552dfe7b732c0f23207f24ebc" dependencies = [ "fs2", "regex", - "reqwest", + "reqwest 0.11.27", "scratch", "semver", "zip", @@ -6048,7 +6278,7 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "windows-sys 0.48.0", + "windows-sys 0.59.0", ] [[package]] @@ -6084,7 +6314,7 @@ checksum = "d2ed2439a290666cd67ecce2b0ffaad89c2a56b976b736e6ece670297897832d" dependencies = [ "windows-implement", "windows-interface", - "windows-result", + "windows-result 0.1.2", "windows-targets 0.52.6", ] @@ -6110,6 +6340,17 @@ dependencies = [ "syn", ] +[[package]] +name = "windows-registry" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" +dependencies = [ + "windows-result 0.2.0", + "windows-strings", + "windows-targets 0.52.6", +] + [[package]] name = "windows-result" version = "0.1.2" @@ -6119,6 +6360,25 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-result" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-strings" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" +dependencies = [ + "windows-result 0.2.0", + "windows-targets 0.52.6", +] + [[package]] name = "windows-sys" version = "0.45.0" diff --git a/Cargo.toml b/Cargo.toml index 13f5b013b9e23237a03744f58ea0a22dbcd1da15..847ac18da56ddefd657cfeed75ca7012086f7297 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -25,9 +25,9 @@ lapin = { version = "2.3", default-features = false, features = [ "rustls-webpki-roots-certs", ] } log = "0.4" -openidconnect = "3" +openidconnect = "4" pin-project-lite = "0.2" -reqwest = { version = "0.11", default-features = false, features = [ +reqwest = { version = "0.12", default-features = false, features = [ "json", "stream", "rustls-tls-native-roots", @@ -45,7 +45,7 @@ tokio = { version = "1", features = [ "fs", "signal", ] } -tt = { package = "tokio-tungstenite", version = "0.20", features = [ +tt = { package = "tokio-tungstenite", version = "0.26", features = [ "rustls-tls-webpki-roots", ] } types-common = { package = "opentalk-types-common", version = "0.31", features = [ diff --git a/deny.toml b/deny.toml index 5eb7a91650b5ecb5c9024a2b3ed5342e888f8185..5df20340e3fe0005daac8442fdc0f625d3660f4f 100644 --- a/deny.toml +++ b/deny.toml @@ -162,7 +162,6 @@ deny = [ skip = [ { name = "async-io", version = "=1.13.0" }, { name = "async-lock", version = "=2.8.0" }, - { name = "base64", version = "=0.13.1" }, { name = "base64", version = "=0.21.7" }, { name = "bitflags", version = "=1.3" }, { name = "env_logger", version = "=0.10.2" }, @@ -174,6 +173,7 @@ skip = [ { name = "heck", version = "=0.4.1" }, { name = "http-body", version = "=0.4.6" }, { name = "http", version = "=0.2.12" }, + { name = "hyper-rustls", version = "0.24.2" }, { name = "hyper", version = "0.14" }, { name = "itertools", version = "=0.10.5" }, { name = "itertools", version = "=0.11.0" }, @@ -187,14 +187,19 @@ skip = [ { name = "rand_chacha", version = "0.3" }, { name = "rand_core", version = "0.6" }, { name = "rand", version = "0.8" }, + { name = "reqwest", version = "0.11.27" }, { name = "rustix", version = "=0.37" }, + { name = "rustls-native-certs", version = "0.6.3" }, { name = "rustls-pemfile", version = "=1.0.4" }, { name = "rustls-webpki", version = "=0.101.7" }, { name = "rustls", version = "=0.21.12" }, { name = "socket2", version = "=0.4" }, + { name = "sync_wrapper", version = "0.1.2" }, { name = "thiserror-impl", version = "1" }, { name = "thiserror", version = "1" }, - { name = "webpki-roots", version = "=0.25.4" }, + { name = "tokio-rustls", version = "0.24.1" }, + { name = "tokio-tungstenite", version = "0.20.1" }, + { name = "tungstenite", version = "0.20.1" }, { name = "winnow", version = "0.6" }, { name = "zerocopy", version = "0.8" }, ] diff --git a/src/http.rs b/src/http.rs index 62a87135fa351aacb7b896b42693b60eeb75d955..749931d6c58352a6131bfbbb895cf0295d0e1b1a 100644 --- a/src/http.rs +++ b/src/http.rs @@ -4,15 +4,20 @@ //! HTTP calls made by this library (except for websockets) -use std::{ - future::Future, - pin::Pin, - time::{Duration, Instant}, -}; +use std::time::{Duration, Instant}; use anyhow::{bail, Context, Result}; use futures::{SinkExt, StreamExt}; -use openidconnect::{reqwest::Error, AccessToken, HttpRequest, HttpResponse, OAuth2TokenResponse}; +use openidconnect::{ + core::{ + CoreAuthDisplay, CoreAuthPrompt, CoreClient, CoreErrorResponseType, CoreGenderClaim, + CoreJsonWebKey, CoreJweContentEncryptionAlgorithm, CoreJwsSigningAlgorithm, + CoreProviderMetadata, CoreRevocableToken, CoreTokenType, + }, + AccessToken, EmptyAdditionalClaims, EmptyExtraTokenFields, EndpointNotSet, EndpointSet, + IdTokenFields, OAuth2TokenResponse, RevocationErrorResponseType, StandardErrorResponse, + StandardTokenIntrospectionResponse, StandardTokenResponse, +}; use reqwest::{header::HeaderValue, StatusCode}; use serde::{Deserialize, Serialize}; use tokio::sync::{broadcast, RwLock}; @@ -51,10 +56,39 @@ impl FileExtension { } } +type OidcClient = openidconnect::Client< + EmptyAdditionalClaims, + CoreAuthDisplay, + CoreGenderClaim, + CoreJweContentEncryptionAlgorithm, + CoreJsonWebKey, + CoreAuthPrompt, + StandardErrorResponse<CoreErrorResponseType>, + StandardTokenResponse< + IdTokenFields< + EmptyAdditionalClaims, + EmptyExtraTokenFields, + CoreGenderClaim, + CoreJweContentEncryptionAlgorithm, + CoreJwsSigningAlgorithm, + >, + CoreTokenType, + >, + StandardTokenIntrospectionResponse<EmptyExtraTokenFields, CoreTokenType>, + CoreRevocableToken, + StandardErrorResponse<RevocationErrorResponseType>, + EndpointSet, + EndpointNotSet, + EndpointNotSet, + EndpointNotSet, + EndpointSet, + EndpointNotSet, +>; + #[derive(Debug)] pub(crate) struct HttpClient { client: reqwest::Client, - oidc: openidconnect::core::CoreClient, + oidc: OidcClient, access_token: RwLock<AccessToken>, } @@ -63,7 +97,7 @@ impl HttpClient { #[allow(dead_code)] pub(crate) fn new( client: reqwest::Client, - oidc: openidconnect::core::CoreClient, + oidc: OidcClient, access_token: RwLock<AccessToken>, ) -> Self { Self { @@ -76,25 +110,26 @@ impl HttpClient { pub(crate) async fn discover(settings: &AuthSettings) -> Result<Self> { let client = reqwest::Client::new(); - let metadata = openidconnect::core::CoreProviderMetadata::discover_async( - settings.issuer.clone(), - async_http_client(client.clone()), - ) - .await?; + let metadata = + CoreProviderMetadata::discover_async(settings.issuer.clone(), &client).await?; - let oidc = openidconnect::core::CoreClient::new( + let oidc = CoreClient::new( settings.client_id.clone(), - Some(settings.client_secret.clone()), settings.issuer.clone(), - metadata.authorization_endpoint().clone(), - metadata.token_endpoint().cloned(), - None, metadata.jwks().clone(), + ) + .set_client_secret(settings.client_secret.clone()) + .set_auth_uri(metadata.authorization_endpoint().clone()) + .set_token_uri( + metadata + .token_endpoint() + .context("Missing token endpoint url in OIDC metadata")? + .clone(), ); let response = oidc .exchange_client_credentials() - .request_async(async_http_client(client.clone())) + .request_async(&client) .await?; Ok(Self { @@ -114,7 +149,7 @@ impl HttpClient { let response = self .oidc .exchange_client_credentials() - .request_async(async_http_client(self.client.clone())) + .request_async(&self.client) .await?; *token = response.access_token().clone(); @@ -230,7 +265,7 @@ impl HttpClient { bail!("Upload canceled, there was no websocket heartbeat within 15 seconds."); } - tx.send(tt::tungstenite::Message::Ping("heartbeat".as_bytes().to_owned())) + tx.send(tt::tungstenite::Message::Ping("heartbeat".into())) .await .context("Data could not be send to the websocket")?; } @@ -240,7 +275,7 @@ impl HttpClient { }; let part_num = u32::from_be_bytes(bytes[..4].try_into().unwrap_or_default()); - tx.send(tt::tungstenite::Message::Binary(bytes)) + tx.send(tt::tungstenite::Message::Binary(bytes.into())) .await .context("Data could not be send to the websocket")?; @@ -301,36 +336,3 @@ struct ApiError { struct StartResponse { ticket: String, } - -type BoxedHttpResponseFuture = - Box<dyn Future<Output = Result<HttpResponse, Error<reqwest::Error>>> + Send>; - -fn async_http_client( - client: reqwest::Client, -) -> impl Fn(HttpRequest) -> Pin<BoxedHttpResponseFuture> { - move |request| Box::pin(async_http_client_inner(client.clone(), request)) -} - -async fn async_http_client_inner( - client: reqwest::Client, - request: HttpRequest, -) -> Result<HttpResponse, Error<reqwest::Error>> { - let mut request_builder = client - .request(request.method, request.url.as_str()) - .body(request.body); - for (name, value) in &request.headers { - request_builder = request_builder.header(name.as_str(), value.as_bytes()); - } - let request = request_builder.build().map_err(Error::Reqwest)?; - - let response = client.execute(request).await.map_err(Error::Reqwest)?; - - let status_code = response.status(); - let headers = response.headers().clone(); - let chunks = response.bytes().await.map_err(Error::Reqwest)?; - Ok(HttpResponse { - status_code, - headers, - body: chunks.to_vec(), - }) -} diff --git a/src/signaling.rs b/src/signaling.rs index fd0a384ad4975dd95c7404a715424cd0632db851..46bb9e8cc5bab4e623004d09a5865559c25297f9 100644 --- a/src/signaling.rs +++ b/src/signaling.rs @@ -97,13 +97,16 @@ impl Signaling { .context("failed create websocket connection")?; stream - .send(Message::Text(serde_json::to_string(&serde_json::json!({ - "namespace":"control", - "payload": { - "action":"join", - "display_name": "recorder" - } - }))?)) + .send(Message::Text( + serde_json::to_string(&serde_json::json!({ + "namespace":"control", + "payload": { + "action":"join", + "display_name": "recorder" + } + }))? + .into(), + )) .await?; Ok(Self { @@ -168,7 +171,9 @@ impl Signaling { log::trace!("send signaling message {:?}", msg); self.connection .send(Message::Text( - serde_json::to_string(&msg).context("failed to serialize message")?, + serde_json::to_string(&msg) + .context("failed to serialize message")? + .into(), )) .await .context("failed to send message")