From 27fd25dcb2aa6641cf58df979a3a5227d64cfffe Mon Sep 17 00:00:00 2001 From: Tim Bruijnzeels Date: Mon, 6 Sep 2021 13:38:17 +0200 Subject: [PATCH] Use async reqwest for openid connect checks (#645) PR #646 * cargo update * Use an enum instead of a trait (prepare to allow async) * Use async reqwest client for openid connect checks. * Move extract bearer token function to util::httpclient. Co-authored-by: Ximon Eighteen <3304436+ximon18@users.noreply.github.com> --- Cargo.lock | 1619 +++++------------ Cargo.toml | 3 +- src/commons/util/httpclient.rs | 42 +- src/daemon/auth/authorizer.rs | 118 +- src/daemon/auth/providers/admin_token.rs | 15 +- .../auth/providers/config_file/provider.rs | 19 +- .../providers/openid_connect/httpclient.rs | 200 +- .../auth/providers/openid_connect/provider.rs | 107 +- src/daemon/http/mod.rs | 8 +- src/daemon/krillserver.rs | 24 +- src/daemon/mq.rs | 3 - 11 files changed, 702 insertions(+), 1456 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d46e09a7..04ba0bff 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,9 +4,9 @@ version = 3 [[package]] name = "addr2line" -version = "0.14.1" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a55f82cfe485775d02112886f4169bde0c5894d75e79ead7eafe7e40a25e45f7" +checksum = "3e61f2b7f93d2c7d2b08263acaa4a363b3e276806c68af6134c44f523bf1aacd" dependencies = [ "gimli", ] @@ -25,9 +25,9 @@ checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" [[package]] name = "aho-corasick" -version = "0.7.15" +version = "0.7.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7404febffaa47dac81aa44dba71523c9d069b1bdc50a77db41195149e17f68e5" +checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" dependencies = [ "memchr", ] @@ -38,7 +38,7 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" dependencies = [ - "winapi 0.3.9", + "winapi", ] [[package]] @@ -47,21 +47,9 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" dependencies = [ - "winapi 0.3.9", + "winapi", ] -[[package]] -name = "arrayref" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" - -[[package]] -name = "arrayvec" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" - [[package]] name = "ascii" version = "1.0.0" @@ -70,9 +58,9 @@ checksum = "bbf56136a5198c7b01a49e3afcbef6cf84597273d298f54432926024107b0109" [[package]] name = "ascii-canvas" -version = "2.0.0" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff8eb72df928aafb99fe5d37b383f2fe25bd2a765e3e5f7c365916b6f2463a29" +checksum = "8824ecca2e851cec16968d54a01dd372ef8f95b244fb84b84e70128be347c3c6" dependencies = [ "term", ] @@ -85,15 +73,9 @@ checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" dependencies = [ "hermit-abi", "libc", - "winapi 0.3.9", + "winapi", ] -[[package]] -name = "autocfg" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d49d90015b3c36167a20fe2810c5cd875ad504b39cff3d4eae7977e6b7c1cb2" - [[package]] name = "autocfg" version = "1.0.1" @@ -102,27 +84,19 @@ checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" [[package]] name = "backtrace" -version = "0.3.56" +version = "0.3.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d117600f438b1707d4e4ae15d3595657288f8235a0eb593e80ecc98ab34e1bc" +checksum = "e7a905d892734eea339e896738c14b9afce22b5318f64b951e70bf3844419b01" dependencies = [ "addr2line", - "cfg-if 1.0.0", + "cc", + "cfg-if", "libc", "miniz_oxide", "object", "rustc-demangle", ] -[[package]] -name = "base64" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e" -dependencies = [ - "byteorder", -] - [[package]] name = "base64" version = "0.12.3" @@ -153,8 +127,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c16eb8ab9a5deef7188129b3ea73775a67fa07cc153ebe8d4b08ea21985d9c5b" dependencies = [ "backtrace", - "bytes 1.0.1", - "smallvec 1.6.1", + "bytes", + "smallvec", ] [[package]] @@ -174,20 +148,9 @@ checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" [[package]] name = "bitflags" -version = "1.2.1" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" - -[[package]] -name = "blake2b_simd" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afa748e348ad3be8263be728124b24a24f268266f6f5d58af9d75f6a40b5c587" -dependencies = [ - "arrayref", - "arrayvec", - "constant_time_eq", -] +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "block-buffer" @@ -200,44 +163,21 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.6.1" +version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63396b8a4b9de3f4fdfb320ab6080762242f66a8ef174c49d8e19b674db4cdbe" - -[[package]] -name = "byteorder" -version = "1.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" +checksum = "9c59e7af012c713f529e7a3ee57ce9b31ddd858d4b512923602f74608b009631" [[package]] name = "bytes" -version = "0.4.12" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c" -dependencies = [ - "byteorder", - "either", - "iovec", -] - -[[package]] -name = "bytes" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b700ce4376041dcd0a327fd0097c41095743c4c8af8887265942faf1100bd040" +checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8" [[package]] name = "cc" -version = "1.0.67" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3c69b077ad434294d3ce9f1f6143a2a4b89a8a2d54ef813d85003a4fd1137fd" - -[[package]] -name = "cfg-if" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" +checksum = "e70cc2f62c6ce1868963827bd677764c62d07c3d9a3e1fb1177ee1a9ab199eb2" [[package]] name = "cfg-if" @@ -256,7 +196,7 @@ dependencies = [ "num-traits", "serde", "time", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -291,56 +231,13 @@ dependencies = [ [[package]] name = "clokwerk" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9797a6d3acefa28d4cc62bf548b6ddc57b8ae51a43702d001cb46fba1dc48c1" +checksum = "7a99373edf782eec8fde0d52bd2f60e4ae5eaca31f1d2cf5aec68243849a37a9" dependencies = [ "chrono", ] -[[package]] -name = "cloudabi" -version = "0.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" -dependencies = [ - "bitflags", -] - -[[package]] -name = "constant_time_eq" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" - -[[package]] -name = "cookie" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "888604f00b3db336d2af898ec3c1d5d0ddf5e6d462220f2ededc33a87ac4bbd5" -dependencies = [ - "time", - "url 1.7.2", -] - -[[package]] -name = "cookie_store" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46750b3f362965f197996c4448e4a0935e791bf7d6631bfce9ee0af3d24c919c" -dependencies = [ - "cookie", - "failure", - "idna 0.1.5", - "log", - "publicsuffix", - "serde", - "serde_json", - "time", - "try_from", - "url 1.7.2", -] - [[package]] name = "core-foundation" version = "0.9.1" @@ -358,10 +255,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ea221b5284a47e40033bf9b66f35f984ec0ea2931eb03505246cd27a963f981b" [[package]] -name = "cpuid-bool" -version = "0.1.2" +name = "cpufeatures" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8aebca1129a03dc6dc2b127edd729435bbc4a37e1d5f4d7513165089ceb02634" +checksum = "95059428f66df56b63431fdb4e1947ed2190586af5c5a8a8b71122bdf5a7f469" +dependencies = [ + "libc", +] [[package]] name = "crc32fast" @@ -369,66 +269,7 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81156fece84ab6a9f2afdb109ce3ae577e42b1228441eded99bd77f627953b1a" dependencies = [ - "cfg-if 1.0.0", -] - -[[package]] -name = "crossbeam-deque" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f02af974daeee82218205558e51ec8768b48cf524bd01d550abe5573a608285" -dependencies = [ - "crossbeam-epoch", - "crossbeam-utils 0.7.2", - "maybe-uninit", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "058ed274caafc1f60c4997b5fc07bf7dc7cca454af7c6e81edffe5f33f70dace" -dependencies = [ - "autocfg 1.0.1", - "cfg-if 0.1.10", - "crossbeam-utils 0.7.2", - "lazy_static", - "maybe-uninit", - "memoffset", - "scopeguard", -] - -[[package]] -name = "crossbeam-queue" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "774ba60a54c213d409d5353bda12d49cd68d14e45036a285234c8d6f91f92570" -dependencies = [ - "cfg-if 0.1.10", - "crossbeam-utils 0.7.2", - "maybe-uninit", -] - -[[package]] -name = "crossbeam-utils" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8" -dependencies = [ - "autocfg 1.0.1", - "cfg-if 0.1.10", - "lazy_static", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7e9d99fa91428effe99c5c6d4634cdeba32b8cf784fc428a2a687f61a952c49" -dependencies = [ - "autocfg 1.0.1", - "cfg-if 1.0.0", - "lazy_static", + "cfg-if", ] [[package]] @@ -439,9 +280,9 @@ checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" [[package]] name = "crypto-mac" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4857fd85a0c34b3c3297875b747c1e02e06b6a0ea32dd892d8192b9ce0813ea6" +checksum = "bff07008ec701e8028e2ceb8f83f0e4274ee62bd2dbdc4fefff2e9a91824081a" dependencies = [ "generic-array", "subtle", @@ -449,12 +290,12 @@ dependencies = [ [[package]] name = "ctrlc" -version = "3.1.9" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "232295399409a8b7ae41276757b5a1cc21032848d42bff2352261f958b3ca29a" +checksum = "377c9b002a72a0b2c1a18c62e2f3864bdfea4a015e3683a96e24aa45dd6c02d1" dependencies = [ "nix", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -479,21 +320,25 @@ dependencies = [ ] [[package]] -name = "dirs" -version = "1.0.5" +name = "dirs-next" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fd78930633bd1c6e35c4b42b1df7b0cbc6bc191146e512bb3bedf243fcc3901" +checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" dependencies = [ - "libc", - "redox_users", - "winapi 0.3.9", + "cfg-if", + "dirs-sys-next", ] [[package]] -name = "dtoa" -version = "0.4.8" +name = "dirs-sys-next" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0" +checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" +dependencies = [ + "libc", + "redox_users", + "winapi", +] [[package]] name = "either" @@ -516,7 +361,7 @@ version = "0.8.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "80df024fbc5ac80f87dfef0d9f5209a252f2a497f7f42944cff24d8253cac065" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", ] [[package]] @@ -528,28 +373,6 @@ dependencies = [ "backtrace", ] -[[package]] -name = "failure" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d32e9bd16cc02eae7db7ef620b392808b89f6a5e16bb3497d159c6b92a0f4f86" -dependencies = [ - "backtrace", - "failure_derive", -] - -[[package]] -name = "failure_derive" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "synstructure", -] - [[package]] name = "fern" version = "0.5.9" @@ -567,18 +390,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37ab347416e802de484e4d03c7316c48f1ecb56574dfd4a46a80f173ce1de04d" -[[package]] -name = "flate2" -version = "1.0.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd3aec53de10fe96d7d8c565eb17f2c687bb5518a2ec453b5b1252964526abe0" -dependencies = [ - "cfg-if 1.0.0", - "crc32fast", - "libc", - "miniz_oxide", -] - [[package]] name = "fnv" version = "1.0.7" @@ -607,42 +418,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" dependencies = [ "matches", - "percent-encoding 2.1.0", + "percent-encoding", ] -[[package]] -name = "fuchsia-cprng" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" - -[[package]] -name = "fuchsia-zircon" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" -dependencies = [ - "bitflags", - "fuchsia-zircon-sys", -] - -[[package]] -name = "fuchsia-zircon-sys" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" - [[package]] name = "futures" -version = "0.1.31" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a471a38ef8ed83cd6e40aa59c1ffe17db6855c18e3604d9c4ed8c08ebc28678" - -[[package]] -name = "futures" -version = "0.3.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9d5813545e459ad3ca1bff9915e9ad7f1a47dc6a91b627ce321d5863b7dd253" +checksum = "a12aa0eb539080d55c3f2d45a67c3b58b6b0773c1a3ca2dfec66d58c97fd66ca" dependencies = [ "futures-channel", "futures-core", @@ -655,9 +438,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.14" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce79c6a52a299137a6013061e0cf0e688fce5d7f1bc60125f520912fdb29ec25" +checksum = "5da6ba8c3bb3c165d3c7319fc1cc8304facf1fb8db99c5de877183c08a273888" dependencies = [ "futures-core", "futures-sink", @@ -665,25 +448,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.14" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "098cd1c6dda6ca01650f1a37a794245eb73181d0d4d4e955e2f3c37db7af1815" - -[[package]] -name = "futures-cpupool" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab90cde24b3319636588d0c35fe03b1333857621051837ed769faefb4c2162e4" -dependencies = [ - "futures 0.1.31", - "num_cpus", -] +checksum = "88d1c26957f23603395cd326b0ffe64124b818f4449552f960d815cfba83a53d" [[package]] name = "futures-executor" -version = "0.3.14" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10f6cb7042eda00f0049b1d2080aa4b93442997ee507eb3828e8bd7577f94c9d" +checksum = "45025be030969d763025784f7f355043dc6bc74093e4ecc5000ca4dc50d8745c" dependencies = [ "futures-core", "futures-task", @@ -692,16 +465,17 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.14" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "365a1a1fb30ea1c03a830fdb2158f5236833ac81fa0ad12fe35b29cddc35cb04" +checksum = "522de2a0fe3e380f1bc577ba0474108faf3f6b18321dbf60b3b9c39a75073377" [[package]] name = "futures-macro" -version = "0.3.14" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "668c6733a182cd7deb4f1de7ba3bf2120823835b3bcfbeacf7d2c4a773c1bb8b" +checksum = "18e4a4b95cea4b4ccbcf1c5675ca7c4ee4e9e75eb79944d07defde18068f79bb" dependencies = [ + "autocfg", "proc-macro-hack", "proc-macro2", "quote", @@ -710,22 +484,23 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.14" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5629433c555de3d82861a7a4e3794a4c40040390907cfbfd7143a92a426c23" +checksum = "36ea153c13024fe480590b3e3d4cad89a0cfacecc24577b68f86c6ced9c2bc11" [[package]] name = "futures-task" -version = "0.3.14" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba7aa51095076f3ba6d9a1f702f74bd05ec65f555d70d2033d55ba8d69f581bc" +checksum = "1d3d00f4eddb73e498a54394f228cd55853bdf059259e8e7bc6e69d408892e99" [[package]] name = "futures-util" -version = "0.3.14" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c144ad54d60f23927f0a6b6d816e4271278b64f005ad65e4e35291d2de9c025" +checksum = "36568465210a3a6ee45e1f165136d68671471a501e632e9a98d96872222b5481" dependencies = [ + "autocfg", "futures-channel", "futures-core", "futures-io", @@ -756,76 +531,60 @@ version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "libc", "wasi 0.9.0+wasi-snapshot-preview1", ] [[package]] name = "getrandom" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9495705279e7140bf035dde1f6e750c162df8b625267cd52cc44e0b156732c8" +checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", + "js-sys", "libc", "wasi 0.10.0+wasi-snapshot-preview1", + "wasm-bindgen", ] [[package]] name = "gimli" -version = "0.23.0" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6503fe142514ca4799d4c26297c4248239fe8838d827db6bd6065c6ed29a6ce" +checksum = "f0a01e0497841a3b2db4f8afa483cce65f7e96a3498bd6c541734792aeac8fe7" [[package]] name = "h2" -version = "0.1.26" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5b34c246847f938a410a03c5458c7fee2274436675e76d8b903c08efc29c462" +checksum = "d7f3675cfef6a30c8031cf9e6493ebdc3bb3272a3fea3923c4210d1830e6a472" dependencies = [ - "byteorder", - "bytes 0.4.12", - "fnv", - "futures 0.1.31", - "http 0.1.21", - "indexmap", - "log", - "slab", - "string", - "tokio-io", -] - -[[package]] -name = "h2" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "825343c4eef0b63f541f8903f395dc5beb362a979b5799a84062527ef1e37726" -dependencies = [ - "bytes 1.0.1", + "bytes", "fnv", "futures-core", "futures-sink", "futures-util", - "http 0.2.4", + "http", "indexmap", "slab", - "tokio 1.7.1", + "tokio", "tokio-util", "tracing", ] [[package]] name = "hashbrown" -version = "0.9.1" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04" +checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" [[package]] name = "hermit-abi" -version = "0.1.18" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "322f4de77956e22ed0e5032c359a0f1273f1f7f0d79bfa3b8ffbc730d7fbcc5c" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" dependencies = [ "libc", ] @@ -846,56 +605,33 @@ dependencies = [ "digest", ] -[[package]] -name = "http" -version = "0.1.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6ccf5ede3a895d8856620237b2f02972c1bbc78d2965ad7fe8838d4a0ed41f0" -dependencies = [ - "bytes 0.4.12", - "fnv", - "itoa", -] - [[package]] name = "http" version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "527e8c9ac747e28542699a951517aa9a6945af506cd1f2e1b53a576c17b6cc11" dependencies = [ - "bytes 1.0.1", + "bytes", "fnv", "itoa", ] [[package]] name = "http-body" -version = "0.1.0" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6741c859c1b2463a423a1dbce98d418e6c3c3fc720fb0d45528657320920292d" +checksum = "399c583b2979440c60be0821a6199eca73bc3c8dcd9d070d75ac726e2c6186e5" dependencies = [ - "bytes 0.4.12", - "futures 0.1.31", - "http 0.1.21", - "tokio-buf", -] - -[[package]] -name = "http-body" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60daa14be0e0786db0f03a9e57cb404c9d756eed2b6c62b9ea98ec5743ec75a9" -dependencies = [ - "bytes 1.0.1", - "http 0.2.4", + "bytes", + "http", "pin-project-lite", ] [[package]] name = "httparse" -version = "1.4.1" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3a87b616e37e93c22fb19bcd386f02f3af5ea98a25670ad0fce773de23c5e68" +checksum = "acd94fdbe1d4ff688b67b04eee2e17bd50995534a61539e45adfefb45e5e5503" [[package]] name = "httpdate" @@ -905,69 +641,26 @@ checksum = "6456b8a6c8f33fee7d958fcd1b60d55b11940a79e63ae87013e6d22e26034440" [[package]] name = "hyper" -version = "0.12.36" +version = "0.14.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c843caf6296fc1f93444735205af9ed4e109a539005abb2564ae1d6fad34c52" +checksum = "13f67199e765030fa08fe0bd581af683f0d5bc04ea09c2b1102012c5fb90e7fd" dependencies = [ - "bytes 0.4.12", - "futures 0.1.31", - "futures-cpupool", - "h2 0.1.26", - "http 0.1.21", - "http-body 0.1.0", - "httparse", - "iovec", - "itoa", - "log", - "net2", - "rustc_version", - "time", - "tokio 0.1.22", - "tokio-buf", - "tokio-executor", - "tokio-io", - "tokio-reactor", - "tokio-tcp", - "tokio-threadpool", - "tokio-timer", - "want 0.2.0", -] - -[[package]] -name = "hyper" -version = "0.14.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07d6baa1b441335f3ce5098ac421fb6547c46dda735ca1bc6d0153c838f9dd83" -dependencies = [ - "bytes 1.0.1", + "bytes", "futures-channel", "futures-core", "futures-util", - "h2 0.3.3", - "http 0.2.4", - "http-body 0.4.2", + "h2", + "http", + "http-body", "httparse", "httpdate", "itoa", "pin-project-lite", "socket2", - "tokio 1.7.1", + "tokio", "tower-service", "tracing", - "want 0.3.0", -] - -[[package]] -name = "hyper-tls" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a800d6aa50af4b5850b2b0f659625ce9504df908e9733b635720483be26174f" -dependencies = [ - "bytes 0.4.12", - "futures 0.1.31", - "hyper 0.12.36", - "native-tls", - "tokio-io", + "want", ] [[package]] @@ -976,29 +669,18 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" dependencies = [ - "bytes 1.0.1", - "hyper 0.14.9", + "bytes", + "hyper", "native-tls", - "tokio 1.7.1", + "tokio", "tokio-native-tls", ] [[package]] name = "idna" -version = "0.1.5" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e" -dependencies = [ - "matches", - "unicode-bidi", - "unicode-normalization", -] - -[[package]] -name = "idna" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89829a5d69c23d348314a7ac337fe39173b61149a9864deabd260983aed48c21" +checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" dependencies = [ "matches", "unicode-bidi", @@ -1018,11 +700,11 @@ dependencies = [ [[package]] name = "indexmap" -version = "1.6.2" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "824845a0bf897a9042383849b02c1bc219c2383772efcd5c6f9766fa4b81aef3" +checksum = "bc633605454125dec4b66843673f01c7df2b89479b32e0ed634e43a91cff62a5" dependencies = [ - "autocfg 1.0.1", + "autocfg", "hashbrown", ] @@ -1032,23 +714,14 @@ version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "566d5aa3b5cc5c5809cc1a9c9588d917a634248bfc58f7ea14e354e71595a32c" dependencies = [ - "smallvec 1.6.1", -] - -[[package]] -name = "iovec" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e" -dependencies = [ - "libc", + "smallvec", ] [[package]] name = "ipnet" -version = "2.3.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47be2f14c678be2fdcab04ab1171db51b2762ce6f0a8ee87c8dd4a04ed216135" +checksum = "68f2d64f2edebec4ce84ad108148e67e1064789bee435edc5b60ad398714a3a9" [[package]] name = "itertools" @@ -1061,18 +734,18 @@ dependencies = [ [[package]] name = "itertools" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37d572918e350e82412fe766d24b15e6682fb2ed2bbe018280caa810397cb319" +checksum = "69ddb889f9d0d08a67338271fa9b62996bc788c7796a5c18cf057420aaed5eaf" dependencies = [ "either", ] [[package]] name = "itoa" -version = "0.4.7" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736" +checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" [[package]] name = "jmespatch" @@ -1088,23 +761,13 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.50" +version = "0.3.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d99f9e3e84b8f67f846ef5b4cbbc3b1c29f6c759fcbce6f01aa0e73d932a24c" +checksum = "e4bf49d50e2961077d9c99f4b7997d770a1114f087c3c2e0069b36c13fc2979d" dependencies = [ "wasm-bindgen", ] -[[package]] -name = "kernel32-sys" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" -dependencies = [ - "winapi 0.2.8", - "winapi-build", -] - [[package]] name = "krill" version = "0.9.1" @@ -1112,16 +775,16 @@ dependencies = [ "base64 0.13.0", "basic-cookies", "bcder", - "bytes 1.0.1", + "bytes", "chrono", "clap", "clokwerk", "ctrlc", "fern", - "futures 0.3.14", + "futures", "futures-util", "hex", - "hyper 0.14.9", + "hyper", "intervaltree", "jmespatch", "libc", @@ -1131,8 +794,7 @@ dependencies = [ "openssl", "oso", "regex", - "reqwest 0.11.4", - "reqwest 0.9.24", + "reqwest", "rpassword", "rpki", "rustc_version", @@ -1141,27 +803,27 @@ dependencies = [ "serde_json", "syslog", "tiny_http", - "tokio 1.7.1", + "tokio", "tokio-rustls", "toml", "unicode-normalization", "urlparse", - "uuid 0.8.2", + "uuid", "xml-rs", ] [[package]] name = "lalrpop" -version = "0.19.5" +version = "0.19.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46962a8c71b91c3524b117dfdd70844d4265a173c4c9109f98171aebdcf1195f" +checksum = "b15174f1c529af5bf1283c3bc0058266b483a67156f79589fab2a25e23cf8988" dependencies = [ "ascii-canvas", "atty", "bit-set", "diff", "ena", - "itertools 0.10.0", + "itertools 0.10.1", "lalrpop-util", "petgraph", "pico-args", @@ -1175,9 +837,9 @@ dependencies = [ [[package]] name = "lalrpop-util" -version = "0.19.5" +version = "0.19.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a708007b751af124d09e9c5d97515257902bc6b486a56b40bcafd939e8ff467" +checksum = "d3e58cce361efcc90ba8a0a5f982c741ff86b603495bb15a998412e957dcd278" dependencies = [ "regex", ] @@ -1190,35 +852,28 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.93" +version = "0.2.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9385f66bf6105b241aa65a61cb923ef20efc665cb9f9bb50ac2f0c4b7f378d41" +checksum = "3cb00336871be5ed2c8ed44b60ae9959dc5b9f08539422ed43f09e34ecaeba21" [[package]] name = "libflate" -version = "1.0.4" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "158ae2ca09a761eaf6050894f5a6f013f2773dafe24f67bfa73a7504580e2916" +checksum = "16364af76ebb39b5869bb32c81fa93573267cd8c62bb3474e28d78fac3fb141e" dependencies = [ "adler32", "crc32fast", "libflate_lz77", - "rle-decode-fast", ] [[package]] name = "libflate_lz77" -version = "1.0.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3286f09f7d4926fc486334f28d8d2e6ebe4f7f9994494b6dab27ddfad2c9b11b" - -[[package]] -name = "lock_api" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4da24a77a3d8a6d4862d95f72e6fdb9c09a643ecdb402d754004a557f2bec75" +checksum = "39a734c0493409afcd49deee13c006a04e3586b9761a03543c6272c9c51f2f5a" dependencies = [ - "scopeguard", + "rle-decode-fast", ] [[package]] @@ -1227,7 +882,7 @@ version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", ] [[package]] @@ -1247,29 +902,23 @@ dependencies = [ [[package]] name = "matches" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" - -[[package]] -name = "maybe-uninit" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" +checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" [[package]] name = "memchr" -version = "2.3.4" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525" +checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" [[package]] name = "memoffset" -version = "0.5.6" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "043175f069eda7b85febe4a74abbaeff828d9f8b448515d3151a14a3542811aa" +checksum = "59accc507f1338036a0477ef61afdae33cde60840f4dfe481319ce3ad116ddf9" dependencies = [ - "autocfg 1.0.1", + "autocfg", ] [[package]] @@ -1278,16 +927,6 @@ version = "0.3.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" -[[package]] -name = "mime_guess" -version = "2.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2684d4c2e97d99848d30b324b00c8fcc7e5c897b7cbb5819b09e7c90e8baf212" -dependencies = [ - "mime", - "unicase", -] - [[package]] name = "miniz_oxide" version = "0.4.4" @@ -1295,26 +934,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b" dependencies = [ "adler", - "autocfg 1.0.1", -] - -[[package]] -name = "mio" -version = "0.6.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4afd66f5b91bf2a3bc13fad0e21caedac168ca4c707504e75585648ae80e4cc4" -dependencies = [ - "cfg-if 0.1.10", - "fuchsia-zircon", - "fuchsia-zircon-sys", - "iovec", - "kernel32-sys", - "libc", - "log", - "miow 0.2.2", - "net2", - "slab", - "winapi 0.2.8", + "autocfg", ] [[package]] @@ -1325,21 +945,9 @@ checksum = "8c2bdb6314ec10835cd3293dd268473a835c02b7b352e788be788b3c6ca6bb16" dependencies = [ "libc", "log", - "miow 0.3.7", + "miow", "ntapi", - "winapi 0.3.9", -] - -[[package]] -name = "miow" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebd808424166322d4a38da87083bfddd3ac4c131334ed55856112eb06d46944d" -dependencies = [ - "kernel32-sys", - "net2", - "winapi 0.2.8", - "ws2_32-sys", + "winapi", ] [[package]] @@ -1348,14 +956,14 @@ version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21" dependencies = [ - "winapi 0.3.9", + "winapi", ] [[package]] name = "native-tls" -version = "0.2.7" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8d96b2e1c8da3957d58100b09f102c6d9cfdfced01b7ec5a8974044bb09dbd4" +checksum = "48ba9f7719b5a0f42f338907614285fb5fd70e53858141f69898a1fb7203b24d" dependencies = [ "lazy_static", "libc", @@ -1369,17 +977,6 @@ dependencies = [ "tempfile", ] -[[package]] -name = "net2" -version = "0.2.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "391630d12b68002ae1e25e8f974306474966550ad82dac6886fb8910c19568ae" -dependencies = [ - "cfg-if 0.1.10", - "libc", - "winapi 0.3.9", -] - [[package]] name = "new_debug_unreachable" version = "1.0.4" @@ -1388,14 +985,15 @@ checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" [[package]] name = "nix" -version = "0.20.0" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa9b4819da1bc61c0ea48b63b7bc8604064dd43013e7cc325df098d49cd7c18a" +checksum = "cf1e25ee6b412c2a1e3fcb6a4499a5c1bfe7f43e014bdce9a6b6666e5aa2d187" dependencies = [ "bitflags", "cc", - "cfg-if 1.0.0", + "cfg-if", "libc", + "memoffset", ] [[package]] @@ -1404,7 +1002,41 @@ version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f6bb902e437b6d86e03cce10a7e2af662292c5dfef23b65899ea3ac9354ad44" dependencies = [ - "winapi 0.3.9", + "winapi", +] + +[[package]] +name = "num" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43db66d1170d347f9a065114077f7dccb00c1b9478c89384490a3425279a4606" +dependencies = [ + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76e97c412795abf6c24ba30055a8f20642ea57ca12875220b854cfa501bf1e48" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-complex" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26873667bbbb7c5182d4a37c1add32cdf09f841af72da53318fdb81543c15085" +dependencies = [ + "num-traits", ] [[package]] @@ -1413,7 +1045,30 @@ version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" dependencies = [ - "autocfg 1.0.1", + "autocfg", + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2021c8337a54d21aca0d59a92577a029af9431cb59b909b03252b9c164fad59" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d41702bd167c2df5520b384281bc111a4b5efcf7fbc4c9c222c815b07e0a6a6a" +dependencies = [ + "autocfg", + "num-bigint", + "num-integer", "num-traits", ] @@ -1423,7 +1078,7 @@ version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" dependencies = [ - "autocfg 1.0.1", + "autocfg", ] [[package]] @@ -1438,33 +1093,37 @@ dependencies = [ [[package]] name = "oauth2" -version = "4.0.0" +version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10ad4d0136960353683efa6160b9c867088b4b8f567b762cd37420a10ce32703" +checksum = "80e47cfc4c0a1a519d9a025ebfbac3a2439d1b5cdf397d72dcb79b11d9920dab" dependencies = [ - "base64 0.12.3", + "base64 0.13.0", "chrono", - "http 0.2.4", - "rand 0.7.3", + "getrandom 0.2.3", + "http", + "rand 0.8.4", "serde", "serde_json", "serde_path_to_error", "sha2", "thiserror", - "url 2.2.1", + "url", ] [[package]] name = "object" -version = "0.23.0" +version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9a7ab5d64814df0fe4a4b5ead45ed6c5f181ee3ff04ba344313a6c80446c5d4" +checksum = "39f37e50073ccad23b6d09bcb5b263f4e76d3bb6038e4a3c08e52162ffa8abc2" +dependencies = [ + "memchr", +] [[package]] name = "once_cell" -version = "1.7.2" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af8b08b04175473088b46763e51ee54da5f9a164bc162f615b91bc179dbf15a3" +checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56" [[package]] name = "opaque-debug" @@ -1474,13 +1133,13 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] name = "openidconnect" -version = "2.0.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18109beef43a1435463ec7b575b3bd5ab94084bc331b317e12b5e9fdb17143f4" +checksum = "a42ff51db0f23ae55dd6f234a15ed7bb468bc97938670693a3eaa42869110167" dependencies = [ "base64 0.12.3", "chrono", - "http 0.2.4", + "http", "itertools 0.9.0", "log", "oauth2", @@ -1493,17 +1152,17 @@ dependencies = [ "serde_path_to_error", "thiserror", "untrusted", - "url 2.2.1", + "url", ] [[package]] name = "openssl" -version = "0.10.33" +version = "0.10.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a61075b62a23fef5a29815de7536d940aa35ce96d18ce0cc5076272db678a577" +checksum = "8d9facdb76fec0b73c406f125d44d86fdad818d66fef0531eec9233ca425ff4a" dependencies = [ "bitflags", - "cfg-if 1.0.0", + "cfg-if", "foreign-types", "libc", "once_cell", @@ -1512,26 +1171,26 @@ dependencies = [ [[package]] name = "openssl-probe" -version = "0.1.2" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de" +checksum = "28988d872ab76095a6e6ac88d99b54fd267702734fd7ffe610ca27f533ddb95a" [[package]] name = "openssl-src" -version = "111.15.0+1.1.1k" +version = "111.16.0+1.1.1l" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1a5f6ae2ac04393b217ea9f700cd04fa9bf3d93fae2872069f3d15d908af70a" +checksum = "7ab2173f69416cf3ec12debb5823d244127d23a9b127d5a5189aa97c5fa2859f" dependencies = [ "cc", ] [[package]] name = "openssl-sys" -version = "0.9.61" +version = "0.9.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "313752393519e876837e09e1fa183ddef0be7735868dced3196f4472d536277f" +checksum = "1996d2d305e561b70d1ee0c53f1542833f4e1ac6ce9a6708b6ff2738ca67dc82" dependencies = [ - "autocfg 1.0.1", + "autocfg", "cc", "libc", "openssl-src", @@ -1550,9 +1209,9 @@ dependencies = [ [[package]] name = "oso" -version = "0.12.0" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbe8386845c9887d2473bef7eb818e932f4697af477cc651711ddf476b550595" +checksum = "aec41e2da1ce3a82eb807396f802c172f08aa03e1be31e5df49592a04e12c8c7" dependencies = [ "impl-trait-for-tuples", "lazy_static", @@ -1563,32 +1222,6 @@ dependencies = [ "tracing-subscriber", ] -[[package]] -name = "parking_lot" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f842b1982eb6c2fe34036a4fbfb06dd185a3f5c8edfaacdf7d1ea10b07de6252" -dependencies = [ - "lock_api", - "parking_lot_core", - "rustc_version", -] - -[[package]] -name = "parking_lot_core" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b876b1b9e7ac6e1a74a6da34d25c42e17e8862aa409cbbbdcfc8d86c6f3bc62b" -dependencies = [ - "cfg-if 0.1.10", - "cloudabi", - "libc", - "redox_syscall 0.1.57", - "rustc_version", - "smallvec 0.6.14", - "winapi 0.3.9", -] - [[package]] name = "pbkdf2" version = "0.7.5" @@ -1598,12 +1231,6 @@ dependencies = [ "crypto-mac", ] -[[package]] -name = "percent-encoding" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" - [[package]] name = "percent-encoding" version = "2.1.0" @@ -1631,15 +1258,15 @@ dependencies = [ [[package]] name = "pico-args" -version = "0.4.0" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d70072c20945e1ab871c472a285fc772aefd4f5407723c206242f2c6f94595d6" +checksum = "db8bcd96cb740d03149cbad5518db9fd87126a10ab519c011893b1754134c468" [[package]] name = "pin-project-lite" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc0e1f259c92177c30a4c9d177246edd0a3568b25756a977d0632cf8fa37e905" +checksum = "8d31d11c69a6b52a174b42bdc0c30e5e11670f90788b2c471c31c1d17d449443" [[package]] name = "pin-utils" @@ -1655,9 +1282,9 @@ checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c" [[package]] name = "polar-core" -version = "0.12.0" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f518b196367cebf6c8fc7ccfc317999371503a8f674315006d7671a40bf761f7" +checksum = "53d2b6ee5b5ff6312ca55e2ba75fbd438c72bc041c799055388d815726eca69b" dependencies = [ "js-sys", "lalrpop", @@ -1695,23 +1322,13 @@ checksum = "bc881b2c22681370c6a780e47af9840ef841837bc98118431d4e1868bd0c1086" [[package]] name = "proc-macro2" -version = "1.0.26" +version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a152013215dca273577e18d2bf00fa862b89b24169fb78c4c95aeb07992c9cec" +checksum = "5c7ed8b8c7b886ea3ed7dde405212185f423ab44682667c8c6dd14aa1d9f6612" dependencies = [ "unicode-xid", ] -[[package]] -name = "publicsuffix" -version = "1.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95b4ce31ff0a27d93c8de1849cf58162283752f065a90d508f1105fa6c9a213f" -dependencies = [ - "idna 0.2.2", - "url 2.2.1", -] - [[package]] name = "quick-xml" version = "0.22.0" @@ -1730,25 +1347,6 @@ dependencies = [ "proc-macro2", ] -[[package]] -name = "rand" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" -dependencies = [ - "autocfg 0.1.7", - "libc", - "rand_chacha 0.1.1", - "rand_core 0.4.2", - "rand_hc 0.1.0", - "rand_isaac", - "rand_jitter", - "rand_os", - "rand_pcg", - "rand_xorshift", - "winapi 0.3.9", -] - [[package]] name = "rand" version = "0.7.3" @@ -1764,24 +1362,14 @@ dependencies = [ [[package]] name = "rand" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ef9e7e66b4468674bfcb0c81af8b7fa0bb154fa9f28eb840da5c447baeb8d7e" +checksum = "2e7573632e6454cf6b99d7aac4ccca54be06da05aca2ef7423d22d27d4d4bcd8" dependencies = [ "libc", - "rand_chacha 0.3.0", - "rand_core 0.6.2", - "rand_hc 0.3.0", -] - -[[package]] -name = "rand_chacha" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" -dependencies = [ - "autocfg 0.1.7", - "rand_core 0.3.1", + "rand_chacha 0.3.1", + "rand_core 0.6.3", + "rand_hc 0.3.1", ] [[package]] @@ -1796,29 +1384,14 @@ dependencies = [ [[package]] name = "rand_chacha" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e12735cf05c9e10bf21534da50a147b924d555dc7a547c42e6bb2d5b6017ae0d" -dependencies = [ - "ppv-lite86", - "rand_core 0.6.2", -] - -[[package]] -name = "rand_core" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ - "rand_core 0.4.2", + "ppv-lite86", + "rand_core 0.6.3", ] -[[package]] -name = "rand_core" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" - [[package]] name = "rand_core" version = "0.5.1" @@ -1830,20 +1403,11 @@ dependencies = [ [[package]] name = "rand_core" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34cf66eb183df1c5876e2dcf6b13d57340741e8dc255b48e40a26de954d06ae7" +checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" dependencies = [ - "getrandom 0.2.2", -] - -[[package]] -name = "rand_hc" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" -dependencies = [ - "rand_core 0.3.1", + "getrandom 0.2.3", ] [[package]] @@ -1857,106 +1421,37 @@ dependencies = [ [[package]] name = "rand_hc" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3190ef7066a446f2e7f42e239d161e905420ccab01eb967c9eb27d21b2322a73" +checksum = "d51e9f596de227fda2ea6c84607f5558e196eeaf43c986b724ba4fb8fdf497e7" dependencies = [ - "rand_core 0.6.2", -] - -[[package]] -name = "rand_isaac" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08" -dependencies = [ - "rand_core 0.3.1", -] - -[[package]] -name = "rand_jitter" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b" -dependencies = [ - "libc", - "rand_core 0.4.2", - "winapi 0.3.9", -] - -[[package]] -name = "rand_os" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" -dependencies = [ - "cloudabi", - "fuchsia-cprng", - "libc", - "rand_core 0.4.2", - "rdrand", - "winapi 0.3.9", -] - -[[package]] -name = "rand_pcg" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44" -dependencies = [ - "autocfg 0.1.7", - "rand_core 0.4.2", -] - -[[package]] -name = "rand_xorshift" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c" -dependencies = [ - "rand_core 0.3.1", -] - -[[package]] -name = "rdrand" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" -dependencies = [ - "rand_core 0.3.1", + "rand_core 0.6.3", ] [[package]] name = "redox_syscall" -version = "0.1.57" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce" - -[[package]] -name = "redox_syscall" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94341e4e44e24f6b591b59e47a8a027df12e008d73fd5672dbea9cc22f4507d9" +checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff" dependencies = [ "bitflags", ] [[package]] name = "redox_users" -version = "0.3.5" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de0737333e7a9502c789a36d7c7fa6092a49895d4faa31ca5df163857ded2e9d" +checksum = "528532f3d801c87aec9def2add9ca802fe569e44a544afe633765267840abe64" dependencies = [ - "getrandom 0.1.16", - "redox_syscall 0.1.57", - "rust-argon2", + "getrandom 0.2.3", + "redox_syscall", ] [[package]] name = "regex" -version = "1.4.5" +version = "1.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "957056ecddbeba1b26965114e191d2e8589ce74db242b6ea25fc4062427a5c19" +checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461" dependencies = [ "aho-corasick", "memchr", @@ -1965,19 +1460,18 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae1ded71d66a4a97f5e961fd0cb25a5f366a42a41570d16a763a69c092c26ae4" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" dependencies = [ - "byteorder", "regex-syntax", ] [[package]] name = "regex-syntax" -version = "0.6.23" +version = "0.6.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24d5f089152e60f62d28b835fbff2cd2e8dc0baf1ac13343bef92ab7eed84548" +checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" [[package]] name = "remove_dir_all" @@ -1985,41 +1479,7 @@ version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" dependencies = [ - "winapi 0.3.9", -] - -[[package]] -name = "reqwest" -version = "0.9.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f88643aea3c1343c804950d7bf983bd2067f5ab59db6d613a08e05572f2714ab" -dependencies = [ - "base64 0.10.1", - "bytes 0.4.12", - "cookie", - "cookie_store", - "encoding_rs", - "flate2", - "futures 0.1.31", - "http 0.1.21", - "hyper 0.12.36", - "hyper-tls 0.3.2", - "log", - "mime", - "mime_guess", - "native-tls", - "serde", - "serde_json", - "serde_urlencoded 0.5.5", - "time", - "tokio 0.1.22", - "tokio-executor", - "tokio-io", - "tokio-threadpool", - "tokio-timer", - "url 1.7.2", - "uuid 0.7.4", - "winreg 0.6.2", + "winapi", ] [[package]] @@ -2029,32 +1489,32 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "246e9f61b9bb77df069a947682be06e31ac43ea37862e244a69f177694ea6d22" dependencies = [ "base64 0.13.0", - "bytes 1.0.1", + "bytes", "encoding_rs", "futures-core", "futures-util", - "http 0.2.4", - "http-body 0.4.2", - "hyper 0.14.9", - "hyper-tls 0.5.0", + "http", + "http-body", + "hyper", + "hyper-tls", "ipnet", "js-sys", "lazy_static", "log", "mime", "native-tls", - "percent-encoding 2.1.0", + "percent-encoding", "pin-project-lite", "serde", "serde_json", - "serde_urlencoded 0.7.0", - "tokio 1.7.1", + "serde_urlencoded", + "tokio", "tokio-native-tls", - "url 2.2.1", + "url", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "winreg 0.7.0", + "winreg", ] [[package]] @@ -2069,7 +1529,7 @@ dependencies = [ "spin", "untrusted", "web-sys", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -2085,7 +1545,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ffc936cf8a7ea60c58f030fd36a612a48f440610214dc54bc36431f9ea0c3efb" dependencies = [ "libc", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -2096,33 +1556,21 @@ checksum = "718f0d99ad56874728162d2f082e43c2cb378ab62b87202cdf806b9fd13b2d0a" dependencies = [ "base64 0.13.0", "bcder", - "bytes 1.0.1", + "bytes", "chrono", "log", "quick-xml", "ring", "serde", "untrusted", - "uuid 0.8.2", -] - -[[package]] -name = "rust-argon2" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b18820d944b33caa75a71378964ac46f58517c92b6ae5f762636247c09e78fb" -dependencies = [ - "base64 0.13.0", - "blake2b_simd", - "constant_time_eq", - "crossbeam-utils 0.8.3", + "uuid", ] [[package]] name = "rustc-demangle" -version = "0.1.18" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e3bad0ee36814ca07d7968269dd4b7ec89ec2da10c4bb613928d3077083c232" +checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" [[package]] name = "rustc_version" @@ -2146,6 +1594,12 @@ dependencies = [ "webpki", ] +[[package]] +name = "rustversion" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61b3909d758bb75c79f23d4736fac9433868679d3ad2ea7a61e3c25cfda9a088" + [[package]] name = "ryu" version = "1.0.5" @@ -2168,15 +1622,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f05ba609c234e60bee0d547fe94a4c7e9da733d1c962cf6e59efa4cd9c8bc75" dependencies = [ "lazy_static", - "winapi 0.3.9", + "winapi", ] -[[package]] -name = "scopeguard" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" - [[package]] name = "scrypt" version = "0.6.5" @@ -2201,22 +1649,23 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.2.0" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3670b1d2fdf6084d192bc71ead7aabe6c06aa2ea3fbd9cc3ac111fa5c2b1bd84" +checksum = "6c1016a0b396a0e68d6c541a54370e0db49524aead4c9e6aa263d6855d978d78" dependencies = [ "bitflags", "core-foundation", "core-foundation-sys", "libc", + "num", "security-framework-sys", ] [[package]] name = "security-framework-sys" -version = "2.2.0" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3676258fd3cfe2c9a0ec99ce3038798d847ce3e4bb17746373eb9f0f1ac16339" +checksum = "3f6f179cd85a30f8652b3f8830f73861c76e87e70b939773e72daf38be3afc02" dependencies = [ "core-foundation-sys", "libc", @@ -2239,9 +1688,9 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.125" +version = "1.0.130" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "558dc50e1a5a5fa7112ca2ce4effcb321b0300c0d4ccf0776a9f60cd89031171" +checksum = "f12d06de37cf59146fbdecab66aa99f9fe4f78722e3607577a5375d66bd0c913" dependencies = [ "serde_derive", ] @@ -2258,9 +1707,9 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.125" +version = "1.0.130" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b093b7a2bb58203b5da3056c05b4ec1fed827dcfdb37347a8841695263b3d06d" +checksum = "d7bc1a1ab1961464eae040d96713baa5a724a8152c1222492465b54322ec508b" dependencies = [ "proc-macro2", "quote", @@ -2269,9 +1718,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.64" +version = "1.0.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "799e97dc9fdae36a5c8b8f2cae9ce2ee9fdce2058c57a93e6099d919fd982f79" +checksum = "a7f9e390c27c3c0ce8bc5d725f6e4d30a29d26659494aa4b17535f7522c5c950" dependencies = [ "itoa", "ryu", @@ -2287,18 +1736,6 @@ dependencies = [ "serde", ] -[[package]] -name = "serde_urlencoded" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "642dd69105886af2efd227f75a520ec9b44a820d65bc133a9131f7d229fd165a" -dependencies = [ - "dtoa", - "itoa", - "serde", - "url 1.7.2", -] - [[package]] name = "serde_urlencoded" version = "0.7.0" @@ -2313,37 +1750,37 @@ dependencies = [ [[package]] name = "sha2" -version = "0.9.3" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa827a14b29ab7f44778d14a88d3cb76e949c45083f7dbfa507d0cb699dc12de" +checksum = "9204c41a1597a8c5af23c82d1c921cb01ec0a4c59e07a9c7306062829a3903f3" dependencies = [ "block-buffer", - "cfg-if 1.0.0", - "cpuid-bool", + "cfg-if", + "cpufeatures", "digest", "opaque-debug", ] [[package]] name = "sharded-slab" -version = "0.1.1" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79c719719ee05df97490f80a45acfc99e5a30ce98a1e4fb67aee422745ae14e3" +checksum = "740223c51853f3145fe7c90360d2d4232f2b62e3449489c207eccde818979982" dependencies = [ "lazy_static", ] [[package]] name = "siphasher" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbce6d4507c7e4a3962091436e56e95290cb71fa302d0d270e32130b75fbff27" +checksum = "729a25c17d72b06c68cb47955d44fda88ad2d3e7d77e025663fdd69b93dd71a1" [[package]] name = "slab" -version = "0.4.2" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" +checksum = "c307a32c1c5c437f38c7fd45d753050587732ba8628319fbdf12a7e289ccc590" [[package]] name = "slug" @@ -2354,15 +1791,6 @@ dependencies = [ "deunicode", ] -[[package]] -name = "smallvec" -version = "0.6.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97fcaeba89edba30f044a10c6a3cc39df9c3f17d7cd829dd1446cab35f890e0" -dependencies = [ - "maybe-uninit", -] - [[package]] name = "smallvec" version = "1.6.1" @@ -2371,12 +1799,12 @@ checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e" [[package]] name = "socket2" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e3dfc207c526015c632472a77be09cf1b6e46866581aecae5cc38fb4235dea2" +checksum = "765f090f0e423d2b55843402a07915add955e7d60657db13707a159727326cad" dependencies = [ "libc", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -2385,15 +1813,6 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" -[[package]] -name = "string" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d24114bfcceb867ca7f71a0d3fe45d45619ec47a6fbfa98cb14e14250bfa5d6d" -dependencies = [ - "bytes 0.4.12", -] - [[package]] name = "string_cache" version = "0.8.1" @@ -2414,33 +1833,21 @@ checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" [[package]] name = "subtle" -version = "2.4.0" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e81da0851ada1f3e9d4312c704aa4f8806f0f9d69faaf8df2f3464b4a9437c2" +checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" [[package]] name = "syn" -version = "1.0.69" +version = "1.0.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48fe99c6bd8b1cc636890bcc071842de909d902c81ac7dab53ba33c421ab8ffb" +checksum = "b7f58f7e8eaa0009c5fec437aabf511bd9933e4b2d7407bd05273c01a8906ea7" dependencies = [ "proc-macro2", "quote", "unicode-xid", ] -[[package]] -name = "synstructure" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b834f2d66f734cb897113e34aaff2f1ab4719ca946f9a7358dba8f8064148701" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "unicode-xid", -] - [[package]] name = "syslog" version = "4.0.1" @@ -2459,23 +1866,23 @@ version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dac1c663cfc93810f88aed9b8941d48cabf856a1b111c29a40439018d870eb22" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "libc", - "rand 0.8.3", - "redox_syscall 0.2.5", + "rand 0.8.4", + "redox_syscall", "remove_dir_all", - "winapi 0.3.9", + "winapi", ] [[package]] name = "term" -version = "0.5.2" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edd106a334b7657c10b7c540a0106114feadeb4dc314513e97df481d5d966f42" +checksum = "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f" dependencies = [ - "byteorder", - "dirs", - "winapi 0.3.9", + "dirs-next", + "rustversion", + "winapi", ] [[package]] @@ -2489,18 +1896,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.24" +version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0f4a65597094d4483ddaed134f409b2cb7c1beccf25201a9f73c719254fa98e" +checksum = "283d5230e63df9608ac7d9691adc1dfb6e701225436eb64d0b9a7f0a5a04f6ec" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.24" +version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7765189610d8241a44529806d6fd1f2e0a08734313a35d5b3a556f92b381f3c0" +checksum = "fa3884228611f5cd3608e2d409bf7dce832e4eb3135e3f11addbd7e41bd68e71" dependencies = [ "proc-macro2", "quote", @@ -2524,7 +1931,7 @@ checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" dependencies = [ "libc", "wasi 0.10.0+wasi-snapshot-preview1", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -2538,23 +1945,23 @@ dependencies = [ [[package]] name = "tiny_http" -version = "0.8.0" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eded47106b8e52d8ed8119f0ea6e8c0f5881e69783e0297b5a8462958f334bc1" +checksum = "9ce51b50006056f590c9b7c3808c3bd70f0d1101666629713866c227d6e58d39" dependencies = [ "ascii", "chrono", "chunked_transfer", "log", "openssl", - "url 2.2.1", + "url", ] [[package]] name = "tinyvec" -version = "1.2.0" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b5220f05bb7de7f3f53c7c065e1199b3172696fe2db9f9c4d8ad9b4ee74c342" +checksum = "848a1e1181b9f6753b5e96a092749e29b11d19ede67dfbbd6c7dc7e0f49b5338" dependencies = [ "tinyvec_macros", ] @@ -2567,87 +1974,26 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] name = "tokio" -version = "0.1.22" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a09c0b5bb588872ab2f09afa13ee6e9dac11e10a0ec9e8e3ba39a5a5d530af6" +checksum = "92036be488bb6594459f2e03b60e42df6f937fe6ca5c5ffdcb539c6b84dc40f5" dependencies = [ - "bytes 0.4.12", - "futures 0.1.31", - "mio 0.6.23", - "num_cpus", - "tokio-current-thread", - "tokio-executor", - "tokio-io", - "tokio-reactor", - "tokio-tcp", - "tokio-threadpool", - "tokio-timer", -] - -[[package]] -name = "tokio" -version = "1.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fb2ed024293bb19f7a5dc54fe83bf86532a44c12a2bb8ba40d64a4509395ca2" -dependencies = [ - "autocfg 1.0.1", - "bytes 1.0.1", + "autocfg", + "bytes", "libc", "memchr", - "mio 0.7.13", + "mio", "num_cpus", "pin-project-lite", "tokio-macros", - "winapi 0.3.9", -] - -[[package]] -name = "tokio-buf" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fb220f46c53859a4b7ec083e41dec9778ff0b1851c0942b211edb89e0ccdc46" -dependencies = [ - "bytes 0.4.12", - "either", - "futures 0.1.31", -] - -[[package]] -name = "tokio-current-thread" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1de0e32a83f131e002238d7ccde18211c0a5397f60cbfffcb112868c2e0e20e" -dependencies = [ - "futures 0.1.31", - "tokio-executor", -] - -[[package]] -name = "tokio-executor" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb2d1b8f4548dbf5e1f7818512e9c406860678f29c300cdf0ebac72d1a3a1671" -dependencies = [ - "crossbeam-utils 0.7.2", - "futures 0.1.31", -] - -[[package]] -name = "tokio-io" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57fc868aae093479e3131e3d165c93b1c7474109d13c90ec0dda2a1bbfff0674" -dependencies = [ - "bytes 0.4.12", - "futures 0.1.31", - "log", + "winapi", ] [[package]] name = "tokio-macros" -version = "1.2.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c49e3df43841dafb86046472506755d8501c5615673955f6aa17181125d13c37" +checksum = "54473be61f4ebe4efd09cec9bd5d16fa51d70ea0192213d754d2d500457db110" dependencies = [ "proc-macro2", "quote", @@ -2661,26 +2007,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b" dependencies = [ "native-tls", - "tokio 1.7.1", -] - -[[package]] -name = "tokio-reactor" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09bc590ec4ba8ba87652da2068d150dcada2cfa2e07faae270a5e0409aa51351" -dependencies = [ - "crossbeam-utils 0.7.2", - "futures 0.1.31", - "lazy_static", - "log", - "mio 0.6.23", - "num_cpus", - "parking_lot", - "slab", - "tokio-executor", - "tokio-io", - "tokio-sync", + "tokio", ] [[package]] @@ -2690,75 +2017,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc6844de72e57df1980054b38be3a9f4702aba4858be64dd700181a8a6d0e1b6" dependencies = [ "rustls", - "tokio 1.7.1", + "tokio", "webpki", ] -[[package]] -name = "tokio-sync" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edfe50152bc8164fcc456dab7891fa9bf8beaf01c5ee7e1dd43a397c3cf87dee" -dependencies = [ - "fnv", - "futures 0.1.31", -] - -[[package]] -name = "tokio-tcp" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98df18ed66e3b72e742f185882a9e201892407957e45fbff8da17ae7a7c51f72" -dependencies = [ - "bytes 0.4.12", - "futures 0.1.31", - "iovec", - "mio 0.6.23", - "tokio-io", - "tokio-reactor", -] - -[[package]] -name = "tokio-threadpool" -version = "0.1.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df720b6581784c118f0eb4310796b12b1d242a7eb95f716a8367855325c25f89" -dependencies = [ - "crossbeam-deque", - "crossbeam-queue", - "crossbeam-utils 0.7.2", - "futures 0.1.31", - "lazy_static", - "log", - "num_cpus", - "slab", - "tokio-executor", -] - -[[package]] -name = "tokio-timer" -version = "0.2.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93044f2d313c95ff1cb7809ce9a7a05735b012288a888b62d4434fd58c94f296" -dependencies = [ - "crossbeam-utils 0.7.2", - "futures 0.1.31", - "slab", - "tokio-executor", -] - [[package]] name = "tokio-util" version = "0.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1caa0b0c8d94a049db56b5acf8cba99dc0623aab1b26d5b5f5e2d945846b3592" dependencies = [ - "bytes 1.0.1", + "bytes", "futures-core", "futures-sink", "log", "pin-project-lite", - "tokio 1.7.1", + "tokio", ] [[package]] @@ -2778,11 +2052,11 @@ checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" [[package]] name = "tracing" -version = "0.1.25" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01ebdc2bb4498ab1ab5f5b73c5803825e60199229ccba0698170e3be0e7f959f" +checksum = "09adeb8c97449311ccd28a427f96fb563e7fd31aabf994189879d9da2394b89d" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "log", "pin-project-lite", "tracing-attributes", @@ -2802,9 +2076,9 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.17" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f50de3927f93d202783f4513cda820ab47ef17f624b03c096e86ef00c67e6b5f" +checksum = "2ca517f43f0fb96e0c3072ed5c275fe5eece87e8cb52f4a77b69226d3b1c9df8" dependencies = [ "lazy_static", ] @@ -2832,9 +2106,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.2.17" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "705096c6f83bf68ea5d357a6aa01829ddbdac531b357b45abeca842938085baa" +checksum = "b9cbe87a2fa7e35900ce5de20220a582a9483a7063811defce79d7cbd59d4cfe" dependencies = [ "ansi_term 0.12.1", "chrono", @@ -2844,7 +2118,7 @@ dependencies = [ "serde", "serde_json", "sharded-slab", - "smallvec 1.6.1", + "smallvec", "thread_local", "tracing", "tracing-core", @@ -2858,44 +2132,23 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" -[[package]] -name = "try_from" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "283d3b89e1368717881a9d51dad843cc435380d8109c9e47d38780a324698d8b" -dependencies = [ - "cfg-if 0.1.10", -] - [[package]] name = "typenum" version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "879f6906492a7cd215bfa4cf595b600146ccfac0c79bcbd1f3000162af5e8b06" -[[package]] -name = "unicase" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" -dependencies = [ - "version_check", -] - [[package]] name = "unicode-bidi" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eeb8be209bb1c96b7c177c7420d26e04eccacb0eeae6b980e35fcb74678107e0" -dependencies = [ - "matches", -] +checksum = "246f4c42e67e7a4e3c6106ff716a5d067d4132a642840b242e357e468a2a0085" [[package]] name = "unicode-normalization" -version = "0.1.17" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07fbfce1c8a97d547e8b5334978438d9d6ec8c20e38f56d4a4374d181493eaef" +checksum = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9" dependencies = [ "tinyvec", ] @@ -2908,9 +2161,9 @@ checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3" [[package]] name = "unicode-xid" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564" +checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" [[package]] name = "untrusted" @@ -2920,25 +2173,14 @@ checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" [[package]] name = "url" -version = "1.7.2" +version = "2.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a" -dependencies = [ - "idna 0.1.5", - "matches", - "percent-encoding 1.0.1", -] - -[[package]] -name = "url" -version = "2.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ccd964113622c8e9322cfac19eb1004a07e636c545f325da085d5cdde6f1f8b" +checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c" dependencies = [ "form_urlencoded", - "idna 0.2.2", + "idna", "matches", - "percent-encoding 2.1.0", + "percent-encoding", "serde", ] @@ -2948,29 +2190,20 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "110352d4e9076c67839003c7788d8604e24dcded13e0b375af3efaa8cf468517" -[[package]] -name = "uuid" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90dbc611eb48397705a6b0f6e917da23ae517e4d127123d2cf7674206627d32a" -dependencies = [ - "rand 0.6.5", -] - [[package]] name = "uuid" version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" dependencies = [ - "getrandom 0.2.2", + "getrandom 0.2.3", ] [[package]] name = "vcpkg" -version = "0.2.11" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b00bca6106a5e23f3eee943593759b7fcddb00554332e856d990c893966879fb" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] name = "vec_map" @@ -2984,17 +2217,6 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe" -[[package]] -name = "want" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6395efa4784b027708f7451087e647ec73cc74f5d9bc2e418404248d679a230" -dependencies = [ - "futures 0.1.31", - "log", - "try-lock", -] - [[package]] name = "want" version = "0.3.0" @@ -3019,11 +2241,11 @@ checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" [[package]] name = "wasm-bindgen" -version = "0.2.73" +version = "0.2.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83240549659d187488f91f33c0f8547cbfef0b2088bc470c116d1d260ef623d9" +checksum = "8ce9b1b516211d33767048e5d47fa2a381ed8b76fc48d2ce4aa39877f9f183e0" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "serde", "serde_json", "wasm-bindgen-macro", @@ -3031,9 +2253,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.73" +version = "0.2.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae70622411ca953215ca6d06d3ebeb1e915f0f6613e3b495122878d7ebec7dae" +checksum = "cfe8dc78e2326ba5f845f4b5bf548401604fa20b1dd1d365fb73b6c1d6364041" dependencies = [ "bumpalo", "lazy_static", @@ -3046,11 +2268,11 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.23" +version = "0.4.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81b8b767af23de6ac18bf2168b690bed2902743ddf0fb39252e36f9e2bfc63ea" +checksum = "95fded345a6559c2cfee778d562300c581f7d4ff3edb9b0d230d69800d213972" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "js-sys", "wasm-bindgen", "web-sys", @@ -3058,9 +2280,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.73" +version = "0.2.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e734d91443f177bfdb41969de821e15c516931c3c3db3d318fa1b68975d0f6f" +checksum = "44468aa53335841d9d6b6c023eaab07c0cd4bddbcfdee3e2bb1e8d2cb8069fef" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3068,9 +2290,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.73" +version = "0.2.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d53739ff08c8a68b0fdbcd54c372b8ab800b1449ab3c9d706503bc7dd1621b2c" +checksum = "0195807922713af1e67dc66132c7328206ed9766af3858164fb583eedc25fbad" dependencies = [ "proc-macro2", "quote", @@ -3081,15 +2303,15 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.73" +version = "0.2.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9a543ae66aa233d14bb765ed9af4a33e81b8b58d1584cf1b47ff8cd0b9e4489" +checksum = "acdb075a845574a1fa5f09fd77e43f7747599301ea3417a9fbffdeedfc1f4a29" [[package]] name = "web-sys" -version = "0.3.50" +version = "0.3.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a905d57e488fec8861446d3393670fb50d27a262344013181c2cdf9fff5481be" +checksum = "224b2f6b67919060055ef1a67807367c2066ed520c3862cc013d26cf893a783c" dependencies = [ "js-sys", "wasm-bindgen", @@ -3105,12 +2327,6 @@ dependencies = [ "untrusted", ] -[[package]] -name = "winapi" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" - [[package]] name = "winapi" version = "0.3.9" @@ -3121,12 +2337,6 @@ dependencies = [ "winapi-x86_64-pc-windows-gnu", ] -[[package]] -name = "winapi-build" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" - [[package]] name = "winapi-i686-pc-windows-gnu" version = "0.4.0" @@ -3139,36 +2349,17 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -[[package]] -name = "winreg" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2986deb581c4fe11b621998a5e53361efe6b48a151178d0cd9eeffa4dc6acc9" -dependencies = [ - "winapi 0.3.9", -] - [[package]] name = "winreg" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0120db82e8a1e0b9fb3345a539c478767c0048d842860994d96113d5b667bd69" dependencies = [ - "winapi 0.3.9", -] - -[[package]] -name = "ws2_32-sys" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" -dependencies = [ - "winapi 0.2.8", - "winapi-build", + "winapi", ] [[package]] name = "xml-rs" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b07db065a5cf61a7e4ba64f29e67db906fb1787316516c4e6e5ff0fea1efcd8a" +checksum = "d2d7d3948613f75c98fd9328cfdcc45acc4d360655289d0a7d4ec931392200a3" diff --git a/Cargo.toml b/Cargo.toml index ce3d0d11..b70f2459 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -42,7 +42,6 @@ openssl = { version = "^0.10", features = ["v110"] } oso = { version = "^0.12", optional = true, default_features = false } regex = { version = "^1.4", optional = true, default_features = false, features = ["std"] } reqwest = { version = "0.11", features = ["json"] } -reqwestblocking = { version = "0.9.24", optional = true, package = "reqwest" } rpassword = { version = "^5.0", optional = true } # rpki = { version = "0.11.1-dev", features = [ "repository", "rrdp", "serde" ], git = "https://github.com/NLnetLabs/rpki-rs.git" } rpki = { version = "0.12.2", features = [ "repository", "rrdp", "serde" ] } @@ -67,7 +66,7 @@ rustc_version = "0.2.3" [features] default = [ "multi-user" ] rta = [] -multi-user = [ "basic-cookies", "jmespatch/sync", "regex", "oso", "openidconnect", "reqwestblocking", "rpassword", "scrypt", "unicode-normalization", "urlparse" ] +multi-user = [ "basic-cookies", "jmespatch/sync", "regex", "oso", "openidconnect", "rpassword", "scrypt", "unicode-normalization", "urlparse" ] functional-tests = [] ui-tests = [] extra-debug = [ "rpki/extra-debug" ] diff --git a/src/commons/util/httpclient.rs b/src/commons/util/httpclient.rs index e6049960..e8073897 100644 --- a/src/commons/util/httpclient.rs +++ b/src/commons/util/httpclient.rs @@ -58,6 +58,16 @@ fn report_delete(uri: &str, content_type: Option<&str>, token: Option<&Token>) { } } +/// Gets the Bearer token from the request header, if present. +pub fn get_bearer_token(request: &hyper::Request) -> Option { + request + .headers() + .get(hyper::header::AUTHORIZATION) + .and_then(|value| value.to_str().ok()) + .map(|header_string| header_string.strip_prefix("Bearer ").map(|s| Token::from(s.trim()))) + .flatten() +} + /// Performs a GET request that expects a json response that can be /// deserialized into the an owned value of the expected type. Returns an error /// if nothing is returned. @@ -216,8 +226,18 @@ fn load_root_cert(path: &str) -> Result { reqwest::Certificate::from_pem(file.as_ref()).map_err(Error::https_root_cert_error) } +/// Default client for Krill use cases. pub fn client(uri: &str) -> Result { - let mut builder = reqwest::ClientBuilder::new().timeout(Duration::from_secs(HTTP_CLIENT_TIMEOUT_SECS)); + client_with_tweaks(uri, Duration::from_secs(HTTP_CLIENT_TIMEOUT_SECS), true) +} + +/// Client with tweaks - in particular needed by the openid connect client +pub fn client_with_tweaks(uri: &str, timeout: Duration, allow_redirects: bool) -> Result { + let mut builder = reqwest::ClientBuilder::new().timeout(timeout); + + if !allow_redirects { + builder = builder.redirect(reqwest::redirect::Policy::none()); + } if let Ok(cert_list) = env::var(KRILL_HTTPS_ROOT_CERTS_ENV) { for path in cert_list.split(':') { @@ -241,7 +261,10 @@ fn headers(content_type: Option<&str>, token: Option<&Token>) -> Result write!(f, "Status: {}, Error: {}", code, e), Error::ErrorWithJson(code, res) => write!(f, "Status: {}, ErrorResponse: {}", code, res), Error::JsonError(e) => e.fmt(f), - Error::InvalidHeader(e) => e.fmt(f), + Error::InvalidHeaderName => write!(f, "failed parse header name"), + Error::InvalidHeaderValue => write!(f, "failed parse header value"), + Error::InvalidMethod(m) => write!(f, "unrecognised method requested: '{}'", m), + Error::InvalidStatusCode(code) => write!(f, "unrecognised status code in response: '{}'", code), Error::EmptyResponse => write!(f, "Empty response received from server"), Error::UnexpectedResponse(s) => write!(f, "Unexpected response: {}", s), Error::HttpsRootCertError(e) => write!( @@ -355,7 +384,8 @@ impl From for Error { } impl From for Error { - fn from(v: InvalidHeaderValue) -> Self { - Error::InvalidHeader(v) + fn from(_v: InvalidHeaderValue) -> Self { + // note InvalidHeaderValue is a marker and contains no further information. + Error::InvalidHeaderValue } } diff --git a/src/daemon/auth/authorizer.rs b/src/daemon/auth/authorizer.rs index a1153600..9a6e217b 100644 --- a/src/daemon/auth/authorizer.rs +++ b/src/daemon/auth/authorizer.rs @@ -14,12 +14,15 @@ use crate::daemon::config::Config; use crate::daemon::http::HttpResponse; use crate::{commons::api::Token, daemon::auth::common::permissions::Permission}; +#[cfg(feature = "multi-user")] +use crate::daemon::auth::providers::{ConfigFileAuthProvider, OpenIDConnectAuthProvider}; + //------------ Authorizer ---------------------------------------------------- /// An AuthProvider authenticates and authorizes a given token. /// /// An AuthProvider is expected to configure itself using the global Krill -/// [`CONFIG`] object. This avoids propagatation of potentially many provider +/// [`CONFIG`] object. This avoids propagation of potentially many provider /// specific configuration values from the calling code to the provider /// implementation. /// @@ -30,34 +33,82 @@ use crate::{commons::api::Token, daemon::auth::common::permissions::Permission}; /// * discovery - as an interactive client where should I send my users to /// login and logout? /// * introspection - who is the currently "logged in" user? -pub trait AuthProvider: Send + Sync { - fn get_bearer_token(&self, request: &hyper::Request) -> Option { - if let Some(header) = request.headers().get("Authorization") { - if let Ok(header) = header.to_str() { - if header.len() > 6 { - let (bearer, token) = header.split_at(6); - let bearer = bearer.trim(); +pub enum AuthProvider { + Token(AdminTokenAuthProvider), - if "Bearer" == bearer { - return Some(Token::from(token.trim())); - } - } - } + #[cfg(feature = "multi-user")] + ConfigFile(ConfigFileAuthProvider), + + #[cfg(feature = "multi-user")] + OpenIdConnect(OpenIDConnectAuthProvider), +} + +impl From for AuthProvider { + fn from(provider: AdminTokenAuthProvider) -> Self { + AuthProvider::Token(provider) + } +} + +#[cfg(feature = "multi-user")] +impl From for AuthProvider { + fn from(provider: ConfigFileAuthProvider) -> Self { + AuthProvider::ConfigFile(provider) + } +} + +#[cfg(feature = "multi-user")] +impl From for AuthProvider { + fn from(provider: OpenIDConnectAuthProvider) -> Self { + AuthProvider::OpenIdConnect(provider) + } +} + +impl AuthProvider { + pub async fn authenticate(&self, request: &hyper::Request) -> KrillResult> { + match &self { + AuthProvider::Token(provider) => provider.authenticate(request), + #[cfg(feature = "multi-user")] + AuthProvider::ConfigFile(provider) => provider.authenticate(request), + #[cfg(feature = "multi-user")] + AuthProvider::OpenIdConnect(provider) => provider.authenticate(request).await, } - - None } - fn authenticate(&self, request: &hyper::Request) -> KrillResult>; - fn get_login_url(&self) -> KrillResult; - fn login(&self, request: &hyper::Request) -> KrillResult; - fn logout(&self, request: &hyper::Request) -> KrillResult; + pub async fn get_login_url(&self) -> KrillResult { + match &self { + AuthProvider::Token(provider) => provider.get_login_url(), + #[cfg(feature = "multi-user")] + AuthProvider::ConfigFile(provider) => provider.get_login_url(), + #[cfg(feature = "multi-user")] + AuthProvider::OpenIdConnect(provider) => provider.get_login_url().await, + } + } + + pub async fn login(&self, request: &hyper::Request) -> KrillResult { + match &self { + AuthProvider::Token(provider) => provider.login(request), + #[cfg(feature = "multi-user")] + AuthProvider::ConfigFile(provider) => provider.login(request), + #[cfg(feature = "multi-user")] + AuthProvider::OpenIdConnect(provider) => provider.login(request).await, + } + } + + pub async fn logout(&self, request: &hyper::Request) -> KrillResult { + match &self { + AuthProvider::Token(provider) => provider.logout(request), + #[cfg(feature = "multi-user")] + AuthProvider::ConfigFile(provider) => provider.logout(request), + #[cfg(feature = "multi-user")] + AuthProvider::OpenIdConnect(provider) => provider.logout(request).await, + } + } } /// This type is responsible for checking authorizations when the API is /// accessed. pub struct Authorizer { - primary_provider: Box, + primary_provider: AuthProvider, legacy_provider: Option, policy: AuthPolicy, private_attributes: Vec, @@ -77,11 +128,8 @@ impl Authorizer { /// `P` an instance of some other provider, an instance of /// [AdminTokenAuthProvider] will also be created. This will be used as a /// fallback when Lagosta is configured to use some other [AuthProvider]. - pub fn new

(config: Arc, provider: P) -> KrillResult - where - P: AuthProvider + Any, - { - let value_any = &provider as &dyn Any; + pub fn new(config: Arc, primary_provider: AuthProvider) -> KrillResult { + let value_any = &primary_provider as &dyn Any; let is_admin_token_provider = value_any.downcast_ref::().is_some(); let legacy_provider = if is_admin_token_provider { @@ -103,14 +151,14 @@ impl Authorizer { let private_attributes = vec!["role".to_string()]; Ok(Authorizer { - primary_provider: Box::new(provider), + primary_provider, legacy_provider, policy: AuthPolicy::new(config)?, private_attributes, }) } - pub fn actor_from_request(&self, request: &hyper::Request) -> Actor { + pub async fn actor_from_request(&self, request: &hyper::Request) -> Actor { trace!("Determining actor for request {:?}", &request); // Try the legacy provider first, if any @@ -122,7 +170,7 @@ impl Authorizer { // Try the real provider if we did not already successfully authenticate authenticate_res = match authenticate_res { Ok(Some(res)) => Ok(Some(res)), - _ => self.primary_provider.authenticate(request), + _ => self.primary_provider.authenticate(request).await, }; // Create an actor based on the authentication result @@ -135,7 +183,7 @@ impl Authorizer { // error during authentication Err(err) => { - // reveives a commons::error::Error, but we need an ApiAuthError + // receives a commons::error::Error, but we need an ApiAuthError self.actor_from_def(ACTOR_DEF_ANON.with_auth_error(err)) } }; @@ -151,14 +199,14 @@ impl Authorizer { /// Return the URL at which an end-user should be directed to login with the /// configured provider. - pub fn get_login_url(&self) -> KrillResult { - self.primary_provider.get_login_url() + pub async fn get_login_url(&self) -> KrillResult { + self.primary_provider.get_login_url().await } /// Submit credentials directly to the configured provider to establish a /// login session, if supported by the configured provider. - pub fn login(&self, request: &hyper::Request) -> KrillResult { - let user = self.primary_provider.login(request)?; + pub async fn login(&self, request: &hyper::Request) -> KrillResult { + let user = self.primary_provider.login(request).await?; // The user has passed authentication, but may still not be // authorized to login as that requires a check against the policy @@ -197,8 +245,8 @@ impl Authorizer { /// Return the URL at which an end-user should be directed to logout with /// the configured provider. - pub fn logout(&self, request: &hyper::Request) -> KrillResult { - self.primary_provider.logout(request) + pub async fn logout(&self, request: &hyper::Request) -> KrillResult { + self.primary_provider.logout(request).await } } diff --git a/src/daemon/auth/providers/admin_token.rs b/src/daemon/auth/providers/admin_token.rs index 713ed5d5..c69f3948 100644 --- a/src/daemon/auth/providers/admin_token.rs +++ b/src/daemon/auth/providers/admin_token.rs @@ -1,10 +1,11 @@ use std::sync::Arc; use crate::commons::error::Error; +use crate::commons::util::httpclient; use crate::commons::KrillResult; use crate::commons::{actor::ActorDef, api::Token}; use crate::constants::ACTOR_DEF_ADMIN_TOKEN; -use crate::daemon::auth::{AuthProvider, LoggedInUser}; +use crate::daemon::auth::LoggedInUser; use crate::daemon::config::Config; use crate::daemon::http::HttpResponse; @@ -27,13 +28,13 @@ impl AdminTokenAuthProvider { } } -impl AuthProvider for AdminTokenAuthProvider { - fn authenticate(&self, request: &hyper::Request) -> KrillResult> { +impl AdminTokenAuthProvider { + pub fn authenticate(&self, request: &hyper::Request) -> KrillResult> { if log_enabled!(log::Level::Trace) { trace!("Attempting to authenticate the request.."); } - let res = match self.get_bearer_token(request) { + let res = match httpclient::get_bearer_token(request) { Some(token) if token == self.required_token => Ok(Some(ACTOR_DEF_ADMIN_TOKEN)), Some(_) => Err(Error::ApiInvalidCredentials("Invalid bearer token".to_string())), None => Ok(None), @@ -46,12 +47,12 @@ impl AuthProvider for AdminTokenAuthProvider { res } - fn get_login_url(&self) -> KrillResult { + pub fn get_login_url(&self) -> KrillResult { // Direct Lagosta to show the user the Lagosta API token login form Ok(HttpResponse::text_no_cache(LAGOSTA_LOGIN_ROUTE_PATH.into())) } - fn login(&self, request: &hyper::Request) -> KrillResult { + pub fn login(&self, request: &hyper::Request) -> KrillResult { match self.authenticate(request)? { Some(actor_def) => Ok(LoggedInUser { token: self.required_token.clone(), @@ -62,7 +63,7 @@ impl AuthProvider for AdminTokenAuthProvider { } } - fn logout(&self, request: &hyper::Request) -> KrillResult { + pub fn logout(&self, request: &hyper::Request) -> KrillResult { if let Ok(Some(actor)) = self.authenticate(request) { info!("User logged out: {}", actor.name.as_str()); } diff --git a/src/daemon/auth/providers/config_file/provider.rs b/src/daemon/auth/providers/config_file/provider.rs index 55bf32c8..48f8ce2e 100644 --- a/src/daemon/auth/providers/config_file/provider.rs +++ b/src/daemon/auth/providers/config_file/provider.rs @@ -2,12 +2,13 @@ use std::{collections::HashMap, sync::Arc}; use urlparse::{urlparse, GetQuery}; +use crate::commons::util::httpclient; use crate::commons::KrillResult; use crate::commons::{actor::ActorDef, api::Token}; use crate::daemon::auth::common::crypt; use crate::daemon::auth::common::session::*; use crate::daemon::auth::providers::config_file::config::ConfigUserDetails; -use crate::daemon::auth::{Auth, AuthProvider, LoggedInUser}; +use crate::daemon::auth::{Auth, LoggedInUser}; use crate::daemon::config::Config; use crate::daemon::http::HttpResponse; use crate::{commons::error::Error, daemon::auth::common::crypt::CryptState}; @@ -86,7 +87,7 @@ impl ConfigFileAuthProvider { } fn get_auth(&self, request: &hyper::Request) -> Option { - if let Some(password_hash) = self.get_bearer_token(request) { + if let Some(password_hash) = httpclient::get_bearer_token(request) { if let Some(query) = urlparse(request.uri().to_string()).get_parsed_query() { if let Some(id) = query.get_first_from_str("id") { return Some(Auth::IdAndPasswordHash { id, password_hash }); @@ -97,13 +98,13 @@ impl ConfigFileAuthProvider { } } -impl AuthProvider for ConfigFileAuthProvider { - fn authenticate(&self, request: &hyper::Request) -> KrillResult> { +impl ConfigFileAuthProvider { + pub fn authenticate(&self, request: &hyper::Request) -> KrillResult> { if log_enabled!(log::Level::Trace) { trace!("Attempting to authenticate the request.."); } - let res = match self.get_bearer_token(request) { + let res = match httpclient::get_bearer_token(request) { Some(token) => { // see if we can decode, decrypt and deserialize the users token // into a login session structure @@ -123,12 +124,12 @@ impl AuthProvider for ConfigFileAuthProvider { res } - fn get_login_url(&self) -> KrillResult { + pub fn get_login_url(&self) -> KrillResult { // Direct Lagosta to show the user the Lagosta API token login form Ok(HttpResponse::text_no_cache(LAGOSTA_LOGIN_ROUTE_PATH.into())) } - fn login(&self, request: &hyper::Request) -> KrillResult { + pub fn login(&self, request: &hyper::Request) -> KrillResult { if let Some(Auth::IdAndPasswordHash { id, password_hash }) = self.get_auth(request) { use scrypt::scrypt; @@ -184,8 +185,8 @@ impl AuthProvider for ConfigFileAuthProvider { } } - fn logout(&self, request: &hyper::Request) -> KrillResult { - match self.get_bearer_token(request) { + pub fn logout(&self, request: &hyper::Request) -> KrillResult { + match httpclient::get_bearer_token(request) { Some(token) => { self.session_cache.remove(&token); diff --git a/src/daemon/auth/providers/openid_connect/httpclient.rs b/src/daemon/auth/providers/openid_connect/httpclient.rs index 6d6c5551..2437732f 100644 --- a/src/daemon/auth/providers/openid_connect/httpclient.rs +++ b/src/daemon/auth/providers/openid_connect/httpclient.rs @@ -1,125 +1,16 @@ -use std::{env, path::PathBuf, str::FromStr, time::Duration}; +use std::{str::FromStr, time::Duration}; + +use reqwest::Response; use crate::{ - commons::util::file, - constants::KRILL_HTTPS_ROOT_CERTS_ENV, + commons::error::Error, + commons::util::httpclient, constants::{test_mode_enabled, OPENID_CONNECT_HTTP_CLIENT_TIMEOUT_SECS}, }; -use crate::commons::error::Error; - -use crate::commons::util::httpclient; - -// Based on httpclient::load_root_cert(). We can't just use the original function as the invoked functions are specific -// to types in the reqwest crate version being used. -fn load_root_cert(path: &str) -> Result { - let path = PathBuf::from_str(path).map_err(httpclient::Error::https_root_cert_error)?; - let file = file::read(&path).map_err(httpclient::Error::https_root_cert_error)?; - reqwestblocking::Certificate::from_pem(file.as_ref()).map_err(httpclient::Error::https_root_cert_error) -} - -fn openid_connect_provider_timeout() -> Duration { - if test_mode_enabled() { - Duration::from_secs(5) - } else { - Duration::from_secs(OPENID_CONNECT_HTTP_CLIENT_TIMEOUT_SECS) - } -} - -// Based on httpclient::client(). We can't just use the original function as the invoked functions are specific to -// types in the reqwest crate version being used. -fn configure_http_client_for_krill( - mut builder: reqwestblocking::ClientBuilder, - uri: &str, -) -> Result { - builder = builder.timeout(openid_connect_provider_timeout()); - - if let Ok(cert_list) = env::var(KRILL_HTTPS_ROOT_CERTS_ENV) { - for path in cert_list.split(':') { - let cert = load_root_cert(path)?; - builder = builder.add_root_certificate(cert); - } - } - - if uri.starts_with("https://localhost") || uri.starts_with("https://127.0.0.1") { - builder = builder.danger_accept_invalid_certs(true); - } - - Ok(builder) -} - -// This is basically a copy of oauth2::reqwest::blocking::http_client() with the addition of the same logic Krill uses -// in its main HTTP client configuration (to permit insecure TLS server certificates if the server host is "localhost", -// useful when testing with a local OpenID Connect provider with a self-signed certificate, e.g. our mock provider, and -// to support custom TLS root certificates). -// -// NOTE: Why does this use a second aliased reqwest dependency as reqwestblocking? -// This is due to the reqwest 0.10.x blocking implementation actually using a futures runtime and that you can't use a -// futures runtime inside another futures runtime otherwise you get error: -// "panicked at 'Cannot drop a runtime in a context where blocking is not allowed. This happens when a runtime is -// dropped from within an asynchronous context.' reqwest blocking" -// And we can't move to using async reqwest because async Rust doesn't work with traits and AuthProvider is a trait. -// Unless we use the async_traits crate... -// -// NOTE: We don't return reqwest::Error as the oauth2-rs implementation of `fn http_client()` does because that is a -// type in the oauth2-rs crate and all of the constructors for that type are private to the crate and so we cannot use -// map_err(reqwest::Error). -fn http_client(request: openidconnect::HttpRequest) -> Result { - let mut client_builder = reqwestblocking::Client::builder() - // Following redirects opens the client up to SSRF vulnerabilities. - .redirect(reqwestblocking::RedirectPolicy::none()); - - client_builder = configure_http_client_for_krill(client_builder, request.url.as_str()) - .map_err(|err| Error::custom(format!("Failed to configure HTTP client: {}", err)))?; - - let client = client_builder.build().map_err(Error::custom)?; - - let mut request_builder = client - .request( - reqwestblocking::Method::from_bytes(request.method.as_str().as_ref()) - .expect("failed to convert Method from http 0.2 to 0.1"), - 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::custom)?; - - let mut response = client.execute(request).map_err(Error::custom)?; - - let mut body = Vec::new(); - { - use std::io::Read; - response.read_to_end(&mut body).map_err(Error::custom)?; - } - - let headers = response - .headers() - .iter() - .map(|(name, value)| { - ( - openidconnect::http::header::HeaderName::from_bytes(name.as_str().as_ref()) - .expect("failed to convert HeaderName from http 0.2 to 0.1"), - openidconnect::http::header::HeaderValue::from_bytes(value.as_bytes()) - .expect("failed to convert HeaderValue from http 0.2 to 0.1"), - ) - }) - .collect::(); - - Ok(openidconnect::HttpResponse { - status_code: openidconnect::http::StatusCode::from_u16(response.status().as_u16()) - .expect("failed to convert StatusCode from http 0.2 to 0.1"), - headers, - body, - }) -} - // Wrap the httpclient produced above with optional logging of requests to and responses from the OpenID Connect // provider. -pub fn logging_http_client(req: openidconnect::HttpRequest) -> Result { +pub async fn logging_http_client(req: openidconnect::HttpRequest) -> Result { if log_enabled!(log::Level::Trace) { // Don't {:?} log the openidconnect::HTTPRequest req object // because that renders the body as an unreadable integer byte @@ -134,7 +25,7 @@ pub fn logging_http_client(req: openidconnect::HttpRequest) -> Result Result Result { + let request_uri = request.url.as_str(); + + let client = { + let timeout = openid_connect_provider_timeout(); + let allow_redirects = false; // Following redirects opens the client up to SSRF vulnerabilities. + + httpclient::client_with_tweaks(request_uri, timeout, allow_redirects) + }?; + + let request = convert_openid_request(request, &client)?; + + let response = client.execute(request).await?; + + convert_to_openid_response(response).await +} + +fn convert_openid_request( + request: openidconnect::HttpRequest, + client: &reqwest::Client, +) -> Result { + let request_uri = request.url.as_str(); + let request_method = reqwest::Method::from_str(request.method.as_str()) + .map_err(|_| httpclient::Error::InvalidMethod(request.method.to_string()))?; + + let mut request_builder = client.request(request_method, request_uri).body(request.body); + + // map openid connect headers to the request builder + for (name, value) in &request.headers { + request_builder = request_builder.header(name.as_str(), value.as_bytes()); + } + + Ok(request_builder.build()?) +} + +async fn convert_to_openid_response(response: Response) -> Result { + let response_code = response.status().as_u16(); + + let response_status = openidconnect::http::StatusCode::from_u16(response_code) + .map_err(|_| httpclient::Error::InvalidStatusCode(response_code))?; + + let response_headers = { + let mut headers = openidconnect::http::HeaderMap::new(); + for (name, value) in response.headers() { + let name = openidconnect::http::header::HeaderName::from_str(name.as_str()) + .map_err(|_| httpclient::Error::InvalidHeaderName)?; + + let value = openidconnect::http::header::HeaderValue::from_bytes(value.as_bytes()) + .map_err(|_| httpclient::Error::InvalidHeaderValue)?; + + headers.append(name, value); + } + + headers + }; + + let response_body = response.bytes().await?; + + Ok(openidconnect::HttpResponse { + status_code: response_status, + headers: response_headers, + body: response_body.to_vec(), + }) +} + +fn openid_connect_provider_timeout() -> Duration { + if test_mode_enabled() { + Duration::from_secs(5) + } else { + Duration::from_secs(OPENID_CONNECT_HTTP_CLIENT_TIMEOUT_SECS) + } } diff --git a/src/daemon/auth/providers/openid_connect/provider.rs b/src/daemon/auth/providers/openid_connect/provider.rs index effc12a3..71563564 100644 --- a/src/daemon/auth/providers/openid_connect/provider.rs +++ b/src/daemon/auth/providers/openid_connect/provider.rs @@ -27,9 +27,11 @@ use std::{ }, ops::Deref, path::Path, - sync::{Arc, RwLock, RwLockReadGuard}, + sync::Arc, }; +use tokio::sync::{RwLock, RwLockReadGuard}; + use basic_cookies::Cookie; use hyper::header::{HeaderValue, SET_COOKIE}; use jmespatch as jmespath; @@ -52,15 +54,15 @@ use openidconnect::{ use urlparse::{urlparse, GetQuery}; use crate::commons::util::sha256; -use crate::commons::KrillResult; use crate::commons::{actor::ActorDef, api::Token}; +use crate::commons::{util::httpclient, KrillResult}; use crate::daemon::auth::common::crypt; use crate::daemon::auth::common::session::*; use crate::daemon::auth::providers::config_file::config::ConfigUserDetails; use crate::daemon::auth::providers::openid_connect::config::ConfigAuthOpenIDConnectClaims; use crate::daemon::auth::providers::openid_connect::httpclient::logging_http_client; use crate::daemon::auth::providers::openid_connect::jmespathext; -use crate::daemon::auth::{Auth, AuthProvider, LoggedInUser}; +use crate::daemon::auth::{Auth, LoggedInUser}; use crate::daemon::config::Config; use crate::daemon::http::auth::url_encode; use crate::daemon::http::auth::AUTH_CALLBACK_ENDPOINT; @@ -151,19 +153,19 @@ impl OpenIDConnectAuthProvider { }) } - fn initialize_connection_if_needed(&self) -> KrillResult<()> { - let mut conn_guard = self.conn.write().unwrap(); // should never fail, better to panic and crash out if it does + async fn initialize_connection_if_needed(&self) -> KrillResult<()> { + let mut conn_guard = self.conn.write().await; if conn_guard.is_none() { - *conn_guard = Some(self.initialize_connection()?); + *conn_guard = Some(self.initialize_connection().await?); } Ok(()) } - fn initialize_connection(&self) -> KrillResult { + async fn initialize_connection(&self) -> KrillResult { trace!("OpenID Connect: Initializing provider connection..."); - let meta = self.discover()?; + let meta = self.discover().await?; let (email_scope_supported, userinfo_endpoint_supported, logout_mode) = self.check_provider_capabilities(&meta)?; let client = self.build_client(meta, &logout_mode)?; @@ -182,7 +184,7 @@ impl OpenIDConnectAuthProvider { /// discovery endpoint of the provider, e.g. /// https:/// KrillResult { + async fn discover(&self) -> KrillResult { // Read from config the OpenID Connect identity provider discovery URL. // Strip off /.well-known/openid-configuration because the openid-connect // crate wants to add this itself and will fail if it is already present @@ -198,13 +200,15 @@ impl OpenIDConnectAuthProvider { // Contact the OpenID Connect: identity provider discovery endpoint to // learn about and configure ourselves to talk to it. - let meta = WantedMeta::discover(&issuer, logging_http_client).map_err(|e| { - Error::custom(format!( - "OpenID Connect: Discovery failed with issuer {}, {}", - issuer.as_str(), - stringify_cause_chain(e) - )) - })?; + let meta = WantedMeta::discover_async(issuer.clone(), logging_http_client) + .await + .map_err(|e| { + Error::custom(format!( + "OpenID Connect: Discovery failed with issuer {}, {}", + issuer.as_str(), + stringify_cause_chain(e) + )) + })?; Ok(meta) } @@ -440,7 +444,7 @@ impl OpenIDConnectAuthProvider { )) } - fn try_revoke_token(&self, session: &ClientSession) -> Result<(), RevocationErrorResponseType> { + async fn try_revoke_token(&self, session: &ClientSession) -> Result<(), RevocationErrorResponseType> { // Connect to the OpenID Connect provider OAuth 2.0 token revocation endpoint to terminate the // provider session // From: https://tools.ietf.org/html/rfc7009#section-2 @@ -460,6 +464,7 @@ impl OpenIDConnectAuthProvider { trace!("OpenID Connect: Submitting RFC-7009 section 2 Token Revocation request"); let lock_guard = self .get_connection() + .await .map_err(|err| RevocationErrorResponseType::Basic(CoreErrorResponseType::Extension(err.to_string())))?; let conn = lock_guard.deref().as_ref().unwrap(); // safe to unwrap as was tested in get_connection() @@ -472,7 +477,8 @@ impl OpenIDConnectAuthProvider { err.to_string() ))) })? - .request(logging_http_client) + .request_async(logging_http_client) + .await { Ok(_) => Ok(()), Err(err) => match &err { @@ -515,7 +521,7 @@ impl OpenIDConnectAuthProvider { /// Try refreshing the token once with the OIDC Provider and return either the new token, or the Error received from /// the OpenID Connect Provider. This Error is FOR INTERNAL CONSUMPTION only. The caller of this function is /// responsible for creating end-user error messages, logging and (optionally) retrying. - fn try_refresh_token(&self, session: &ClientSession) -> Result { + async fn try_refresh_token(&self, session: &ClientSession) -> Result { let refresh_token = &session.secrets.get(TokenKind::RefreshToken.into()).ok_or_else(|| { CoreErrorResponseType::Extension( "Internal error: Token refresh attempted without a refresh token".to_string(), @@ -527,13 +533,15 @@ impl OpenIDConnectAuthProvider { let lock_guard = self .get_connection() + .await .map_err(|err| CoreErrorResponseType::Extension(err.to_string()))?; let conn = lock_guard.deref().as_ref().unwrap(); // safe to unwrap as was tested in get_connection() let token_response = conn .client .exchange_refresh_token(&RefreshToken::new(refresh_token.to_string())) - .request(logging_http_client); + .request_async(logging_http_client) + .await; match token_response { Ok(token_response) => { @@ -810,8 +818,8 @@ impl OpenIDConnectAuthProvider { None } - fn get_connection(&self) -> KrillResult>> { - let conn_guard = self.conn.read().unwrap(); // should never fail, better to panic and crash out if it does + async fn get_connection<'a>(&'_ self) -> KrillResult>> { + let conn_guard = self.conn.read().await; conn_guard.as_ref().ok_or_else(|| { OpenIDConnectAuthProvider::internal_error("Connection to provider not yet established", None) @@ -856,14 +864,15 @@ impl OpenIDConnectAuthProvider { } } - fn get_token_response(&self, code: Token) -> KrillResult { - let lock_guard = self.get_connection()?; + async fn get_token_response(&self, code: Token) -> KrillResult { + let lock_guard = self.get_connection().await?; let conn = lock_guard.deref().as_ref().unwrap(); // safe to unwrap as was tested in get_connection() let token_response: FlexibleTokenResponse = conn .client .exchange_code(AuthorizationCode::new(code.to_string())) - .request(logging_http_client) + .request_async(logging_http_client) + .await .map_err(|e| { let (msg, additional_info) = match e { RequestTokenError::ServerResponse(ref provider_err) => { @@ -904,12 +913,13 @@ impl OpenIDConnectAuthProvider { Ok(token_response) } - fn get_token_id_claims<'a>( + #[allow(clippy::needless_lifetimes)] // clippy says it can be elided, but.. it seems like it's a false positive. + async fn get_token_id_claims<'a>( &self, token_response: &'a FlexibleTokenResponse, nonce_hash: Nonce, ) -> KrillResult<&'a FlexibleIdTokenClaims> { - let lock_guard = self.get_connection()?; + let lock_guard = self.get_connection().await?; let conn = lock_guard.deref().as_ref().unwrap(); // safe to unwrap as was tested in get_connection() let mut id_token_verifier: CoreIdTokenVerifier = conn.client.id_token_verifier(); @@ -946,11 +956,11 @@ impl OpenIDConnectAuthProvider { Ok(id_token_claims) } - fn get_user_info_claims( + async fn get_user_info_claims( &self, token_response: &FlexibleTokenResponse, ) -> KrillResult> { - let lock_guard = self.get_connection()?; + let lock_guard = self.get_connection().await?; let conn = lock_guard.deref().as_ref().unwrap(); // safe to unwrap as was tested in get_connection() let user_info_claims: Option = if conn.userinfo_endpoint_supported { @@ -970,7 +980,8 @@ impl OpenIDConnectAuthProvider { // don't require the response to be signed as the spec says // signing it is optional: See: https://openid.net/specs/openid-connect-core-1_0.html#UserInfoResponse .require_signed_response(false) - .request(logging_http_client) + .request_async(logging_http_client) + .await .map_err(|e| { let msg = match e { UserInfoError::ClaimsVerification(ref provider_err) => { @@ -1078,7 +1089,7 @@ impl OpenIDConnectAuthProvider { } } -impl AuthProvider for OpenIDConnectAuthProvider { +impl OpenIDConnectAuthProvider { // Connect Core 1.0 section 3.1.26 Authentication Error Response // OAuth 2.0 RFC-674 4.1.2.1 (Authorization Request Errors) & 5.2 (Access Token Request Errors) @@ -1087,17 +1098,17 @@ impl AuthProvider for OpenIDConnectAuthProvider { /// an error to report back to the user (one of the ApiAuth* Error types). /// Make sure to not leak any OIDC implementation details into the Error result! /// This function is also responsible for all logging around refreshing the token / extending the session. - fn authenticate(&self, request: &hyper::Request) -> KrillResult> { + pub async fn authenticate(&self, request: &hyper::Request) -> KrillResult> { trace!("Attempting to authenticate the request.."); - self.initialize_connection_if_needed().map_err(|err| { + self.initialize_connection_if_needed().await.map_err(|err| { OpenIDConnectAuthProvider::internal_error( "OpenID Connect: Cannot authenticate request: Failed to connect to provider", Some(&stringify_cause_chain(err)), ) })?; - let res = match self.get_bearer_token(request) { + let res = match httpclient::get_bearer_token(request) { Some(token) => { // see if we can decode, decrypt and deserialize the users token // into a login session structure @@ -1126,7 +1137,7 @@ impl AuthProvider for OpenIDConnectAuthProvider { } // Token needs refresh and we have a refresh token, try to refresh - let new_auth = match self.try_refresh_token(&session) { + let new_auth = match self.try_refresh_token(&session).await { Ok(auth) => { trace!( "OpenID Connect: Successfully refreshed token for user \"{}\"", @@ -1207,7 +1218,7 @@ impl AuthProvider for OpenIDConnectAuthProvider { /// URL should be requested by the client on every login as the intention is /// that it contains randomly generated CSFF token and nonce values which /// can be used to protect against certain cross-site and replay attacks. - fn get_login_url(&self) -> KrillResult { + pub async fn get_login_url(&self) -> KrillResult { // TODO: we probably should do some more work here to ensure we get the // proper security benefits of the CSRF token, currently we are // discarding the CSRF token instead of checking it. @@ -1226,7 +1237,7 @@ impl AuthProvider for OpenIDConnectAuthProvider { // hash of the session cookie to detect ID Token replay by third // parties" - self.initialize_connection_if_needed().map_err(|err| { + self.initialize_connection_if_needed().await.map_err(|err| { OpenIDConnectAuthProvider::internal_error( "OpenID Connect: Cannot get login URL: Failed to connect to provider", Some(&stringify_cause_chain(err)), @@ -1240,7 +1251,7 @@ impl AuthProvider for OpenIDConnectAuthProvider { let nonce_b64_str = random_value.secret(); let nonce_hash = sha256(nonce_b64_str.as_bytes()); - let lock_guard = self.get_connection()?; + let lock_guard = self.get_connection().await?; let conn = lock_guard.deref().as_ref().unwrap(); // safe to unwrap as was tested in get_connection() // At the time of writing the underlying oauth2 crate CsrfToken::new_random() function is used to @@ -1402,8 +1413,8 @@ impl AuthProvider for OpenIDConnectAuthProvider { Ok(HttpResponse::new(res)) } - fn login(&self, request: &hyper::Request) -> KrillResult { - self.initialize_connection_if_needed().map_err(|err| { + pub async fn login(&self, request: &hyper::Request) -> KrillResult { + self.initialize_connection_if_needed().await.map_err(|err| { OpenIDConnectAuthProvider::internal_error( "OpenID Connect: Cannot login user: Failed to connect to provider", Some(&stringify_cause_chain(err)), @@ -1434,7 +1445,7 @@ impl AuthProvider for OpenIDConnectAuthProvider { // ========================================================================================== trace!("OpenID Connect: Submitting RFC-6749 section 4.1.3 Access Token Request"); - let token_response = self.get_token_response(code)?; + let token_response = self.get_token_response(code).await?; // TODO: extract and keep the access token and refresh token so // that we can extend the login session later. These are @@ -1488,7 +1499,7 @@ impl AuthProvider for OpenIDConnectAuthProvider { // https://openid.net/specs/openid-connect-core-1_0.html#NonceNotes let nonce_hash = Nonce::new(base64::encode_config(sha256(nonce.as_bytes()), base64::URL_SAFE_NO_PAD)); - let id_token_claims = self.get_token_id_claims(&token_response, nonce_hash)?; + let id_token_claims = self.get_token_id_claims(&token_response, nonce_hash).await?; // TODO: There's also a suggestion to verify the access token // received above using the at_hash claim in the ID token, if @@ -1500,7 +1511,7 @@ impl AuthProvider for OpenIDConnectAuthProvider { // See: https://openid.net/specs/openid-connect-core-1_0.html#UserInfo // ========================================================================================== - let user_info_claims = self.get_user_info_claims(&token_response)?; + let user_info_claims = self.get_user_info_claims(&token_response).await?; // ========================================================================================== // Step 4: Extract and validate the "claims" that tells us which @@ -1602,9 +1613,9 @@ impl AuthProvider for OpenIDConnectAuthProvider { /// logout page is not possible, instead from the end-user's perspective they are returned to the Lagosta web UI /// index page (which currently immediately redirects the user to the 3rd party OpenID Connect provider login page) /// but before that Krill contacts the provider on the logged-in users behalf to revoke their token at the provider. - fn logout(&self, request: &hyper::Request) -> KrillResult { + pub async fn logout(&self, request: &hyper::Request) -> KrillResult { // verify the bearer token indeed represents a logged-in Krill OpenID Connect provider session - let token = self.get_bearer_token(request).ok_or_else(|| { + let token = httpclient::get_bearer_token(request).ok_or_else(|| { warn!("Unexpectedly received a logout request without a session token."); Error::ApiInvalidCredentials("Invalid session token".to_string()) })?; @@ -1624,7 +1635,7 @@ impl AuthProvider for OpenIDConnectAuthProvider { // 2. verify that the provider is at least to some extent available, there's no point trying to log the token // out of the provider if we know there's a problem with the provider - self.initialize_connection_if_needed().map_err(|err| { + self.initialize_connection_if_needed().await.map_err(|err| { OpenIDConnectAuthProvider::internal_error( "OpenID Connect: Cannot logout with provider: Failed to connect to provider", Some(&stringify_cause_chain(err)), @@ -1632,7 +1643,7 @@ impl AuthProvider for OpenIDConnectAuthProvider { })?; // 3. use the provider connection details to contact the provider to terminate the client session - let lock_guard = self.get_connection()?; + let lock_guard = self.get_connection().await?; let conn = lock_guard.deref().as_ref().unwrap(); // safe to unwrap as was tested in get_connection() let go_to_url = match &conn.logout_mode { @@ -1640,7 +1651,7 @@ impl AuthProvider for OpenIDConnectAuthProvider { post_revocation_redirect_url, .. } => { - if let Err(err) = self.try_revoke_token(&session) { + if let Err(err) = self.try_revoke_token(&session).await { OpenIDConnectAuthProvider::internal_error( format!("Error while revoking token for user '{}'", session.id), Some(err.to_string()), diff --git a/src/daemon/http/mod.rs b/src/daemon/http/mod.rs index 9dc0374c..ecffd858 100644 --- a/src/daemon/http/mod.rs +++ b/src/daemon/http/mod.rs @@ -341,7 +341,7 @@ pub struct Request { impl Request { pub async fn new(request: hyper::Request, state: State) -> Self { let path = RequestPath::from_request(&request); - let actor = state.actor_from_request(&request); + let actor = state.actor_from_request(&request).await; Request { request, @@ -505,15 +505,15 @@ impl Request { } pub async fn get_login_url(&self) -> KrillResult { - self.state.get_login_url() + self.state.get_login_url().await } pub async fn login(&self) -> KrillResult { - self.state.login(&self.request) + self.state.login(&self.request).await } pub async fn logout(&self) -> KrillResult { - self.state.logout(&self.request) + self.state.logout(&self.request).await } } diff --git a/src/daemon/krillserver.rs b/src/daemon/krillserver.rs index 31881c94..80dd8563 100644 --- a/src/daemon/krillserver.rs +++ b/src/daemon/krillserver.rs @@ -136,16 +136,18 @@ impl KrillServer { // dyn AuthProvider, or concrete type needs to be known in async fn, // etc. let authorizer = match config.auth_type { - AuthType::AdminToken => Authorizer::new(config.clone(), AdminTokenAuthProvider::new(config.clone()))?, + AuthType::AdminToken => { + Authorizer::new(config.clone(), AdminTokenAuthProvider::new(config.clone()).into())? + } #[cfg(feature = "multi-user")] AuthType::ConfigFile => Authorizer::new( config.clone(), - ConfigFileAuthProvider::new(config.clone(), login_session_cache.clone())?, + ConfigFileAuthProvider::new(config.clone(), login_session_cache.clone())?.into(), )?, #[cfg(feature = "multi-user")] AuthType::OpenIDConnect => Authorizer::new( config.clone(), - OpenIDConnectAuthProvider::new(config.clone(), login_session_cache.clone())?, + OpenIDConnectAuthProvider::new(config.clone(), login_session_cache.clone())?.into(), )?, }; let system_actor = authorizer.actor_from_def(ACTOR_DEF_KRILL); @@ -268,24 +270,24 @@ impl KrillServer { &self.system_actor } - pub fn actor_from_request(&self, request: &hyper::Request) -> Actor { - self.authorizer.actor_from_request(request) + pub async fn actor_from_request(&self, request: &hyper::Request) -> Actor { + self.authorizer.actor_from_request(request).await } pub fn actor_from_def(&self, actor_def: ActorDef) -> Actor { self.authorizer.actor_from_def(actor_def) } - pub fn get_login_url(&self) -> KrillResult { - self.authorizer.get_login_url() + pub async fn get_login_url(&self) -> KrillResult { + self.authorizer.get_login_url().await } - pub fn login(&self, request: &hyper::Request) -> KrillResult { - self.authorizer.login(request) + pub async fn login(&self, request: &hyper::Request) -> KrillResult { + self.authorizer.login(request).await } - pub fn logout(&self, request: &hyper::Request) -> KrillResult { - self.authorizer.logout(request) + pub async fn logout(&self, request: &hyper::Request) -> KrillResult { + self.authorizer.logout(request).await } pub fn limit_api(&self) -> u64 { diff --git a/src/daemon/mq.rs b/src/daemon/mq.rs index 3a703759..d35f4fa1 100644 --- a/src/daemon/mq.rs +++ b/src/daemon/mq.rs @@ -139,9 +139,6 @@ impl MessageQueue { } } -unsafe impl Send for MessageQueue {} -unsafe impl Sync for MessageQueue {} - /// Implement listening for CertAuth Published events. impl eventsourcing::PostSaveEventListener for MessageQueue { fn listen(&self, ca: &CertAuth, events: &[CaEvt]) {