diff --git a/Cargo.lock b/Cargo.lock index 2c94d51..f743366 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -172,9 +172,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.87" +version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10f00e1f6e58a40e807377c75c6a7f97bf9044fab57816f2414e6f5f4499d7b8" +checksum = "86fdf8605db99b54d3cd748a44c6d04df638eb5dafb219b135d0149bd0db01f6" dependencies = [ "backtrace", ] @@ -385,6 +385,33 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +[[package]] +name = "aws-lc-rs" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f95446d919226d587817a7d21379e6eb099b97b45110a7f272a444ca5c54070" +dependencies = [ + "aws-lc-sys", + "mirai-annotations", + "paste", + "zeroize", +] + +[[package]] +name = "aws-lc-sys" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "234314bd569802ec87011d653d6815c6d7b9ffb969e9fee5b8b20ef860e8dce9" +dependencies = [ + "bindgen 0.69.4", + "cc", + "cmake", + "dunce", + "fs_extra", + "libc", + "paste", +] + [[package]] name = "axum" version = "0.6.20" @@ -396,9 +423,9 @@ dependencies = [ "bitflags 1.3.2", "bytes", "futures-util", - "http", - "http-body", - "hyper", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.30", "itoa", "matchit", "memchr", @@ -407,7 +434,7 @@ dependencies = [ "pin-project-lite", "rustversion", "serde", - "sync_wrapper", + "sync_wrapper 0.1.2", "tower", "tower-layer", "tower-service", @@ -422,8 +449,8 @@ dependencies = [ "async-trait", "bytes", "futures-util", - "http", - "http-body", + "http 0.2.12", + "http-body 0.4.6", "mime", "rustversion", "tower-layer", @@ -524,10 +551,33 @@ dependencies = [ "proc-macro2", "quote", "regex", - "rustc-hash", + "rustc-hash 1.1.0", "shlex", ] +[[package]] +name = "bindgen" +version = "0.69.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a00dc851838a2120612785d195287475a3ac45514741da670b735818822129a0" +dependencies = [ + "bitflags 2.6.0", + "cexpr", + "clang-sys", + "itertools", + "lazy_static", + "lazycell", + "log", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "rustc-hash 1.1.0", + "shlex", + "syn 2.0.77", + "which", +] + [[package]] name = "bit-vec" version = "0.6.3" @@ -618,7 +668,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26d4d6dafc1a3bb54687538972158f07b2c948bc57d5890df22c0739098b3028" dependencies = [ "borsh-derive", - "cfg_aliases", + "cfg_aliases 0.1.1", ] [[package]] @@ -628,7 +678,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bf4918709cc4dd777ad2b6303ed03cb37f3ca0ccede8c1b0d28ac6db8f4710e0" dependencies = [ "once_cell", - "proc-macro-crate 2.0.2", + "proc-macro-crate 2.0.0", "proc-macro2", "quote", "syn 2.0.77", @@ -671,9 +721,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.7.1" +version = "1.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" +checksum = "428d9aa8fbc0670b7b8d6030a7fadd0f86151cae55e4dbbece15f3780a3dfaf3" [[package]] name = "cbc" @@ -686,10 +736,12 @@ dependencies = [ [[package]] name = "cc" -version = "1.1.18" +version = "1.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b62ac837cdb5cb22e10a256099b4fc502b1dfe560cb282963a974d7abd80e476" +checksum = "45bcde016d64c21da4be18b655631e5ab6d3107607e71a73a9f53eb48aae23fb" dependencies = [ + "jobserver", + "libc", "shlex", ] @@ -714,6 +766,12 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + [[package]] name = "chacha20" version = "0.9.1" @@ -761,23 +819,6 @@ dependencies = [ "libloading", ] -[[package]] -name = "clap" -version = "3.2.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ea181bf566f71cb9a5d17a59e1871af638180a18fb0035c92ae62b705207123" -dependencies = [ - "atty", - "bitflags 1.3.2", - "clap_derive 3.2.25", - "clap_lex 0.2.4", - "indexmap 1.9.3", - "once_cell", - "strsim 0.10.0", - "termcolor", - "textwrap", -] - [[package]] name = "clap" version = "4.5.17" @@ -785,7 +826,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3e5a21b8495e732f1b3c364c9949b201ca7bae518c502c80256c96ad79eaf6ac" dependencies = [ "clap_builder", - "clap_derive 4.5.13", + "clap_derive", ] [[package]] @@ -796,21 +837,8 @@ checksum = "8cf2dd12af7a047ad9d6da2b6b249759a22a7abc0f474c1dae1777afa4b21a73" dependencies = [ "anstream", "anstyle", - "clap_lex 0.7.2", - "strsim 0.11.1", -] - -[[package]] -name = "clap_derive" -version = "3.2.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae6371b8bdc8b7d3959e9cf7b22d4435ef3e79e138688421ec654acf8c81b008" -dependencies = [ - "heck 0.4.1", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 1.0.109", + "clap_lex", + "strsim", ] [[package]] @@ -825,15 +853,6 @@ dependencies = [ "syn 2.0.77", ] -[[package]] -name = "clap_lex" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5" -dependencies = [ - "os_str_bytes", -] - [[package]] name = "clap_lex" version = "0.7.2" @@ -939,17 +958,11 @@ version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "21a53c0a4d288377e7415b53dcfc3c04da5cdc2cc95c8d5ac178b58f0b861ad6" -[[package]] -name = "convert_case" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" - [[package]] name = "cookie" -version = "0.16.2" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e859cd57d0710d9e06c381b550c06e76992472a8c6d527aecd2fc673dcc231fb" +checksum = "7efb37c3e1ccb1ff97164ad95ac1606e8ccd35b3fa0a7d99a304c7f4a428cc24" dependencies = [ "time", "version_check", @@ -957,12 +970,12 @@ dependencies = [ [[package]] name = "cookie" -version = "0.17.0" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7efb37c3e1ccb1ff97164ad95ac1606e8ccd35b3fa0a7d99a304c7f4a428cc24" +checksum = "4ddef33a339a91ea89fb53151bd0a4689cfce27055c291dfa69945475d22c747" dependencies = [ "aes-gcm", - "base64 0.21.7", + "base64 0.22.1", "hkdf", "hmac", "percent-encoding", @@ -1105,38 +1118,14 @@ dependencies = [ "syn 2.0.77", ] -[[package]] -name = "darling" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" -dependencies = [ - "darling_core 0.14.4", - "darling_macro 0.14.4", -] - [[package]] name = "darling" version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" dependencies = [ - "darling_core 0.20.10", - "darling_macro 0.20.10", -] - -[[package]] -name = "darling_core" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim 0.10.0", - "syn 1.0.109", + "darling_core", + "darling_macro", ] [[package]] @@ -1149,28 +1138,17 @@ dependencies = [ "ident_case", "proc-macro2", "quote", - "strsim 0.11.1", + "strsim", "syn 2.0.77", ] -[[package]] -name = "darling_macro" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" -dependencies = [ - "darling_core 0.14.4", - "quote", - "syn 1.0.109", -] - [[package]] name = "darling_macro" version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ - "darling_core 0.20.10", + "darling_core", "quote", "syn 2.0.77", ] @@ -1226,15 +1204,23 @@ dependencies = [ [[package]] name = "derive_more" -version = "0.99.18" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" +checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" dependencies = [ - "convert_case", "proc-macro2", "quote", - "rustc_version", "syn 2.0.77", + "unicode-xid", ] [[package]] @@ -1288,6 +1274,12 @@ version = "0.15.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" +[[package]] +name = "dunce" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" + [[package]] name = "dyn-clone" version = "1.0.17" @@ -1559,6 +1551,12 @@ dependencies = [ "syn 2.0.77", ] +[[package]] +name = "fs_extra" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" + [[package]] name = "fsevent-sys" version = "4.1.0" @@ -1767,7 +1765,26 @@ dependencies = [ "futures-core", "futures-sink", "futures-util", - "http", + "http 0.2.12", + "indexmap 2.5.0", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "h2" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524e8ac6999421f49a846c2d4411f337e53497d8ec55d67753beffa43c5d9205" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http 1.1.0", "indexmap 2.5.0", "slab", "tokio", @@ -1818,14 +1835,14 @@ dependencies = [ [[package]] name = "headers" -version = "0.3.9" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06683b93020a07e3dbcf5f8c0f6d40080d725bea7936fc01ad345c01b97dc270" +checksum = "322106e6bd0cba2d5ead589ddb8150a13d7c4217cf80d7c4f682ca994ccc6aa9" dependencies = [ "base64 0.21.7", "bytes", "headers-core", - "http", + "http 1.1.0", "httpdate", "mime", "sha1", @@ -1833,11 +1850,11 @@ dependencies = [ [[package]] name = "headers-core" -version = "0.2.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7f66481bfee273957b1f20485a4ff3362987f85b2c236580d81b4eb7a326429" +checksum = "54b4a22553d4242c49fddb9ba998a99962b5cc6f22cb5a3482bec22522403ce4" dependencies = [ - "http", + "http 1.1.0", ] [[package]] @@ -1926,6 +1943,17 @@ dependencies = [ "itoa", ] +[[package]] +name = "http" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + [[package]] name = "http-body" version = "0.4.6" @@ -1933,7 +1961,30 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" dependencies = [ "bytes", - "http", + "http 0.2.12", + "pin-project-lite", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http 1.1.0", +] + +[[package]] +name = "http-body-util" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" +dependencies = [ + "bytes", + "futures-util", + "http 1.1.0", + "http-body 1.0.1", "pin-project-lite", ] @@ -1984,9 +2035,9 @@ dependencies = [ "futures-channel", "futures-core", "futures-util", - "h2", - "http", - "http-body", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", "httparse", "httpdate", "itoa", @@ -1998,6 +2049,27 @@ dependencies = [ "want", ] +[[package]] +name = "hyper" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50dfd22e0e76d0f662d429a5f80fcaf3855009297eab6a0a9f8543834744ba05" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "h2 0.4.6", + "http 1.1.0", + "http-body 1.0.1", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + [[package]] name = "hyper-rustls" version = "0.24.2" @@ -2005,30 +2077,68 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" dependencies = [ "futures-util", - "http", - "hyper", + "http 0.2.12", + "hyper 0.14.30", "rustls 0.21.12", "tokio", "tokio-rustls 0.24.1", ] +[[package]] +name = "hyper-rustls" +version = "0.27.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08afdbb5c31130e3034af566421053ab03787c640246a446327f550d11bcb333" +dependencies = [ + "futures-util", + "http 1.1.0", + "hyper 1.4.1", + "hyper-util", + "rustls 0.23.13", + "rustls-native-certs 0.8.0", + "rustls-pki-types", + "tokio", + "tokio-rustls 0.26.0", + "tower-service", +] + [[package]] name = "hyper-timeout" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" dependencies = [ - "hyper", + "hyper 0.14.30", "pin-project-lite", "tokio", "tokio-io-timeout", ] [[package]] -name = "iana-time-zone" -version = "0.1.60" +name = "hyper-util" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +checksum = "da62f120a8a37763efb0cf8fdf264b884c7b8b9ac8660b900c8661030c00e6ba" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http 1.1.0", + "http-body 1.0.1", + "hyper 1.4.1", + "pin-project-lite", + "socket2", + "tokio", + "tower", + "tower-service", + "tracing", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -2153,6 +2263,15 @@ version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +[[package]] +name = "jobserver" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" +dependencies = [ + "libc", +] + [[package]] name = "js-sys" version = "0.3.70" @@ -2472,17 +2591,22 @@ dependencies = [ ] [[package]] -name = "multer" -version = "2.1.0" +name = "mirai-annotations" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01acbdc23469fd8fe07ab135923371d5f5a422fbf9c522158677c8eb15bc51c2" +checksum = "c9be0862c1b3f26a88803c4a49de6889c10e608b3ee9344e6ef5b45fb37ad3d1" + +[[package]] +name = "multer" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83e87776546dc87511aa5ee218730c92b666d7264ab6ed41f9d215af9cd5224b" dependencies = [ "bytes", "encoding_rs", "futures-util", - "http", + "http 1.1.0", "httparse", - "log", "memchr", "mime", "spin 0.9.8", @@ -2498,7 +2622,7 @@ checksum = "9006c95034ccf7b903d955f210469119f6c3477fc9c9e7a7845ce38a3e665c2a" dependencies = [ "base64 0.13.1", "bigdecimal", - "bindgen", + "bindgen 0.59.2", "bitflags 1.3.2", "bitvec", "byteorder", @@ -2529,12 +2653,13 @@ dependencies = [ [[package]] name = "nix" -version = "0.27.1" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" +checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" dependencies = [ "bitflags 2.6.0", "cfg-if", + "cfg_aliases 0.2.1", "libc", ] @@ -2658,9 +2783,9 @@ dependencies = [ "base64 0.13.1", "chrono", "getrandom", - "http", + "http 0.2.12", "rand", - "reqwest", + "reqwest 0.11.27", "serde", "serde_json", "serde_path_to_error", @@ -2701,7 +2826,7 @@ dependencies = [ "dyn-clone", "ed25519-dalek", "hmac", - "http", + "http 0.2.12", "itertools", "log", "oauth2", @@ -2752,12 +2877,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "os_str_bytes" -version = "6.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2355d85b9a3786f481747ced0e0ff2ba35213a1f9bd406ed906554d7af805a1" - [[package]] name = "ouroboros" version = "0.17.2" @@ -2869,9 +2988,9 @@ dependencies = [ [[package]] name = "password-hash" -version = "0.2.3" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77e0b28ace46c5a396546bcf443bf422b57049617433d8854227352a4a9b24e7" +checksum = "c1a5d4e9c205d2c1ae73b84aab6240e98218c0e72e63b50422cfb2d1ca952282" dependencies = [ "base64ct", "rand_core", @@ -3060,22 +3179,23 @@ checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" [[package]] name = "poem" -version = "1.3.59" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "504774c97b0744c1ee108a37e5a65a9745a4725c4c06277521dabc28eb53a904" +checksum = "e5419c612a492fce4961c521dca0c2249b5c48dc46eb5c8048063843f37a711d" dependencies = [ "anyhow", - "async-trait", - "base64 0.21.7", + "base64 0.22.1", "bytes", "chrono", - "cookie 0.17.0", + "cookie 0.18.1", "futures-util", "headers", "hex", - "http", + "http 1.1.0", + "http-body-util", "httpdate", - "hyper", + "hyper 1.4.1", + "hyper-util", "mime", "mime_guess", "multer", @@ -3085,24 +3205,25 @@ dependencies = [ "pin-project-lite", "poem-derive", "priority-queue", - "quick-xml 0.30.0", + "quick-xml", "rand", "regex", "rfc7239", "rust-embed", - "rustls-pemfile", + "rustls-pemfile 2.1.3", "serde", "serde_json", "serde_urlencoded", - "serde_yaml 0.9.34+deprecated", + "serde_yaml", "smallvec", + "sync_wrapper 1.0.1", "tempfile", "thiserror", "time", "tokio", - "tokio-rustls 0.24.1", + "tokio-rustls 0.25.0", "tokio-stream", - "tokio-tungstenite 0.20.1", + "tokio-tungstenite 0.23.1", "tokio-util", "tracing", "wildmatch", @@ -3110,11 +3231,11 @@ dependencies = [ [[package]] name = "poem-derive" -version = "1.3.59" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ddcf4680d8d867e1e375116203846acb088483fa2070244f90589f458bbb31" +checksum = "cdfed15c1102d2a9a51b9f1aba945628c72ccb52fc5d3e4ad4ffbbd222e11821" dependencies = [ - "proc-macro-crate 2.0.2", + "proc-macro-crate 3.2.0", "proc-macro2", "quote", "syn 2.0.77", @@ -3122,25 +3243,26 @@ dependencies = [ [[package]] name = "poem-openapi" -version = "2.0.27" +version = "5.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e26f78b6195ea1b7a16f46bda1961c598e5a66912f2aa1b8b7a2f395aebb9fc" +checksum = "14030b69ff6d0414dd0d0f8c8482cc1c53f316b4bacb1e46b9d68fa24a863aa1" dependencies = [ - "base64 0.21.7", + "base64 0.22.1", "bytes", "chrono", "derive_more", "futures-util", + "indexmap 2.5.0", "mime", "num-traits", "poem", "poem-openapi-derive", - "quick-xml 0.26.0", + "quick-xml", "regex", "serde", "serde_json", "serde_urlencoded", - "serde_yaml 0.9.34+deprecated", + "serde_yaml", "thiserror", "tokio", "uuid", @@ -3148,19 +3270,19 @@ dependencies = [ [[package]] name = "poem-openapi-derive" -version = "2.0.27" +version = "5.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88c3e2975c930dc72c024e75b230c3b6058fb3a746d5739b83aa8f28ab1a42d4" +checksum = "88e4cd0c926ab1d9a015ecc1077c950d5897577554691ff70efcd9c90ddeb614" dependencies = [ - "darling 0.14.4", - "http", - "indexmap 1.9.3", + "darling", + "http 1.1.0", + "indexmap 2.5.0", "mime", - "proc-macro-crate 1.3.1", + "proc-macro-crate 3.2.0", "proc-macro2", "quote", "regex", - "syn 1.0.109", + "syn 2.0.77", "thiserror", ] @@ -3217,6 +3339,16 @@ dependencies = [ "zerocopy", ] +[[package]] +name = "prettyplease" +version = "0.2.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "479cf940fbbb3426c32c5d5176f62ad57549a0bb84773423ba8be9d089f5faba" +dependencies = [ + "proc-macro2", + "syn 2.0.77", +] + [[package]] name = "primeorder" version = "0.13.6" @@ -3228,34 +3360,33 @@ dependencies = [ [[package]] name = "priority-queue" -version = "1.4.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0bda9164fe05bc9225752d54aae413343c36f684380005398a6a8fde95fe785" +checksum = "560bcab673ff7f6ca9e270c17bf3affd8a05e3bd9207f123b0d45076fd8197e8" dependencies = [ "autocfg", - "indexmap 1.9.3", + "equivalent", + "indexmap 2.5.0", ] [[package]] name = "proc-macro-crate" -version = "1.3.1" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +checksum = "7e8366a6159044a37876a2b9817124296703c586a5c92e2c53751fa06d8d43e8" dependencies = [ - "once_cell", - "toml_edit 0.19.15", -] - -[[package]] -name = "proc-macro-crate" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b00f26d3400549137f92511a46ac1cd8ce37cb5598a96d382381458b992a5d24" -dependencies = [ - "toml_datetime", "toml_edit 0.20.2", ] +[[package]] +name = "proc-macro-crate" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" +dependencies = [ + "toml_edit 0.22.21", +] + [[package]] name = "proc-macro-error" version = "1.0.4" @@ -3343,22 +3474,60 @@ dependencies = [ [[package]] name = "quick-xml" -version = "0.26.0" +version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f50b1c63b38611e7d4d7f68b82d3ad0cc71a2ad2e7f61fc10f1328d917c93cd" +checksum = "96a05e2e8efddfa51a84ca47cec303fac86c8541b686d37cac5efc0e094417bc" dependencies = [ "memchr", "serde", ] [[package]] -name = "quick-xml" -version = "0.30.0" +name = "quinn" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eff6510e86862b57b210fd8cbe8ed3f0d7d600b9c2863cd4549a2e033c66e956" +checksum = "8c7c5fdde3cdae7203427dc4f0a68fe0ed09833edc525a03456b153b79828684" dependencies = [ - "memchr", - "serde", + "bytes", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash 2.0.0", + "rustls 0.23.13", + "socket2", + "thiserror", + "tokio", + "tracing", +] + +[[package]] +name = "quinn-proto" +version = "0.11.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fadfaed2cd7f389d0161bb73eeb07b7b78f8691047a6f3e73caaeae55310a4a6" +dependencies = [ + "bytes", + "rand", + "ring 0.17.8", + "rustc-hash 2.0.0", + "rustls 0.23.13", + "slab", + "thiserror", + "tinyvec", + "tracing", +] + +[[package]] +name = "quinn-udp" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fe68c2e9e1a1234e218683dbdf9f9dfcb094113c5ac2b938dfcb9bab4c4140b" +dependencies = [ + "libc", + "once_cell", + "socket2", + "tracing", + "windows-sys 0.59.0", ] [[package]] @@ -3421,9 +3590,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.3" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" +checksum = "0884ad60e090bf1345b93da0a5de8923c93884cd03f40dfcfddd3b4bee661853" dependencies = [ "bitflags 2.6.0", ] @@ -3503,11 +3672,11 @@ dependencies = [ "encoding_rs", "futures-core", "futures-util", - "h2", - "http", - "http-body", - "hyper", - "hyper-rustls", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.30", + "hyper-rustls 0.24.2", "ipnet", "js-sys", "log", @@ -3516,15 +3685,57 @@ dependencies = [ "percent-encoding", "pin-project-lite", "rustls 0.21.12", - "rustls-native-certs", - "rustls-pemfile", + "rustls-pemfile 1.0.4", "serde", "serde_json", "serde_urlencoded", - "sync_wrapper", + "sync_wrapper 0.1.2", "system-configuration", "tokio", "tokio-rustls 0.24.1", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "webpki-roots", + "winreg", +] + +[[package]] +name = "reqwest" +version = "0.12.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8f4955649ef5c38cc7f9e8aa41761d48fb9677197daea9984dc54f56aad5e63" +dependencies = [ + "base64 0.22.1", + "bytes", + "futures-core", + "futures-util", + "http 1.1.0", + "http-body 1.0.1", + "http-body-util", + "hyper 1.4.1", + "hyper-rustls 0.27.3", + "hyper-util", + "ipnet", + "js-sys", + "log", + "mime", + "once_cell", + "percent-encoding", + "pin-project-lite", + "quinn", + "rustls 0.23.13", + "rustls-native-certs 0.7.3", + "rustls-pemfile 2.1.3", + "rustls-pki-types", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper 1.0.1", + "tokio", + "tokio-rustls 0.26.0", "tokio-util", "tower-service", "url", @@ -3532,8 +3743,7 @@ dependencies = [ "wasm-bindgen-futures", "wasm-streams", "web-sys", - "webpki-roots", - "winreg", + "windows-registry", ] [[package]] @@ -3801,6 +4011,12 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" +[[package]] +name = "rustc-hash" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152" + [[package]] name = "rustc_version" version = "0.4.1" @@ -3812,9 +4028,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.36" +version = "0.38.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f55e80d50763938498dd5ebb18647174e0c76dc38c5505294bb224624f30f36" +checksum = "8acb788b847c24f28525660c4d7758620a7210875711f79e7f663cc152726811" dependencies = [ "bitflags 2.6.0", "errno", @@ -3823,18 +4039,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "rustls" -version = "0.20.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b80e3dec595989ea8510028f30c408a4630db12c9cbb8de34203b89d6577e99" -dependencies = [ - "log", - "ring 0.16.20", - "sct", - "webpki", -] - [[package]] name = "rustls" version = "0.21.12" @@ -3843,10 +4047,40 @@ checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" dependencies = [ "log", "ring 0.17.8", - "rustls-webpki", + "rustls-webpki 0.101.7", "sct", ] +[[package]] +name = "rustls" +version = "0.22.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf4ef73721ac7bcd79b2b315da7779d8fc09718c6b3d2d1b2d94850eb8c18432" +dependencies = [ + "log", + "ring 0.17.8", + "rustls-pki-types", + "rustls-webpki 0.102.8", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls" +version = "0.23.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2dabaac7466917e566adb06783a81ca48944c6898a1b08b9374106dd671f4c8" +dependencies = [ + "aws-lc-rs", + "log", + "once_cell", + "ring 0.17.8", + "rustls-pki-types", + "rustls-webpki 0.102.8", + "subtle", + "zeroize", +] + [[package]] name = "rustls-native-certs" version = "0.6.3" @@ -3854,7 +4088,33 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" dependencies = [ "openssl-probe", - "rustls-pemfile", + "rustls-pemfile 1.0.4", + "schannel", + "security-framework", +] + +[[package]] +name = "rustls-native-certs" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5bfb394eeed242e909609f56089eecfe5fda225042e8b171791b9c95f5931e5" +dependencies = [ + "openssl-probe", + "rustls-pemfile 2.1.3", + "rustls-pki-types", + "schannel", + "security-framework", +] + +[[package]] +name = "rustls-native-certs" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcaf18a4f2be7326cd874a5fa579fae794320a0f388d365dca7e480e55f83f8a" +dependencies = [ + "openssl-probe", + "rustls-pemfile 2.1.3", + "rustls-pki-types", "schannel", "security-framework", ] @@ -3868,6 +4128,22 @@ dependencies = [ "base64 0.21.7", ] +[[package]] +name = "rustls-pemfile" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "196fe16b00e106300d3e45ecfcb764fa292a535d7326a29a5875c579c7417425" +dependencies = [ + "base64 0.22.1", + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc0a2ce646f8655401bb81e7927b812614bd5d91dbc968696be50603510fcaf0" + [[package]] name = "rustls-webpki" version = "0.101.7" @@ -3878,6 +4154,18 @@ dependencies = [ "untrusted 0.9.0", ] +[[package]] +name = "rustls-webpki" +version = "0.102.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" +dependencies = [ + "aws-lc-rs", + "ring 0.17.8", + "rustls-pki-types", + "untrusted 0.9.0", +] + [[package]] name = "rustversion" version = "1.0.17" @@ -4002,7 +4290,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "620bc560062ae251b1366bde43b3f1508445cab5c2c8cbdb397034638ab1b357" dependencies = [ "chrono", - "clap 4.5.17", + "clap", "dotenvy", "glob", "regex", @@ -4033,7 +4321,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee8269bc6ff71afd6b78aa4333ac237a69eebd2cdb439036291e64fb4b8db23c" dependencies = [ "async-trait", - "clap 4.5.17", + "clap", "dotenvy", "futures", "sea-orm", @@ -4253,24 +4541,12 @@ version = "3.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8fee4991ef4f274617a51ad4af30519438dacb2f56ac773b08a1922ff743350" dependencies = [ - "darling 0.20.10", + "darling", "proc-macro2", "quote", "syn 2.0.77", ] -[[package]] -name = "serde_yaml" -version = "0.8.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578a7433b776b56a35785ed5ce9a7e777ac0598aac5a6dd1b4b18a307c7fc71b" -dependencies = [ - "indexmap 1.9.3", - "ryu", - "serde", - "yaml-rust", -] - [[package]] name = "serde_yaml" version = "0.9.34+deprecated" @@ -4284,17 +4560,6 @@ dependencies = [ "unsafe-libyaml", ] -[[package]] -name = "sha-1" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5058ada175748e33390e40e872bd0fe59a19f265d0158daa551c5a88a76009c" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - [[package]] name = "sha1" version = "0.10.6" @@ -4483,7 +4748,7 @@ dependencies = [ "paste", "percent-encoding", "rustls 0.21.12", - "rustls-pemfile", + "rustls-pemfile 1.0.4", "serde", "serde_json", "sha2", @@ -4714,12 +4979,6 @@ dependencies = [ "unicode-properties", ] -[[package]] -name = "strsim" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" - [[package]] name = "strsim" version = "0.11.1" @@ -4744,9 +5003,9 @@ dependencies = [ [[package]] name = "subtle" -version = "2.4.1" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" @@ -4788,6 +5047,15 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" +[[package]] +name = "sync_wrapper" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" +dependencies = [ + "futures-core", +] + [[package]] name = "system-configuration" version = "0.5.1" @@ -4828,21 +5096,6 @@ dependencies = [ "windows-sys 0.59.0", ] -[[package]] -name = "termcolor" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "textwrap" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23d434d3f8967a09480fb04132ebe0a3e088c173e6d0ee7897abbdf4eab0f8b9" - [[package]] name = "thiserror" version = "1.0.63" @@ -4960,17 +5213,6 @@ dependencies = [ "syn 2.0.77", ] -[[package]] -name = "tokio-rustls" -version = "0.23.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" -dependencies = [ - "rustls 0.20.9", - "tokio", - "webpki", -] - [[package]] name = "tokio-rustls" version = "0.24.1" @@ -4981,6 +5223,28 @@ dependencies = [ "tokio", ] +[[package]] +name = "tokio-rustls" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "775e0c0f0adb3a2f22a00c4745d728b479985fc15ee7ca6a2608388c5569860f" +dependencies = [ + "rustls 0.22.4", + "rustls-pki-types", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" +dependencies = [ + "rustls 0.23.13", + "rustls-pki-types", + "tokio", +] + [[package]] name = "tokio-stream" version = "0.1.16" @@ -4994,30 +5258,30 @@ dependencies = [ [[package]] name = "tokio-tungstenite" -version = "0.17.2" +version = "0.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f714dd15bead90401d77e04243611caec13726c2408afd5b31901dfcdcb3b181" +checksum = "c6989540ced10490aaf14e6bad2e3d33728a2813310a0c71d1574304c49631cd" dependencies = [ "futures-util", "log", - "rustls 0.20.9", - "rustls-native-certs", "tokio", - "tokio-rustls 0.23.4", - "tungstenite 0.17.3", - "webpki", + "tungstenite 0.23.0", ] [[package]] name = "tokio-tungstenite" -version = "0.20.1" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "212d5dcb2a1ce06d81107c3d0ffa3121fe974b73f068c8282cb1c32328113b6c" +checksum = "edc5f74e248dc973e0dbb7b74c7e0d6fcc301c694ff50049504004ef4d0cdcd9" dependencies = [ "futures-util", "log", + "rustls 0.23.13", + "rustls-native-certs 0.8.0", + "rustls-pki-types", "tokio", - "tungstenite 0.20.1", + "tokio-rustls 0.26.0", + "tungstenite 0.24.0", ] [[package]] @@ -5035,20 +5299,9 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.6.3" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" - -[[package]] -name = "toml_edit" -version = "0.19.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" -dependencies = [ - "indexmap 2.5.0", - "toml_datetime", - "winnow", -] +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" [[package]] name = "toml_edit" @@ -5058,7 +5311,18 @@ checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" dependencies = [ "indexmap 2.5.0", "toml_datetime", - "winnow", + "winnow 0.5.40", +] + +[[package]] +name = "toml_edit" +version = "0.22.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b072cee73c449a636ffd6f32bd8de3a9f7119139aff882f44943ce2986dc5cf" +dependencies = [ + "indexmap 2.5.0", + "toml_datetime", + "winnow 0.6.18", ] [[package]] @@ -5073,10 +5337,10 @@ dependencies = [ "bytes", "futures-core", "futures-util", - "h2", - "http", - "http-body", - "hyper", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.30", "hyper-timeout", "percent-encoding", "pin-project", @@ -5207,41 +5471,39 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "tungstenite" -version = "0.17.3" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e27992fd6a8c29ee7eef28fc78349aa244134e10ad447ce3b9f0ac0ed0fa4ce0" -dependencies = [ - "base64 0.13.1", - "byteorder", - "bytes", - "http", - "httparse", - "log", - "rand", - "rustls 0.20.9", - "sha-1", - "thiserror", - "url", - "utf-8", - "webpki", -] - -[[package]] -name = "tungstenite" -version = "0.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e3dac10fd62eaf6617d3a904ae222845979aec67c615d1c842b4002c7666fb9" +checksum = "6e2e2ce1e47ed2994fd43b04c8f618008d4cabdd5ee34027cf14f9d918edd9c8" dependencies = [ "byteorder", "bytes", "data-encoding", - "http", + "http 1.1.0", "httparse", "log", "rand", "sha1", "thiserror", - "url", + "utf-8", +] + +[[package]] +name = "tungstenite" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18e5b8366ee7a95b16d32197d0b2604b43a0be89dc5fac9f8e96ccafbaedda8a" +dependencies = [ + "byteorder", + "bytes", + "data-encoding", + "http 1.1.0", + "httparse", + "log", + "rand", + "rustls 0.23.13", + "rustls-pki-types", + "sha1", + "thiserror", "utf-8", ] @@ -5277,15 +5539,15 @@ checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" [[package]] name = "unicode-ident" -version = "1.0.12" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" [[package]] name = "unicode-normalization" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" +checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" dependencies = [ "tinyvec", ] @@ -5298,9 +5560,9 @@ checksum = "52ea75f83c0137a9b98608359a5f1af8144876eb67bcb1ce837368e906a9f524" [[package]] name = "unicode-segmentation" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" [[package]] name = "unicode-width" @@ -5308,6 +5570,12 @@ version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d" +[[package]] +name = "unicode-xid" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "229730647fbc343e3a80e463c1db7f78f3855d3f3739bee0dda773c9a037c90a" + [[package]] name = "unicode_categories" version = "0.1.1" @@ -5434,7 +5702,7 @@ dependencies = [ "async-trait", "atty", "bytes", - "clap 3.2.25", + "clap", "config", "console", "console-subscriber", @@ -5446,7 +5714,7 @@ dependencies = [ "sd-notify", "sea-orm", "serde_json", - "serde_yaml 0.8.26", + "serde_yaml", "time", "tokio", "tracing", @@ -5510,8 +5778,8 @@ dependencies = [ "rand", "rand_chacha", "rand_core", - "rustls 0.20.9", - "rustls-pemfile", + "rustls 0.23.13", + "rustls-pemfile 1.0.4", "sea-orm", "serde", "serde_json", @@ -5546,8 +5814,8 @@ dependencies = [ "rand", "rand_chacha", "rand_core", - "rustls 0.20.9", - "rustls-pemfile", + "rustls 0.23.13", + "rustls-pemfile 1.0.4", "sea-orm", "serde", "serde_json", @@ -5611,21 +5879,21 @@ dependencies = [ "anyhow", "async-trait", "chrono", - "cookie 0.16.2", + "cookie 0.17.0", "data-encoding", "delegate", "futures", - "http", + "http 1.1.0", "once_cell", "percent-encoding", "poem", "poem-openapi", "regex", - "reqwest", + "reqwest 0.12.7", "serde", "serde_json", "tokio", - "tokio-tungstenite 0.17.2", + "tokio-tungstenite 0.24.0", "tracing", "url", "uuid", @@ -5646,15 +5914,15 @@ dependencies = [ "bytes", "mysql_common", "once_cell", - "password-hash 0.2.3", + "password-hash 0.2.1", "rand", - "rustls 0.20.9", - "rustls-native-certs", - "rustls-pemfile", + "rustls 0.23.13", + "rustls-native-certs 0.6.3", + "rustls-pemfile 1.0.4", "sha1", "thiserror", "tokio", - "tokio-rustls 0.23.4", + "tokio-rustls 0.26.0", "tracing", "uuid", "warpgate-common", @@ -5835,6 +6103,18 @@ version = "0.25.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" +[[package]] +name = "which" +version = "4.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" +dependencies = [ + "either", + "home", + "once_cell", + "rustix", +] + [[package]] name = "whoami" version = "1.5.2" @@ -5891,6 +6171,36 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-registry" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" +dependencies = [ + "windows-result", + "windows-strings", + "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", + "windows-targets 0.52.6", +] + [[package]] name = "windows-sys" version = "0.45.0" @@ -6114,6 +6424,15 @@ dependencies = [ "memchr", ] +[[package]] +name = "winnow" +version = "0.6.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68a9bda4691f099d435ad181000724da8e5899daa10713c2d432552b9ccd3a6f" +dependencies = [ + "memchr", +] + [[package]] name = "winreg" version = "0.50.0" diff --git a/warpgate-admin/Cargo.toml b/warpgate-admin/Cargo.toml index aacad30..d9e3781 100644 --- a/warpgate-admin/Cargo.toml +++ b/warpgate-admin/Cargo.toml @@ -7,18 +7,18 @@ version = "0.10.2" [dependencies] anyhow = { version = "1.0", features = ["std"] } async-trait = "0.1" -bytes = "1.3" +bytes = "1.4" chrono = { version = "0.4", default-features = false } futures = "0.3" hex = "0.4" mime_guess = { version = "2.0", default-features = false } -poem = { version = "1.3.50", features = [ +poem = { version = "3.1", features = [ "cookie", "session", "anyhow", "websocket", ] } -poem-openapi = { version = "2.0", features = [ +poem-openapi = { version = "5.1", features = [ "swagger-ui", "chrono", "uuid", @@ -26,7 +26,7 @@ poem-openapi = { version = "2.0", features = [ ] } russh = { version = "0.44.1", features = ["legacy-ed25519-pkcs8-parser"] } rust-embed = "8.3" -sea-orm = { version = "0.12.2", features = [ +sea-orm = { version = "0.12", features = [ "runtime-tokio-rustls", "macros", ], default-features = false } @@ -35,7 +35,7 @@ serde_json = "1.0" thiserror = "1.0" tokio = { version = "1.20", features = ["tracing"] } tracing = "0.1" -uuid = { version = "1.2", features = ["v4", "serde"] } +uuid = { version = "1.3", features = ["v4", "serde"] } warpgate-common = { version = "*", path = "../warpgate-common" } warpgate-core = { version = "*", path = "../warpgate-core" } warpgate-db-entities = { version = "*", path = "../warpgate-db-entities" } diff --git a/warpgate-common/Cargo.toml b/warpgate-common/Cargo.toml index 235bdbc..9071814 100644 --- a/warpgate-common/Cargo.toml +++ b/warpgate-common/Cargo.toml @@ -8,7 +8,7 @@ version = "0.10.2" anyhow = "1.0" argon2 = "0.4" async-trait = "0.1" -bytes = "1.3" +bytes = "1.4" chrono = { version = "0.4", default-features = false, features = ["serde"] } data-encoding = "2.3" delegate = "0.6" @@ -16,8 +16,8 @@ humantime-serde = "1.1" futures = "0.3" once_cell = "1.17" password-hash = "0.4" -poem = { version = "1.3.50", features = ["rustls"] } -poem-openapi = { version = "2.0", features = [ +poem = { version = "3.1", features = ["rustls"] } +poem-openapi = { version = "5.1", features = [ "swagger-ui", "chrono", "uuid", @@ -38,8 +38,8 @@ totp-rs = { version = "5.0", features = ["otpauth"] } tracing = "0.1" tracing-core = "0.1" url = "2.2" -uuid = { version = "1.2", features = ["v4", "serde"] } +uuid = { version = "1.3", features = ["v4", "serde"] } warpgate-sso = { version = "*", path = "../warpgate-sso" } -rustls = { version = "0.20", features = ["dangerous_configuration"] } +rustls = { version = "0.23", features = ["ring"], default-features = false} rustls-pemfile = "1.0" webpki = "0.22" diff --git a/warpgate-common/src/tls/cert.rs b/warpgate-common/src/tls/cert.rs index 5b9d2e4..d6cfb91 100644 --- a/warpgate-common/src/tls/cert.rs +++ b/warpgate-common/src/tls/cert.rs @@ -2,8 +2,8 @@ use std::path::Path; use std::sync::Arc; use poem::listener::RustlsCertificate; +use rustls::pki_types::{CertificateDer, PrivateKeyDer}; use rustls::sign::{CertifiedKey, SigningKey}; -use rustls::{Certificate, PrivateKey}; use tokio::fs::File; use tokio::io::AsyncReadExt; @@ -11,7 +11,7 @@ use crate::RustlsSetupError; pub struct TlsCertificateBundle { bytes: Vec, - certificates: Vec, + certificates: Vec>, } pub struct TlsPrivateKey { @@ -36,8 +36,8 @@ impl TlsCertificateBundle { let certificates = rustls_pemfile::certs(&mut &bytes[..]).map(|mut certs| { certs .drain(..) - .map(Certificate) - .collect::>() + .map(CertificateDer::from) + .collect::>() })?; if certificates.is_empty() { return Err(RustlsSetupError::NoCertificates); @@ -61,17 +61,17 @@ impl TlsPrivateKey { let mut key = rustls_pemfile::pkcs8_private_keys(&mut bytes.as_slice())? .drain(..) .next() - .map(PrivateKey); + .and_then(|x| PrivateKeyDer::try_from(x).ok()); if key.is_none() { key = rustls_pemfile::rsa_private_keys(&mut bytes.as_slice())? .drain(..) .next() - .map(PrivateKey); + .and_then(|x| PrivateKeyDer::try_from(x).ok()); } let key = key.ok_or(RustlsSetupError::NoKeys)?; - let key = rustls::sign::any_supported_type(&key)?; + let key = rustls::crypto::ring::sign::any_supported_type(&key)?; Ok(Self { bytes, key }) } @@ -105,7 +105,6 @@ impl From for CertifiedKey { cert: cert.certificates, key: key.key, ocsp: None, - sct_list: None, } } } diff --git a/warpgate-common/src/tls/error.rs b/warpgate-common/src/tls/error.rs index dacdf8b..cf6e1e9 100644 --- a/warpgate-common/src/tls/error.rs +++ b/warpgate-common/src/tls/error.rs @@ -1,9 +1,11 @@ +use rustls::server::VerifierBuilderError; + #[derive(thiserror::Error, Debug)] pub enum RustlsSetupError { #[error("rustls: {0}")] Rustls(#[from] rustls::Error), - #[error("sign: {0}")] - Sign(#[from] rustls::sign::SignError), + #[error("verifier setup: {0}")] + VerifierBuilder(#[from] VerifierBuilderError), #[error("no certificates found in certificate file")] NoCertificates, #[error("no private keys found in key file")] @@ -11,5 +13,5 @@ pub enum RustlsSetupError { #[error("I/O: {0}")] Io(#[from] std::io::Error), #[error("PKI: {0}")] - Pki(#[from] webpki::Error), + Pki(webpki::Error), } diff --git a/warpgate-core/Cargo.toml b/warpgate-core/Cargo.toml index 991e93f..481c8f7 100644 --- a/warpgate-core/Cargo.toml +++ b/warpgate-core/Cargo.toml @@ -20,8 +20,8 @@ futures = "0.3" once_cell = "1.17" packet = "0.1" password-hash = "0.4" -poem = { version = "1.3.50", features = ["rustls"] } -poem-openapi = { version = "2.0", features = [ +poem = { version = "3.1", features = ["rustls"] } +poem-openapi = { version = "5.1", features = [ "swagger-ui", "chrono", "uuid", @@ -30,7 +30,7 @@ poem-openapi = { version = "2.0", features = [ rand = "0.8" rand_chacha = "0.3" rand_core = { version = "0.6", features = ["std"] } -sea-orm = { version = "0.12.2", features = [ +sea-orm = { version = "0.12", features = [ "runtime-tokio-rustls", "macros", ], default-features = false } @@ -43,9 +43,9 @@ tracing = "0.1" tracing-core = "0.1" tracing-subscriber = "0.3" url = "2.2" -uuid = { version = "1.2", features = ["v4", "serde"] } +uuid = { version = "1.3", features = ["v4", "serde"] } warpgate-sso = { version = "*", path = "../warpgate-sso" } -rustls = { version = "0.20", features = ["dangerous_configuration"] } +rustls = { version = "0.23", features = ["logging"], default-features = false } rustls-pemfile = "1.0" webpki = "0.22" diff --git a/warpgate-database-protocols/Cargo.toml b/warpgate-database-protocols/Cargo.toml index 0883f36..bf3fc3d 100644 --- a/warpgate-database-protocols/Cargo.toml +++ b/warpgate-database-protocols/Cargo.toml @@ -14,11 +14,11 @@ authors = [ [dependencies] tokio = { version = "1.20", features = ["io-util"] } bitflags = { version = "1.3", default-features = false } -bytes = "1.3" +bytes = "1.4" futures-core = { version = "0.3", default-features = false } futures-util = { version = "0.3", default-features = false, features = [ "alloc", "sink", ] } -memchr = { version = "2.5.0", default-features = false } +memchr = { version = "2.5", default-features = false } thiserror = "1.0" diff --git a/warpgate-db-entities/Cargo.toml b/warpgate-db-entities/Cargo.toml index c40c299..42cb016 100644 --- a/warpgate-db-entities/Cargo.toml +++ b/warpgate-db-entities/Cargo.toml @@ -6,8 +6,8 @@ version = "0.10.2" [dependencies] chrono = { version = "0.4", default-features = false, features = ["serde"] } -poem-openapi = { version = "2.0", features = ["chrono", "uuid"] } -sea-orm = { version = "0.12.2", features = [ +poem-openapi = { version = "5.1", features = ["chrono", "uuid"] } +sea-orm = { version = "0.12", features = [ "macros", "with-chrono", "with-uuid", @@ -15,5 +15,5 @@ sea-orm = { version = "0.12.2", features = [ ], default-features = false } serde = "1.0" serde_json = "1.0" -uuid = { version = "1.2", features = ["v4", "serde"] } +uuid = { version = "1.3", features = ["v4", "serde"] } warpgate-common = { version = "*", path = "../warpgate-common" } diff --git a/warpgate-db-migrations/Cargo.toml b/warpgate-db-migrations/Cargo.toml index 1c781e1..2536d20 100644 --- a/warpgate-db-migrations/Cargo.toml +++ b/warpgate-db-migrations/Cargo.toml @@ -10,15 +10,15 @@ version = "0.10.2" [dependencies] async-std = { version = "^1.11", features = ["attributes"] } chrono = { version = "0.4", default-features = false, features = ["serde"] } -sea-orm = { version = "0.12.2", features = [ +sea-orm = { version = "0.12", features = [ "runtime-tokio-rustls", "macros", "with-chrono", "with-uuid", "with-json", ], default-features = false } -sea-orm-migration = { version = "0.12.2", default-features = false, features = [ +sea-orm-migration = { version = "0.12", default-features = false, features = [ "cli", ] } -uuid = { version = "1.2", features = ["v4", "serde"] } +uuid = { version = "1.3", features = ["v4", "serde"] } serde_json = "1.0" diff --git a/warpgate-protocol-http/Cargo.toml b/warpgate-protocol-http/Cargo.toml index 873263f..348882a 100644 --- a/warpgate-protocol-http/Cargo.toml +++ b/warpgate-protocol-http/Cargo.toml @@ -8,13 +8,13 @@ version = "0.10.2" anyhow = "1.0" async-trait = "0.1" chrono = { version = "0.4", default-features = false, features = ["serde"] } -cookie = "0.16" +cookie = "0.17" data-encoding = "2.3" delegate = "0.6" futures = "0.3" -http = "0.2" +http = "1.0" once_cell = "1.17" -poem = { version = "^1.3.50", features = [ +poem = { version = "3.1", features = [ "cookie", "session", "anyhow", @@ -23,15 +23,15 @@ poem = { version = "^1.3.50", features = [ "sse", "embed", ] } -poem-openapi = { version = "2.0", features = ["swagger-ui"] } -reqwest = { version = "0.11", features = [ +poem-openapi = { version = "5.1", features = ["swagger-ui"] } +reqwest = { version = "0.12", features = [ "rustls-tls-native-roots", "stream", ], default-features = false } serde = "1.0" serde_json = "1.0" tokio = { version = "1.20", features = ["tracing", "signal"] } -tokio-tungstenite = { version = "0.17", features = ["rustls-tls-native-roots"] } +tokio-tungstenite = { version = "0.24", features = ["rustls-tls-native-roots"] } tracing = "0.1" warpgate-admin = { version = "*", path = "../warpgate-admin" } warpgate-common = { version = "*", path = "../warpgate-common" } @@ -40,6 +40,6 @@ warpgate-db-entities = { version = "*", path = "../warpgate-db-entities" } warpgate-web = { version = "*", path = "../warpgate-web" } warpgate-sso = { version = "*", path = "../warpgate-sso" } percent-encoding = "2.1" -uuid = { version = "1.2", features = ["v4"] } +uuid = { version = "1.3", features = ["v4"] } regex = "1.6" -url = "2.4.1" +url = "2.4" diff --git a/warpgate-protocol-http/src/catchall.rs b/warpgate-protocol-http/src/catchall.rs index 083c7eb..bdbbdf1 100644 --- a/warpgate-protocol-http/src/catchall.rs +++ b/warpgate-protocol-http/src/catchall.rs @@ -61,9 +61,9 @@ async fn get_target_for_request( req: &Request, services: &Services, ) -> poem::Result> { - let session: &Session = <_>::from_request_without_body(req).await?; + let session = <&Session>::from_request_without_body(req).await?; let params: QueryParams = req.params()?; - let auth: Data<&SessionAuthorization> = <_>::from_request_without_body(req).await?; + let auth = Data::<&SessionAuthorization>::from_request_without_body(req).await?; let selected_target_name; let need_role_auth; diff --git a/warpgate-protocol-http/src/common.rs b/warpgate-protocol-http/src/common.rs index 9298d3c..bc1b637 100644 --- a/warpgate-protocol-http/src/common.rs +++ b/warpgate-protocol-http/src/common.rs @@ -110,7 +110,7 @@ impl SessionAuthorization { } async fn is_user_admin(req: &Request, auth: &SessionAuthorization) -> poem::Result { - let services: Data<&Services> = <_>::from_request_without_body(req).await?; + let services = Data::<&Services>::from_request_without_body(req).await?; let SessionAuthorization::User(username) = auth else { return Ok(false); @@ -133,7 +133,7 @@ async fn is_user_admin(req: &Request, auth: &SessionAuthorization) -> poem::Resu pub fn endpoint_admin_auth(e: E) -> impl Endpoint { e.around(|ep, req| async move { - let auth: Data<&SessionAuthorization> = <_>::from_request_without_body(&req).await?; + let auth = Data::<&SessionAuthorization>::from_request_without_body(&req).await?; if is_user_admin(&req, &auth).await? { return Ok(ep.call(req).await?.into_response()); } @@ -143,8 +143,8 @@ pub fn endpoint_admin_auth(e: E) -> impl Endpoint { pub fn page_admin_auth(e: E) -> impl Endpoint { e.around(|ep, req| async move { - let auth: Data<&SessionAuthorization> = <_>::from_request_without_body(&req).await?; - let session: &Session = <_>::from_request_without_body(&req).await?; + let auth = Data::<&SessionAuthorization>::from_request_without_body(&req).await?; + let session = <&Session>::from_request_without_body(&req).await?; if is_user_admin(&req, &auth).await? { return Ok(ep.call(req).await?.into_response()); } @@ -157,7 +157,7 @@ pub async fn _inner_auth( ep: Arc, req: Request, ) -> poem::Result> { - let session: &Session = FromRequest::from_request_without_body(&req).await?; + let session = <&Session>::from_request_without_body(&req).await?; Ok(match session.get_auth() { Some(auth) => Some(ep.data(auth).call(req).await?), @@ -235,9 +235,9 @@ pub async fn get_auth_state_for_request( } pub async fn authorize_session(req: &Request, username: String) -> poem::Result<()> { - let session_middleware: Data<&Arc>> = - <_>::from_request_without_body(req).await?; - let session: &Session = <_>::from_request_without_body(req).await?; + let session_middleware = + Data::<&Arc>>::from_request_without_body(req).await?; + let session = <&Session>::from_request_without_body(req).await?; let server_handle = session_middleware .lock() diff --git a/warpgate-protocol-http/src/lib.rs b/warpgate-protocol-http/src/lib.rs index 6a53689..87eabb0 100644 --- a/warpgate-protocol-http/src/lib.rs +++ b/warpgate-protocol-http/src/lib.rs @@ -17,7 +17,7 @@ use std::time::Duration; use anyhow::{Context, Result}; use async_trait::async_trait; use common::page_admin_auth; -pub use common::{PROTOCOL_NAME, SsoLoginState}; +pub use common::{SsoLoginState, PROTOCOL_NAME}; use http::HeaderValue; use logging::{get_client_ip, log_request_result, span_for_request}; use poem::endpoint::{EmbeddedFileEndpoint, EmbeddedFilesEndpoint}; diff --git a/warpgate-protocol-http/src/logging.rs b/warpgate-protocol-http/src/logging.rs index bda800b..71827a2 100644 --- a/warpgate-protocol-http/src/logging.rs +++ b/warpgate-protocol-http/src/logging.rs @@ -35,7 +35,7 @@ pub fn log_request_result(method: &Method, url: &Uri, client_ip: String, status: } pub async fn get_client_ip(req: &Request) -> poem::Result { - let services: Option> = <_>::from_request_without_body(req).await.ok(); + let services = Data::<&Services>::from_request_without_body(req).await.ok(); let trust_x_forwarded_headers = if let Some(services) = services { let config = services.config.lock().await; config.store.http.trust_x_forwarded_headers diff --git a/warpgate-protocol-http/src/middleware/cookie_host.rs b/warpgate-protocol-http/src/middleware/cookie_host.rs index 8ee968e..fb487b3 100644 --- a/warpgate-protocol-http/src/middleware/cookie_host.rs +++ b/warpgate-protocol-http/src/middleware/cookie_host.rs @@ -1,4 +1,5 @@ -use async_trait::async_trait; +use std::future::Future; + use http::header::Entry; use poem::web::cookie::Cookie; use poem::{Endpoint, IntoResponse, Middleware, Request, Response}; @@ -25,29 +26,32 @@ impl Middleware for CookieHostMiddleware { } } -#[async_trait] impl Endpoint for CookieHostMiddlewareEndpoint { type Output = Response; - async fn call(&self, req: Request) -> poem::Result { - let host = req.original_uri().host().map(|x| x.to_string()); + fn call(&self, req: Request) -> impl Future> + Send { + async move { + let host = req.original_uri().host().map(|x| x.to_string()); - let mut resp = self.inner.call(req).await?.into_response(); + let mut resp = self.inner.call(req).await?.into_response(); - if let Some(host) = host { - if let Entry::Occupied(mut entry) = resp.headers_mut().entry(http::header::SET_COOKIE) { - if let Ok(cookie_str) = entry.get().to_str() { - if let Ok(mut cookie) = Cookie::parse(cookie_str) { - if cookie.name() == SESSION_COOKIE_NAME { - cookie.set_domain(host); - if let Ok(value) = cookie.to_string().parse() { - entry.insert(value); + if let Some(host) = host { + if let Entry::Occupied(mut entry) = + resp.headers_mut().entry(http::header::SET_COOKIE) + { + if let Ok(cookie_str) = entry.get().to_str() { + if let Ok(mut cookie) = Cookie::parse(cookie_str) { + if cookie.name() == SESSION_COOKIE_NAME { + cookie.set_domain(host); + if let Ok(value) = cookie.to_string().parse() { + entry.insert(value); + } } } } } } + Ok(resp) } - Ok(resp) } } diff --git a/warpgate-protocol-http/src/middleware/ticket.rs b/warpgate-protocol-http/src/middleware/ticket.rs index da1fe21..46f9648 100644 --- a/warpgate-protocol-http/src/middleware/ticket.rs +++ b/warpgate-protocol-http/src/middleware/ticket.rs @@ -1,4 +1,5 @@ -use async_trait::async_trait; +use std::future::Future; + use poem::session::Session; use poem::web::{Data, FromRequest}; use poem::{Endpoint, Middleware, Request}; @@ -34,58 +35,59 @@ struct QueryParams { ticket: Option, } -#[async_trait] impl Endpoint for TicketMiddlewareEndpoint { type Output = E::Output; - async fn call(&self, req: Request) -> poem::Result { - let mut session_is_temporary = false; - let session: &Session = <_>::from_request_without_body(&req).await?; - let session = session.clone(); + fn call(&self, req: Request) -> impl Future> { + async move { + let mut session_is_temporary = false; + let session = <&Session>::from_request_without_body(&req).await?; + let session = session.clone(); - { - let params: QueryParams = req.params()?; + { + let params: QueryParams = req.params()?; - let mut ticket_value = None; - if let Some(t) = params.ticket { - ticket_value = Some(t); - } - for h in req.headers().get_all(http::header::AUTHORIZATION) { - let header_value = h.to_str().unwrap_or("").to_string(); - if let Some((token_type, token_value)) = header_value.split_once(' ') { - if &token_type.to_lowercase() == "warpgate" { - ticket_value = Some(token_value.to_string()); - session_is_temporary = true; + let mut ticket_value = None; + if let Some(t) = params.ticket { + ticket_value = Some(t); + } + for h in req.headers().get_all(http::header::AUTHORIZATION) { + let header_value = h.to_str().unwrap_or("").to_string(); + if let Some((token_type, token_value)) = header_value.split_once(' ') { + if &token_type.to_lowercase() == "warpgate" { + ticket_value = Some(token_value.to_string()); + session_is_temporary = true; + } + } + } + + if let Some(ticket) = ticket_value { + let services = Data::<&Services>::from_request_without_body(&req).await?; + + if let Some(ticket_model) = { + let ticket = Secret::new(ticket); + if let Some(res) = authorize_ticket(&services.db, &ticket).await? { + consume_ticket(&services.db, &res.id).await?; + Some(res) + } else { + None + } + } { + session.set_auth(crate::common::SessionAuthorization::Ticket { + username: ticket_model.username, + target_name: ticket_model.target, + }); } } } - if let Some(ticket) = ticket_value { - let services: Data<&Services> = <_>::from_request_without_body(&req).await?; + let resp = self.inner.call(req).await; - if let Some(ticket_model) = { - let ticket = Secret::new(ticket); - if let Some(res) = authorize_ticket(&services.db, &ticket).await? { - consume_ticket(&services.db, &res.id).await?; - Some(res) - } else { - None - } - } { - session.set_auth(crate::common::SessionAuthorization::Ticket { - username: ticket_model.username, - target_name: ticket_model.target, - }); - } + if session_is_temporary { + session.clear(); } + + resp } - - let resp = self.inner.call(req).await; - - if session_is_temporary { - session.clear(); - } - - resp } } diff --git a/warpgate-protocol-http/src/proxy.rs b/warpgate-protocol-http/src/proxy.rs index 23d8e57..9b7d1e1 100644 --- a/warpgate-protocol-http/src/proxy.rs +++ b/warpgate-protocol-http/src/proxy.rs @@ -5,7 +5,7 @@ use std::str::FromStr; use anyhow::{Context, Result}; use cookie::Cookie; use delegate::delegate; -use futures::{SinkExt, StreamExt}; +use futures::{SinkExt, StreamExt, TryStreamExt}; use http::header::HeaderName; use http::uri::{Authority, Scheme}; use http::Uri; @@ -313,7 +313,11 @@ async fn copy_client_body( return Ok(()); } - response.set_body(Body::from_bytes_stream(client_response.bytes_stream())); + response.set_body(Body::from_bytes_stream( + client_response + .bytes_stream() + .map_err(|e| std::io::Error::new(std::io::ErrorKind::Other, e)), + )); Ok(()) } @@ -397,6 +401,7 @@ async fn proxy_ws_inner( .body(()) .map_err(poem::error::InternalServerError)?, None, + true, ) .await .map_err(poem::error::BadGateway)?; diff --git a/warpgate-protocol-http/src/session.rs b/warpgate-protocol-http/src/session.rs index d2ed8b3..e632c0d 100644 --- a/warpgate-protocol-http/src/session.rs +++ b/warpgate-protocol-http/src/session.rs @@ -1,9 +1,9 @@ use std::collections::{BTreeMap, HashMap}; +use std::future::Future; use std::sync::{Arc, Weak}; use std::time::{Duration, Instant}; -use async_trait::async_trait; -use poem::session::{Session, SessionStorage}; +use poem::session::{MemoryStorage, Session, SessionStorage}; use poem::web::{Data, RemoteAddr}; use poem::{FromRequest, Request}; use serde_json::Value; @@ -18,42 +18,50 @@ use crate::session_handle::{ }; #[derive(Clone)] -pub struct SharedSessionStorage(pub Arc>>); +pub struct SharedSessionStorage(pub Arc>>); static POEM_SESSION_ID_SESSION_KEY: &str = "poem_session_id"; -#[async_trait] impl SessionStorage for SharedSessionStorage { - async fn load_session( - &self, - session_id: &str, - ) -> poem::Result>> { - self.0.lock().await.load_session(session_id).await.map(|o| { - o.map(|mut s| { - s.insert( - POEM_SESSION_ID_SESSION_KEY.to_string(), - session_id.to_string().into(), - ); - s + fn load_session<'a>( + &'a self, + session_id: &'a str, + ) -> impl Future>>> + Send + 'a { + async move { + self.0.lock().await.load_session(session_id).await.map(|o| { + o.map(|mut s| { + s.insert( + POEM_SESSION_ID_SESSION_KEY.to_string(), + session_id.to_string().into(), + ); + s + }) }) - }) + } } - async fn update_session( - &self, - session_id: &str, - entries: &BTreeMap, + /// Insert or update a session. + fn update_session<'a>( + &'a self, + session_id: &'a str, + entries: &'a BTreeMap, expires: Option, - ) -> poem::Result<()> { - self.0 - .lock() - .await - .update_session(session_id, entries, expires) - .await + ) -> impl Future> + Send + 'a { + async move { + self.0 + .lock() + .await + .update_session(session_id, entries, expires) + .await + } } - async fn remove_session(&self, session_id: &str) -> poem::Result<()> { - self.0.lock().await.remove_session(session_id).await + /// Remove a session by session id. + fn remove_session<'a>( + &'a self, + session_id: &'a str, + ) -> impl Future> + Send + 'a { + async move { self.0.lock().await.remove_session(session_id).await } } } @@ -78,7 +86,7 @@ impl SessionStore { } pub async fn process_request(&mut self, req: Request) -> poem::Result { - let session: &Session = <_>::from_request_without_body(&req).await?; + let session = <&Session>::from_request_without_body(&req).await?; let request_counter = session.get::(REQUEST_COUNTER_SESSION_KEY).unwrap_or(0); session.set(REQUEST_COUNTER_SESSION_KEY, request_counter + 1); @@ -97,14 +105,14 @@ impl SessionStore { &mut self, req: &Request, ) -> poem::Result { - let session: &Session = <_>::from_request_without_body(req).await?; + let session = <&Session>::from_request_without_body(req).await?; if let Some(handle) = self.handle_for(session) { return Ok(handle.into()); } let services = Data::<&Services>::from_request_without_body(req).await?; - let remote_address: &RemoteAddr = <_>::from_request_without_body(req).await?; + let remote_address = <&RemoteAddr>::from_request_without_body(req).await?; let session_storage = Data::<&SharedSessionStorage>::from_request_without_body(req).await?; let (session_handle, mut session_handle_rx) = HttpSessionHandle::new(); diff --git a/warpgate-protocol-http/src/session_handle.rs b/warpgate-protocol-http/src/session_handle.rs index 62146a2..15d57fb 100644 --- a/warpgate-protocol-http/src/session_handle.rs +++ b/warpgate-protocol-http/src/session_handle.rs @@ -1,4 +1,5 @@ use std::any::type_name; +use std::future::Future; use std::sync::Arc; use poem::error::GetDataError; @@ -43,17 +44,21 @@ impl std::ops::Deref for WarpgateServerHandleFromRequest { } } -#[async_trait::async_trait] impl<'a> FromRequest<'a> for WarpgateServerHandleFromRequest { - async fn from_request(req: &'a Request, _: &mut RequestBody) -> poem::Result { - let sm = Data::<&Arc>>::from_request_without_body(req).await?; - let session: &Session = <_>::from_request_without_body(req).await?; - Ok(sm - .lock() - .await - .handle_for(session) - .map(WarpgateServerHandleFromRequest) - .ok_or_else(|| GetDataError(type_name::()))?) + fn from_request( + req: &'a Request, + _: &mut RequestBody, + ) -> impl Future> { + async move { + let sm = Data::<&Arc>>::from_request_without_body(req).await?; + let session = <&Session>::from_request_without_body(req).await?; + Ok(sm + .lock() + .await + .handle_for(session) + .map(WarpgateServerHandleFromRequest) + .ok_or_else(|| GetDataError(type_name::()))?) + } } } diff --git a/warpgate-protocol-mysql/Cargo.toml b/warpgate-protocol-mysql/Cargo.toml index 0ad823f..f36355e 100644 --- a/warpgate-protocol-mysql/Cargo.toml +++ b/warpgate-protocol-mysql/Cargo.toml @@ -13,15 +13,15 @@ anyhow = { version = "1.0", features = ["std"] } async-trait = "0.1" tokio = { version = "1.20", features = ["tracing", "signal"] } tracing = "0.1" -uuid = { version = "1.2", features = ["v4"] } -bytes = "1.3" +uuid = { version = "1.3", features = ["v4"] } +bytes = "1.4" mysql_common = "0.29" rand = "0.8" -sha1 = "0.10.5" +sha1 = "0.10" password-hash = { version = "0.2", features = ["std"] } -rustls = { version = "0.20", features = ["dangerous_configuration"] } +rustls = { version = "0.23", features = ["ring"], default-features = false } rustls-pemfile = "1.0" -tokio-rustls = "0.23" +tokio-rustls = "0.26" thiserror = "1.0" webpki = "0.22" once_cell = "1.17" diff --git a/warpgate-protocol-mysql/src/client.rs b/warpgate-protocol-mysql/src/client.rs index 1ac6682..e1aecc2 100644 --- a/warpgate-protocol-mysql/src/client.rs +++ b/warpgate-protocol-mysql/src/client.rs @@ -97,7 +97,7 @@ impl MySqlClient { .upgrade(( target .host - .as_str() + .clone() .try_into() .map_err(|_| MySqlError::InvalidDomainName)?, client_config, diff --git a/warpgate-protocol-mysql/src/lib.rs b/warpgate-protocol-mysql/src/lib.rs index b0dbe9d..d0afc4f 100644 --- a/warpgate-protocol-mysql/src/lib.rs +++ b/warpgate-protocol-mysql/src/lib.rs @@ -63,12 +63,13 @@ impl ProtocolServer for MySQLProtocolServer { } }; - let tls_config = ServerConfig::builder() - .with_safe_defaults() - .with_client_cert_verifier(NoClientAuth::new()) - .with_cert_resolver(Arc::new(ResolveServerCert(Arc::new( - certificate_and_key.into(), - )))); + let tls_config = + ServerConfig::builder_with_provider(Arc::new(rustls::crypto::ring::default_provider())) + .with_safe_default_protocol_versions()? + .with_client_cert_verifier(Arc::new(NoClientAuth)) + .with_cert_resolver(Arc::new(ResolveServerCert(Arc::new( + certificate_and_key.into(), + )))); info!(?address, "Listening"); let listener = TcpListener::bind(address).await?; diff --git a/warpgate-protocol-mysql/src/tls/maybe_tls_stream.rs b/warpgate-protocol-mysql/src/tls/maybe_tls_stream.rs index c6672e5..16b54a7 100644 --- a/warpgate-protocol-mysql/src/tls/maybe_tls_stream.rs +++ b/warpgate-protocol-mysql/src/tls/maybe_tls_stream.rs @@ -3,7 +3,8 @@ use std::sync::Arc; use std::task::Poll; use async_trait::async_trait; -use rustls::{ClientConfig, ServerConfig, ServerName}; +use rustls::pki_types::ServerName; +use rustls::{ClientConfig, ServerConfig}; use tokio::io::{AsyncRead, AsyncWrite, ReadBuf}; use tracing::*; @@ -126,7 +127,7 @@ impl UpgradableStream> for S where S: AsyncRead + AsyncWrite + Unpin + Send, { - type UpgradeConfig = (ServerName, Arc); + type UpgradeConfig = (ServerName<'static>, Arc); async fn upgrade( mut self, diff --git a/warpgate-protocol-mysql/src/tls/rustls_helpers.rs b/warpgate-protocol-mysql/src/tls/rustls_helpers.rs index 6fa5d45..50f2f31 100644 --- a/warpgate-protocol-mysql/src/tls/rustls_helpers.rs +++ b/warpgate-protocol-mysql/src/tls/rustls_helpers.rs @@ -1,15 +1,17 @@ use std::io::Cursor; use std::sync::Arc; -use std::time::SystemTime; -use rustls::client::{ServerCertVerified, ServerCertVerifier, WebPkiVerifier}; +use rustls::client::danger::{HandshakeSignatureValid, ServerCertVerified, ServerCertVerifier}; +use rustls::client::WebPkiServerVerifier; +use rustls::pki_types::{CertificateDer, ServerName, UnixTime}; use rustls::server::{ClientHello, ResolvesServerCert}; use rustls::sign::CertifiedKey; -use rustls::{ClientConfig, Error as TlsError, ServerName}; +use rustls::{CertificateError, ClientConfig, Error as TlsError, SignatureScheme}; use warpgate_common::RustlsSetupError; use super::ROOT_CERT_STORE; +#[derive(Debug)] pub struct ResolveServerCert(pub Arc); impl ResolvesServerCert for ResolveServerCert { @@ -23,10 +25,13 @@ pub async fn configure_tls_connector( accept_invalid_hostnames: bool, root_cert: Option<&[u8]>, ) -> Result { - let config = ClientConfig::builder().with_safe_defaults(); + let config = + ClientConfig::builder_with_provider(Arc::new(rustls::crypto::ring::default_provider())) + .with_safe_default_protocol_versions()?; let config = if accept_invalid_certs { config + .dangerous() .with_custom_certificate_verifier(Arc::new(DummyTlsVerifier)) .with_no_client_auth() } else { @@ -36,14 +41,15 @@ pub async fn configure_tls_connector( let mut cursor = Cursor::new(data); for cert in rustls_pemfile::certs(&mut cursor)? { - cert_store.add(&rustls::Certificate(cert))?; + cert_store.add(CertificateDer::from(cert))?; } } if accept_invalid_hostnames { - let verifier = WebPkiVerifier::new(cert_store, None); + let verifier = WebPkiServerVerifier::builder(Arc::new(cert_store)).build()?; config + .dangerous() .with_custom_certificate_verifier(Arc::new(NoHostnameTlsVerifier { verifier })) .with_no_client_auth() } else { @@ -56,50 +62,105 @@ pub async fn configure_tls_connector( Ok(config) } +#[derive(Debug)] pub struct DummyTlsVerifier; impl ServerCertVerifier for DummyTlsVerifier { fn verify_server_cert( &self, - _end_entity: &rustls::Certificate, - _intermediates: &[rustls::Certificate], - _server_name: &ServerName, - _scts: &mut dyn Iterator, + _end_entity: &CertificateDer<'_>, + _intermediates: &[CertificateDer<'_>], + _server_name: &ServerName<'_>, _ocsp_response: &[u8], - _now: SystemTime, - ) -> Result { + _now: UnixTime, + ) -> Result { Ok(ServerCertVerified::assertion()) } + + fn verify_tls12_signature( + &self, + _message: &[u8], + _cert: &CertificateDer<'_>, + _dss: &rustls::DigitallySignedStruct, + ) -> Result { + Ok(HandshakeSignatureValid::assertion()) + } + + fn verify_tls13_signature( + &self, + _message: &[u8], + _cert: &CertificateDer<'_>, + _dss: &rustls::DigitallySignedStruct, + ) -> Result { + Ok(HandshakeSignatureValid::assertion()) + } + + fn supported_verify_schemes(&self) -> Vec { + vec![ + SignatureScheme::RSA_PKCS1_SHA1, + SignatureScheme::ECDSA_SHA1_Legacy, + SignatureScheme::RSA_PKCS1_SHA256, + SignatureScheme::ECDSA_NISTP256_SHA256, + SignatureScheme::RSA_PKCS1_SHA384, + SignatureScheme::ECDSA_NISTP384_SHA384, + SignatureScheme::RSA_PKCS1_SHA512, + SignatureScheme::ECDSA_NISTP521_SHA512, + SignatureScheme::RSA_PSS_SHA256, + SignatureScheme::RSA_PSS_SHA384, + SignatureScheme::RSA_PSS_SHA512, + SignatureScheme::ED25519, + SignatureScheme::ED448, + ] + } } +#[derive(Debug)] pub struct NoHostnameTlsVerifier { - verifier: WebPkiVerifier, + verifier: Arc, } impl ServerCertVerifier for NoHostnameTlsVerifier { fn verify_server_cert( &self, - end_entity: &rustls::Certificate, - intermediates: &[rustls::Certificate], - server_name: &ServerName, - scts: &mut dyn Iterator, + end_entity: &CertificateDer<'_>, + intermediates: &[CertificateDer<'_>], + server_name: &ServerName<'_>, ocsp_response: &[u8], - now: SystemTime, - ) -> Result { + now: UnixTime, + ) -> Result { match self.verifier.verify_server_cert( end_entity, intermediates, server_name, - scts, ocsp_response, now, ) { - Err(TlsError::InvalidCertificateData(reason)) - if reason.contains("CertNotValidForName") => - { + Err(TlsError::InvalidCertificate(CertificateError::NotValidForName)) => { Ok(ServerCertVerified::assertion()) } res => res, } } + + fn verify_tls12_signature( + &self, + message: &[u8], + cert: &CertificateDer<'_>, + dss: &rustls::DigitallySignedStruct, + ) -> Result { + self.verifier.verify_tls12_signature(message, cert, dss) + } + + fn verify_tls13_signature( + &self, + message: &[u8], + cert: &CertificateDer<'_>, + dss: &rustls::DigitallySignedStruct, + ) -> Result { + self.verifier.verify_tls13_signature(message, cert, dss) + } + + fn supported_verify_schemes(&self) -> Vec { + self.verifier.supported_verify_schemes() + } } diff --git a/warpgate-protocol-mysql/src/tls/rustls_root_certs.rs b/warpgate-protocol-mysql/src/tls/rustls_root_certs.rs index 165626a..fa439f0 100644 --- a/warpgate-protocol-mysql/src/tls/rustls_root_certs.rs +++ b/warpgate-protocol-mysql/src/tls/rustls_root_certs.rs @@ -1,4 +1,5 @@ use once_cell::sync::Lazy; +use rustls::pki_types::CertificateDer; use rustls::RootCertStore; #[allow(clippy::expect_used)] @@ -8,7 +9,7 @@ pub static ROOT_CERT_STORE: Lazy = Lazy::new(|| { rustls_native_certs::load_native_certs().expect("could not load root TLS certificates") { roots - .add(&rustls::Certificate(cert.0)) + .add(CertificateDer::from(cert.0)) .expect("could not add root TLS certificate"); } roots diff --git a/warpgate-protocol-ssh/Cargo.toml b/warpgate-protocol-ssh/Cargo.toml index 7fde903..67791bd 100644 --- a/warpgate-protocol-ssh/Cargo.toml +++ b/warpgate-protocol-ssh/Cargo.toml @@ -9,21 +9,21 @@ ansi_term = "0.12" anyhow = { version = "1.0", features = ["std"] } async-trait = "0.1" bimap = "0.6" -bytes = "1.3" +bytes = "1.4" dialoguer = "0.10" curve25519-dalek = "4.0.0" # pin due to build fail on x86 ed25519-dalek = "2.0.0" # pin due to build fail on x86 in 2.1 futures = "0.3" russh = { version = "0.44.1", features = ["legacy-ed25519-pkcs8-parser"] } # russh = { version = "0.35.0-beta.6", path = "../../russh/russh"} -sea-orm = { version = "0.12.2", features = [ +sea-orm = { version = "0.12", features = [ "runtime-tokio-rustls", ], default-features = false } thiserror = "1.0" time = "0.3" tokio = { version = "1.20", features = ["tracing", "signal"] } tracing = "0.1" -uuid = { version = "1.2", features = ["v4"] } +uuid = { version = "1.3", features = ["v4"] } warpgate-common = { version = "*", path = "../warpgate-common" } warpgate-core = { version = "*", path = "../warpgate-core" } warpgate-db-entities = { version = "*", path = "../warpgate-db-entities" } diff --git a/warpgate-sso/Cargo.toml b/warpgate-sso/Cargo.toml index 25fffa2..75abe54 100644 --- a/warpgate-sso/Cargo.toml +++ b/warpgate-sso/Cargo.toml @@ -5,7 +5,7 @@ name = "warpgate-sso" version = "0.10.2" [dependencies] -bytes = "1.3" +bytes = "1.4" thiserror = "1.0" tokio = { version = "1.20", features = ["tracing", "macros"] } tracing = "0.1" @@ -15,4 +15,4 @@ serde_json = "1.0" once_cell = "1.17" jsonwebtoken = "8" data-encoding = "2.3" -futures = "0.3.30" +futures = "0.3" diff --git a/warpgate-sso/src/lib.rs b/warpgate-sso/src/lib.rs index d92d55e..824ef30 100644 --- a/warpgate-sso/src/lib.rs +++ b/warpgate-sso/src/lib.rs @@ -6,8 +6,7 @@ mod sso; pub use config::*; pub use error::*; +pub use openidconnect::core::CoreIdToken; pub use request::*; pub use response::*; pub use sso::*; - -pub use openidconnect::core::CoreIdToken; diff --git a/warpgate-sso/src/sso.rs b/warpgate-sso/src/sso.rs index 7b9f7ff..6881534 100644 --- a/warpgate-sso/src/sso.rs +++ b/warpgate-sso/src/sso.rs @@ -110,6 +110,6 @@ impl SsoClient { req = req.set_id_token_hint(&token); req = req.set_client_id(self.config.client_id().clone()); req = req.set_post_logout_redirect_uri(PostLogoutRedirectUrl::from_url(redirect_url)); - return Ok(req.http_get_url()); + Ok(req.http_get_url()) } } diff --git a/warpgate-web/src/admin/lib/openapi-schema.json b/warpgate-web/src/admin/lib/openapi-schema.json index 2c6a6d5..ca8747b 100644 --- a/warpgate-web/src/admin/lib/openapi-schema.json +++ b/warpgate-web/src/admin/lib/openapi-schema.json @@ -1366,6 +1366,9 @@ "properties": { "kind": { "type": "string", + "enum": [ + "Password" + ], "example": "Password" } } @@ -1385,6 +1388,9 @@ "properties": { "kind": { "type": "string", + "enum": [ + "PublicKey" + ], "example": "PublicKey" } } @@ -1572,6 +1578,9 @@ "properties": { "kind": { "type": "string", + "enum": [ + "Http" + ], "example": "Http" } } @@ -1591,6 +1600,9 @@ "properties": { "kind": { "type": "string", + "enum": [ + "MySql" + ], "example": "MySql" } } @@ -1610,6 +1622,9 @@ "properties": { "kind": { "type": "string", + "enum": [ + "Ssh" + ], "example": "Ssh" } } @@ -1629,6 +1644,9 @@ "properties": { "kind": { "type": "string", + "enum": [ + "WebAdmin" + ], "example": "WebAdmin" } } @@ -1808,6 +1826,9 @@ "properties": { "kind": { "type": "string", + "enum": [ + "Password" + ], "example": "Password" } } @@ -1827,6 +1848,9 @@ "properties": { "kind": { "type": "string", + "enum": [ + "PublicKey" + ], "example": "PublicKey" } } @@ -1846,6 +1870,9 @@ "properties": { "kind": { "type": "string", + "enum": [ + "Sso" + ], "example": "Sso" } } @@ -1865,6 +1892,9 @@ "properties": { "kind": { "type": "string", + "enum": [ + "Totp" + ], "example": "Totp" } } diff --git a/warpgate/Cargo.toml b/warpgate/Cargo.toml index 6df9b36..ba8de24 100644 --- a/warpgate/Cargo.toml +++ b/warpgate/Cargo.toml @@ -9,18 +9,18 @@ ansi_term = "0.12" anyhow = { version = "1.0", features = ["backtrace"] } async-trait = "0.1" atty = "0.2" -bytes = "1.3" -clap = { version = "3.2", features = ["derive"] } +bytes = "1.4" +clap = { version = "4.0", features = ["derive"] } config = { version = "0.13", features = ["yaml"], default-features = false } console = { version = "0.15", default-features = false } console-subscriber = { version = "0.1", optional = true } data-encoding = "2.3" dialoguer = "0.10" futures = "0.3" -notify = "^5.0.0" +notify = "5.1" rcgen = { version = "0.10", features = ["zeroize"] } serde_json = "1.0" -serde_yaml = "0.8.23" +serde_yaml = "0.9" sea-orm = { version = "0.12.2", default-features = false } time = "0.3" tokio = { version = "1.20", features = ["tracing", "signal", "macros"] } @@ -29,7 +29,7 @@ tracing-subscriber = { version = "0.3", features = [ "env-filter", "local-time", ] } -uuid = "1.2" +uuid = "1.3" warpgate-admin = { version = "*", path = "../warpgate-admin" } warpgate-common = { version = "*", path = "../warpgate-common" } warpgate-core = { version = "*", path = "../warpgate-core" } diff --git a/warpgate/src/main.rs b/warpgate/src/main.rs index ee61a2f..b1739e5 100644 --- a/warpgate/src/main.rs +++ b/warpgate/src/main.rs @@ -5,7 +5,7 @@ mod logging; use std::path::PathBuf; use anyhow::Result; -use clap::{ArgAction, StructOpt}; +use clap::{ArgAction, Parser}; use logging::init_logging; use tracing::*;