--- a/Cargo.lock +++ b/Cargo.lock @@ -4,38 +4,39 @@ [[package]] name = "aead" -version = "0.4.3" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877" +checksum = "5c192eb8f11fc081b0fe4259ba5af04217d4e0faddd02417310a927911abd7c8" dependencies = [ + "crypto-common", "generic-array", ] [[package]] name = "aes" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfe0133578c0986e1fe3dfcd4af1cc5b2dd6c3dbf534d69916ce16a2701d40ba" +checksum = "433cfd6710c9986c576a25ca913c39d66a6474107b406f34f91d4a8923395241" dependencies = [ "cfg-if", - "cipher 0.4.3", + "cipher", "cpufeatures", ] [[package]] name = "age" -version = "0.8.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f066ce1514d24201eab31e0831e9333d2e9b06d698b25f705ef0697fee8256a2" +checksum = "1056efa39f3f960845e69985c292022187b47bc3f83ddfc96edfc586007735a1" dependencies = [ "aes", "age-core", - "base64", + "base64 0.13.1", "bcrypt-pbkdf", "bech32", "cbc", "chacha20poly1305", - "cipher 0.4.3", + "cipher", "cookie-factory", "ctr", "curve25519-dalek", @@ -52,8 +53,7 @@ "rsa", "rust-embed", "scrypt", - "sha2 0.10.3", - "sha2 0.9.9", + "sha2", "subtle", "x25519-dalek", "zeroize", @@ -61,11 +61,11 @@ [[package]] name = "age-core" -version = "0.8.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00a5c8d8a33abc74ad393896a6305351dd159d0e184788f4729e3c80e397fa45" +checksum = "e3d2e815ac879dc23c1139e720d21c6cd4d1276345c772587285d965a69b8f32" dependencies = [ - "base64", + "base64 0.13.1", "chacha20poly1305", "cookie-factory", "hkdf", @@ -73,98 +73,101 @@ "nom", "rand 0.8.5", "secrecy", - "sha2 0.10.3", + "sha2", ] [[package]] name = "aho-corasick" -version = "0.7.18" +version = "0.7.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" +checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" dependencies = [ "memchr", ] [[package]] -name = "ansi_term" -version = "0.12.1" +name = "alejandra" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2523e3312f47f4b28c443249c1d25fe7a71e4719198a8889fcc41a155032cb7f" +dependencies = [ + "mimalloc", + "rnix", + "rowan", +] + +[[package]] +name = "android_system_properties" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" dependencies = [ - "winapi", + "libc", ] [[package]] name = "anyhow" -version = "1.0.53" +version = "1.0.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94a45b455c14666b85fc40a019e8ab9eb75e3a124e05494f5397122bc9eb06e0" +checksum = "2cb2f989d18dd141ab8ae82f64d1a8cdd37e0840f73a406896cf5e99502fab61" [[package]] +name = "arc-swap" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6" + +[[package]] name = "async-trait" -version = "0.1.52" +version = "0.1.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "061a7acccaa286c011ddc30970520b98fa40e00c9d644633fb26b5fc63a265e3" +checksum = "1cd7fce9ba8c3c042128ce72d8b2ddbf3a05747efb67ea0313c635e10bda47a2" dependencies = [ "proc-macro2", "quote", "syn", -] - -[[package]] -name = "atty" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" -dependencies = [ - "hermit-abi", - "libc", - "winapi", ] [[package]] name = "autocfg" -version = "0.1.8" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dde43e75fd43e8a1bf86103336bc699aa8d17ad1be60c76c0bdfd4828e19b78" -dependencies = [ - "autocfg 1.1.0", -] +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] -name = "autocfg" -version = "1.1.0" +name = "base64" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" [[package]] name = "base64" -version = "0.13.0" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" +checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a" [[package]] name = "base64ct" -version = "1.1.1" +version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6b4d9b1225d28d360ec6a231d65af1fd99a2a095154c8040689617290569c5c" +checksum = "b645a089122eccb6111b4f81cbc1a49f5900ac4666bb93ac027feaecf15607bf" [[package]] name = "bcrypt-pbkdf" -version = "0.8.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4ef233ffa9cb9c7820b2b0e9efd0821ed180e866c9120ec9f45518659742074" +checksum = "3806a8db60cf56efee531616a34a6aaa9a114d6da2add861b0fa4a188881b2c7" dependencies = [ "blowfish", "pbkdf2", - "sha2 0.10.3", + "sha2", ] [[package]] name = "bech32" -version = "0.8.1" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf9ff0bbfd639f15c74af777d81383cf53efb7c93613f6cab67c6c11e05bbf8b" +checksum = "d86b93f97252c47b41663388e6d155714a9d0c398b99f1005cbc5f978b29f445" [[package]] name = "bitflags" @@ -174,18 +177,9 @@ [[package]] name = "block-buffer" -version = "0.9.0" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" -dependencies = [ - "generic-array", -] - -[[package]] -name = "block-buffer" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf7fe51849ea569fd452f37822f606a5cabb684dc918707a0193fd4664ff324" +checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" dependencies = [ "generic-array", ] @@ -206,14 +200,14 @@ checksum = "e412e2cd0f2b2d93e02543ceae7917b3c70331573df19ee046bcbc35e45e87d7" dependencies = [ "byteorder", - "cipher 0.4.3", + "cipher", ] [[package]] name = "bumpalo" -version = "3.9.1" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a45a46ab1f2412e53d3a0ade76ffad2025804294569aae387231a0cd6e0899" +checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535" [[package]] name = "byteorder" @@ -223,9 +217,9 @@ [[package]] name = "bytes" -version = "1.1.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8" +checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" [[package]] name = "cbc" @@ -233,10 +227,25 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6" dependencies = [ - "cipher 0.4.3", + "cipher", ] [[package]] +name = "cbitset" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29b6ad25ae296159fb0da12b970b2fe179b234584d7cd294c891e2bbb284466b" +dependencies = [ + "num-traits", +] + +[[package]] +name = "cc" +version = "1.0.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" + +[[package]] name = "cfg-if" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -244,86 +253,78 @@ [[package]] name = "chacha20" -version = "0.8.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01b72a433d0cf2aef113ba70f62634c56fddb0f244e6377185c56a7cadbd8f91" +checksum = "c7fc89c7c5b9e7a02dfe45cd2367bae382f9ed31c61ca8debe5f827c420a2f08" dependencies = [ "cfg-if", - "cipher 0.3.0", + "cipher", "cpufeatures", - "zeroize", ] [[package]] name = "chacha20poly1305" -version = "0.9.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b84ed6d1d5f7aa9bdde921a5090e0ca4d934d250ea3b402a5fab3a994e28a2a" +checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35" dependencies = [ "aead", "chacha20", - "cipher 0.3.0", + "cipher", "poly1305", "zeroize", ] [[package]] name = "chrono" -version = "0.4.19" +version = "0.4.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73" +checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f" dependencies = [ - "libc", + "iana-time-zone", + "js-sys", "num-integer", "num-traits", "serde", - "time 0.1.44", + "time 0.1.45", + "wasm-bindgen", "winapi", ] [[package]] name = "cipher" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" -dependencies = [ - "generic-array", -] - -[[package]] -name = "cipher" version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d1873270f8f7942c191139cb8a40fd228da6c3fd2fc376d7e92d47aa14aeb59e" dependencies = [ "crypto-common", "inout", + "zeroize", ] [[package]] name = "clap" -version = "3.1.0" +version = "4.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5f1fea81f183005ced9e59cdb01737ef2423956dac5a6d731b06b2ecfaa3467" +checksum = "f13b9c79b5d1dd500d20ef541215a6423c75829ef43117e1b4d17fd8af0b5d76" dependencies = [ - "atty", "bitflags", "clap_derive", - "indexmap", - "lazy_static", - "os_str_bytes", + "clap_lex", + "is-terminal", + "once_cell", "strsim", "termcolor", "terminal_size", - "textwrap", "unicase", + "unicode-width", ] [[package]] name = "clap_derive" -version = "3.1.0" +version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fd1122e63869df2cb309f449da1ad54a7c6dfeb7c7e6ccd8e0825d9eb93bb72" +checksum = "684a277d672e91966334af371f1a7b5833f9aa00b07c84e92fbce95e00208ce8" dependencies = [ "heck", "proc-macro-error", @@ -333,10 +334,29 @@ ] [[package]] +name = "clap_lex" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "783fe232adfca04f90f56201b26d79682d4cd2625e0bc7290b95123afe558ade" +dependencies = [ + "os_str_bytes", +] + +[[package]] +name = "codespan-reporting" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" +dependencies = [ + "termcolor", + "unicode-width", +] + +[[package]] name = "const-oid" -version = "0.6.2" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d6f2aa4d0537bcc1c74df8755072bd31c1ef1a3a1b85a68e8404a8c353b7b8b" +checksum = "cec318a675afcb6a1ea1d4340e2d377e56e47c266f28043ceccbf4412ddfdd3b" [[package]] name = "cookie-factory" @@ -345,30 +365,31 @@ checksum = "396de984970346b0d9e93d1415082923c679e5ae5c3ee3dcbd104f5610af126b" [[package]] -name = "cpufeatures" -version = "0.2.1" +name = "core-foundation-sys" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95059428f66df56b63431fdb4e1947ed2190586af5c5a8a8b71122bdf5a7f469" -dependencies = [ - "libc", -] +checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" + +[[package]] +name = "countme" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "328b822bdcba4d4e402be8d9adb6eebf269f969f8eadef977a553ff3c4fbcb58" [[package]] -name = "crypto-bigint" -version = "0.2.11" +name = "cpufeatures" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f83bd3bb4314701c568e340cd8cf78c975aa0ca79e03d3f6d1677d5b0c9c0c03" +checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" dependencies = [ - "generic-array", - "rand_core 0.6.3", - "subtle", + "libc", ] [[package]] name = "crypto-common" -version = "0.1.3" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57952ca27b5e3606ff4dd79b0020231aaf9d6aa76dc05fd30137538c50bd3ce8" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ "generic-array", "typenum", @@ -376,11 +397,11 @@ [[package]] name = "ctr" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d14f329cfbaf5d0e06b5e87fff7e265d2673c5ea7d2c27691a2c107db1442a0" +checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" dependencies = [ - "cipher 0.4.3", + "cipher", ] [[package]] @@ -397,24 +418,70 @@ ] [[package]] +name = "cxx" +version = "1.0.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc831ee6a32dd495436e317595e639a587aa9907bef96fe6e6abc290ab6204e9" +dependencies = [ + "cc", + "cxxbridge-flags", + "cxxbridge-macro", + "link-cplusplus", +] + +[[package]] +name = "cxx-build" +version = "1.0.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94331d54f1b1a8895cd81049f7eaaaef9d05a7dcb4d1fd08bf3ff0806246789d" +dependencies = [ + "cc", + "codespan-reporting", + "once_cell", + "proc-macro2", + "quote", + "scratch", + "syn", +] + +[[package]] +name = "cxxbridge-flags" +version = "1.0.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48dcd35ba14ca9b40d6e4b4b39961f23d835dbb8eed74565ded361d93e1feb8a" + +[[package]] +name = "cxxbridge-macro" +version = "1.0.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81bbeb29798b407ccd82a3324ade1a7286e0d29851475990b612670f6f5124d2" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] name = "dashmap" -version = "5.1.0" +version = "5.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0834a35a3fce649144119e18da2a4d8ed12ef3862f47183fd46f625d072d96c" +checksum = "907076dfda823b0b36d2a1bb5f90c96660a5bbcd7729e10727f07858f22c4edc" dependencies = [ "cfg-if", - "num_cpus", - "parking_lot", + "hashbrown 0.12.3", + "lock_api", + "once_cell", + "parking_lot_core", ] [[package]] name = "der" -version = "0.4.5" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79b71cca7d95d7681a4b3b9cdf63c8dbc3730d0584c2c74e31416d64a90493f4" +checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de" dependencies = [ "const-oid", - "crypto-bigint", + "zeroize", ] [[package]] @@ -428,46 +495,66 @@ [[package]] name = "digest" -version = "0.10.3" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506" +checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" dependencies = [ - "block-buffer 0.10.2", + "block-buffer", + "const-oid", "crypto-common", "subtle", ] [[package]] -name = "dprint-core" -version = "0.51.0" +name = "displaydoc" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "036819ad3d310aef6ec2d2bacb83a4815f24e2ce715b68afc73ef395f392ae9f" +checksum = "3bf95dc3f046b9da4f2d51833c0d3547d8564ef6910f5c1ed130306a75b92886" dependencies = [ - "anyhow", - "bumpalo", - "indexmap", - "rustc-hash", - "serde", + "proc-macro2", + "quote", + "syn", ] [[package]] name = "env_logger" -version = "0.9.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b2cf0344971ee6c64c31be0d530793fba457d322dfec2810c453d0ef228f9c3" +checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0" dependencies = [ - "atty", "humantime", + "is-terminal", "log", "regex", "termcolor", ] [[package]] +name = "errno" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1" +dependencies = [ + "errno-dragonfly", + "libc", + "winapi", +] + +[[package]] +name = "errno-dragonfly" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +dependencies = [ + "cc", + "libc", +] + +[[package]] name = "fastrand" -version = "1.7.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3fcf0cee53519c866c09b5de1f6c56ff9d647101f81c1964fa632e148896cdf" +checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499" dependencies = [ "instant", ] @@ -489,7 +576,7 @@ "age-core", "anyhow", "async-trait", - "base64", + "base64 0.21.0", "chrono", "clap", "futures", @@ -500,7 +587,7 @@ "serde", "serde_json", "tempfile", - "time 0.3.7", + "time 0.3.17", "tokio", "tokio-util", "tracing", @@ -570,9 +657,9 @@ [[package]] name = "futures" -version = "0.3.21" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f73fe65f54d1e12b726f517d3e2135ca3125a437b6d998caf1962961f7172d9e" +checksum = "13e2792b0ff0340399d58445b88fd9770e3489eff258a4cbc1523418f12abf84" dependencies = [ "futures-channel", "futures-core", @@ -585,9 +672,9 @@ [[package]] name = "futures-channel" -version = "0.3.21" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3083ce4b914124575708913bca19bfe887522d6e2e6d0952943f5eac4a74010" +checksum = "2e5317663a9089767a1ec00a487df42e0ca174b61b4483213ac24448e4664df5" dependencies = [ "futures-core", "futures-sink", @@ -595,15 +682,15 @@ [[package]] name = "futures-core" -version = "0.3.21" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3" +checksum = "ec90ff4d0fe1f57d600049061dc6bb68ed03c7d2fbd697274c41805dcb3f8608" [[package]] name = "futures-executor" -version = "0.3.21" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9420b90cfa29e327d0429f19be13e7ddb68fa1cccb09d65e5706b8c7a749b8a6" +checksum = "e8de0a35a6ab97ec8869e32a2473f4b1324459e14c29275d14b10cb1fd19b50e" dependencies = [ "futures-core", "futures-task", @@ -612,15 +699,15 @@ [[package]] name = "futures-io" -version = "0.3.21" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc4045962a5a5e935ee2fdedaa4e08284547402885ab326734432bed5d12966b" +checksum = "bfb8371b6fb2aeb2d280374607aeabfc99d95c72edfe51692e42d3d7f0d08531" [[package]] name = "futures-macro" -version = "0.3.21" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33c1e13800337f4d4d7a316bf45a567dbcb6ffe087f16424852d97e97a91f512" +checksum = "95a73af87da33b5acf53acfebdc339fe592ecf5357ac7c0a7734ab9d8c876a70" dependencies = [ "proc-macro2", "quote", @@ -629,21 +716,21 @@ [[package]] name = "futures-sink" -version = "0.3.21" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21163e139fa306126e6eedaf49ecdb4588f939600f0b1e770f4205ee4b7fa868" +checksum = "f310820bb3e8cfd46c80db4d7fb8353e15dfff853a127158425f31e0be6c8364" [[package]] name = "futures-task" -version = "0.3.21" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c66a976bf5909d801bbef33416c41372779507e7a6b3a5e25e4749c58f776a" +checksum = "dcf79a1bf610b10f42aea489289c5a2c478a786509693b80cd39c44ccd936366" [[package]] name = "futures-util" -version = "0.3.21" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8b7abd5d659d9b90c8cba917f6ec750a74e2dc23902ef9cd4cc8c8b22e6036a" +checksum = "9c1d6de3acfef38d2be4b1f543f553131788603495be83da675e180c8d6b7bd1" dependencies = [ "futures-channel", "futures-core", @@ -659,9 +746,9 @@ [[package]] name = "generic-array" -version = "0.14.5" +version = "0.14.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd48d33ec7f05fbfa152300fdad764757cbded343c1aa1cff2fbaf4134851803" +checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" dependencies = [ "typenum", "version_check", @@ -680,32 +767,38 @@ [[package]] name = "getrandom" -version = "0.2.4" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418d37c8b1d42553c93648be529cb70f920d3baf8ef469b74b9638df426e0b4c" +checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" dependencies = [ "cfg-if", "libc", - "wasi 0.10.0+wasi-snapshot-preview1", + "wasi 0.11.0+wasi-snapshot-preview1", ] [[package]] name = "hashbrown" -version = "0.11.2" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" +checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04" + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" [[package]] name = "heck" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" [[package]] name = "hermit-abi" -version = "0.1.19" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" dependencies = [ "libc", ] @@ -725,7 +818,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "digest 0.10.3", + "digest 0.10.6", ] [[package]] @@ -747,9 +840,9 @@ [[package]] name = "i18n-config" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b62affcd43abfb51f3cbd8736f9407908dc5b44fc558a9be07460bbfd104d983" +checksum = "3d9f93ceee6543011739bc81699b5e0cf1f23f3a80364649b6d80de8636bc8df" dependencies = [ "log", "serde", @@ -761,10 +854,11 @@ [[package]] name = "i18n-embed" -version = "0.13.3" +version = "0.13.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1e64f2a432e58630bb5e01062c78e759efbf470805688ee3bb8fad78ffae6c4" +checksum = "2653dd1a8be0726315603f1c180b29f90e5b2a58f8b943d949d5170d9ad81101" dependencies = [ + "arc-swap", "fluent", "fluent-langneg", "fluent-syntax", @@ -781,9 +875,9 @@ [[package]] name = "i18n-embed-fl" -version = "0.6.4" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9420a9718ef9d0ab727840a398e25408ea0daff9ba3c681707ba05485face98e" +checksum = "a425b9bbdc2e4cd797a2a79528662cb61894bd36db582e48da2c56c28eb727cd" dependencies = [ "dashmap", "find-crate", @@ -814,14 +908,27 @@ ] [[package]] -name = "indexmap" -version = "1.8.0" +name = "iana-time-zone" +version = "0.1.53" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "winapi", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282a6247722caba404c065016bbfa522806e51714c34f5dfc3e4a3a46fcb4223" +checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca" dependencies = [ - "autocfg 1.1.0", - "hashbrown", - "serde", + "cxx", + "cxx-build", ] [[package]] @@ -855,25 +962,55 @@ [[package]] name = "intl_pluralrules" -version = "7.0.1" +version = "7.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b18f988384267d7066cc2be425e6faf352900652c046b6971d2e228d3b1c5ecf" +checksum = "078ea7b7c29a2b4df841a7f6ac8775ff6074020c6776d48491ce2268e068f972" dependencies = [ - "tinystr", "unic-langid", ] [[package]] +name = "io-lifetimes" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1abeb7a0dd0f8181267ff8adc397075586500b81b28a73e8a0208b00fc170fb3" +dependencies = [ + "libc", + "windows-sys 0.45.0", +] + +[[package]] name = "io_tee" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4b3f7cef34251886990511df1c61443aa928499d598a9473929ab5a90a527304" [[package]] +name = "is-terminal" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28dfb6c8100ccc63462345b67d1bbc3679177c75ee4bf59bf29c8b1d110b8189" +dependencies = [ + "hermit-abi", + "io-lifetimes", + "rustix", + "windows-sys 0.42.0", +] + +[[package]] name = "itoa" -version = "1.0.1" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440" + +[[package]] +name = "js-sys" +version = "0.3.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35" +checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730" +dependencies = [ + "wasm-bindgen", +] [[package]] name = "lazy_static" @@ -886,36 +1023,62 @@ [[package]] name = "libc" -version = "0.2.132" +version = "0.2.139" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8371e4e5341c3a96db127eb2465ac681ced4c433e01dd0e938adbef26ba93ba5" +checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79" [[package]] name = "libm" -version = "0.2.2" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33a33a362ce288760ec6a508b94caaec573ae7d3bbbd91b87aa0bad4456839db" +checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb" [[package]] +name = "libmimalloc-sys" +version = "0.1.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd8c7cbf8b89019683667e347572e6d55a7df7ea36b0c4ce69961b0cde67b174" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "link-cplusplus" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5" +dependencies = [ + "cc", +] + +[[package]] name = "linked-hash-map" -version = "0.5.4" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" + +[[package]] +name = "linux-raw-sys" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3" +checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" [[package]] name = "lock_api" -version = "0.4.6" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88943dd7ef4a2e5a4bfa2753aaab3013e34ce2533d1996fb18ef591e315e2b3b" +checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" dependencies = [ + "autocfg", "scopeguard", ] [[package]] name = "log" -version = "0.4.14" +version = "0.4.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" +checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" dependencies = [ "cfg-if", ] @@ -937,9 +1100,9 @@ [[package]] name = "memchr" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" [[package]] name = "memoffset" @@ -947,7 +1110,25 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" dependencies = [ - "autocfg 1.1.0", + "autocfg", +] + +[[package]] +name = "memoffset" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" +dependencies = [ + "autocfg", +] + +[[package]] +name = "mimalloc" +version = "0.1.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dcb174b18635f7561a0c6c9fc2ce57218ac7523cf72c50af80e2d79ab8f3ba1" +dependencies = [ + "libmimalloc-sys", ] [[package]] @@ -958,78 +1139,71 @@ [[package]] name = "mio" -version = "0.8.0" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba272f85fa0b41fc91872be579b3bbe0f56b792aa361a380eb669469f68dafb2" +checksum = "e5d732bc30207a6423068df043e3d02e0735b155ad7ce1a6f76fe2baa5b158de" dependencies = [ "libc", "log", - "miow", - "ntapi", - "winapi", -] - -[[package]] -name = "miow" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21" -dependencies = [ - "winapi", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys 0.42.0", ] [[package]] name = "nix" -version = "0.25.0" +version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e322c04a9e3440c327fca7b6c8a63e6890a32fa2ad689db972425f07e0d22abb" +checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a" dependencies = [ - "autocfg 1.1.0", "bitflags", "cfg-if", "libc", - "memoffset", + "memoffset 0.7.1", "pin-utils", + "static_assertions", ] [[package]] name = "nixlike" version = "0.1.0" dependencies = [ - "dprint-core", + "alejandra", "linked-hash-map", "peg", + "rnix", + "ron", "serde", + "serde-transcode", + "serde_json", "thiserror", ] [[package]] name = "nom" -version = "7.1.0" +version = "7.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b1d11e1ef389c76fe5b81bcaf2ea32cf88b62bc494e19f493d0b30e7a930109" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" dependencies = [ "memchr", "minimal-lexical", - "version_check", ] [[package]] -name = "ntapi" -version = "0.3.7" +name = "nu-ansi-term" +version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28774a7fd2fbb4f0babd8237ce554b73af68021b5f695a3cebd6c59bac0980f" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" dependencies = [ + "overload", "winapi", ] [[package]] name = "num-bigint-dig" -version = "0.7.0" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4547ee5541c18742396ae2c895d0717d0f886d8823b8399cdaf7b07d63ad0480" +checksum = "2399c9463abc5f909349d8aa9ba080e0b88b3ce2885389b60b993f39b1a56905" dependencies = [ - "autocfg 0.1.8", "byteorder", "lazy_static", "libm", @@ -1043,59 +1217,50 @@ [[package]] name = "num-integer" -version = "0.1.44" +version = "0.1.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" dependencies = [ - "autocfg 1.1.0", + "autocfg", "num-traits", ] [[package]] name = "num-iter" -version = "0.1.42" +version = "0.1.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2021c8337a54d21aca0d59a92577a029af9431cb59b909b03252b9c164fad59" +checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" dependencies = [ - "autocfg 1.1.0", + "autocfg", "num-integer", "num-traits", ] [[package]] name = "num-traits" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" dependencies = [ - "autocfg 1.1.0", + "autocfg", "libm", ] [[package]] name = "num_cpus" -version = "1.13.1" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1" +checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" dependencies = [ "hermit-abi", - "libc", -] - -[[package]] -name = "num_threads" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97ba99ba6393e2c3734791401b66902d981cb03bf190af674ca69949b6d5fb15" -dependencies = [ "libc", ] [[package]] name = "once_cell" -version = "1.9.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da32515d9f6e6e489d7bc9d84c71b060db7247dc035bbe44eac88cf87486d8d5" +checksum = "6f61fba1741ea2b3d6a1e3178721804bb716a68a6aeba1149b5d52e3d464ea66" [[package]] name = "opaque-debug" @@ -1105,18 +1270,21 @@ [[package]] name = "os_str_bytes" -version = "6.0.0" +version = "6.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e22443d1643a904602595ba1cd8f7d896afe56d26712531c5ff73a15b2fbf64" -dependencies = [ - "memchr", -] +checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee" [[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] name = "parking_lot" -version = "0.12.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f5ec2493a61ac0506c0f4199f99070cbe83857b0337006a30f3e6719b8ef58" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" dependencies = [ "lock_api", "parking_lot_core", @@ -1124,31 +1292,31 @@ [[package]] name = "parking_lot_core" -version = "0.9.1" +version = "0.9.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28141e0cc4143da2443301914478dc976a61ffdb3f043058310c70df2fed8954" +checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" dependencies = [ "cfg-if", "libc", "redox_syscall", "smallvec", - "windows-sys", + "windows-sys 0.45.0", ] [[package]] name = "pbkdf2" -version = "0.10.1" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271779f35b581956db91a3e55737327a03aa051e90b1c47aeb189508533adfd7" +checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" dependencies = [ - "digest 0.10.3", + "digest 0.10.6", ] [[package]] name = "peg" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af728fe826811af3b38c37e93de6d104485953ea373d656eebae53d6987fcd2c" +checksum = "a07f2cafdc3babeebc087e499118343442b742cc7c31b4d054682cc598508554" dependencies = [ "peg-macros", "peg-runtime", @@ -1156,9 +1324,9 @@ [[package]] name = "peg-macros" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4536be147b770b824895cbad934fccce8e49f14b4c4946eaa46a6e4a12fcdc16" +checksum = "4a90084dc05cf0428428e3d12399f39faad19b0909f64fb9170c9fdd6d9cd49b" dependencies = [ "peg-runtime", "proc-macro2", @@ -1167,33 +1335,24 @@ [[package]] name = "peg-runtime" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9b0efd3ba03c3a409d44d60425f279ec442bcf0b9e63ff4e410da31c8b0f69f" +checksum = "9fa00462b37ead6d11a82c9d568b26682d78e0477dc02d1966c013af80969739" [[package]] -name = "pem-rfc7468" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84e93a3b1cc0510b03020f33f21e62acdde3dcaef432edc95bea377fbd4c2cd4" -dependencies = [ - "base64ct", -] - -[[package]] name = "pin-project" -version = "1.0.10" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58ad3879ad3baf4e44784bc6a718a8698867bb991f8ce24d1bcbe2cfb4c3a75e" +checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.0.10" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "744b6f092ba29c3650faf274db506afd39944f48420f6c86b17cfe0ee1cb36bb" +checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" dependencies = [ "proc-macro2", "quote", @@ -1202,9 +1361,9 @@ [[package]] name = "pin-project-lite" -version = "0.2.8" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e280fbe77cc62c91527259e9442153f4688736748d24660126286329742b4c6c" +checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" [[package]] name = "pin-utils" @@ -1214,33 +1373,31 @@ [[package]] name = "pkcs1" -version = "0.2.4" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "116bee8279d783c0cf370efa1a94632f2108e5ef0bb32df31f051647810a4e2c" +checksum = "eff33bdbdfc54cc98a2eca766ebdec3e1b8fb7387523d5c9c9a2891da856f719" dependencies = [ "der", - "pem-rfc7468", + "pkcs8", + "spki", "zeroize", ] [[package]] name = "pkcs8" -version = "0.7.6" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee3ef9b64d26bad0536099c816c6734379e45bbd5f14798def6809e5cc350447" +checksum = "9eca2c590a5f85da82668fa685c09ce2888b9430e83299debf1f34b65fd4a4ba" dependencies = [ "der", - "pem-rfc7468", - "pkcs1", "spki", - "zeroize", ] [[package]] name = "poly1305" -version = "0.7.2" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "048aeb476be11a4b6ca432ca569e375810de9294ae78f4774e78ea98a9246ede" +checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" dependencies = [ "cpufeatures", "opaque-debug", @@ -1249,9 +1406,9 @@ [[package]] name = "ppv-lite86" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" [[package]] name = "proc-macro-error" @@ -1279,18 +1436,18 @@ [[package]] name = "proc-macro2" -version = "1.0.36" +version = "1.0.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029" +checksum = "6ef7d57beacfaf2d8aee5937dab7b7f28de3cb8b1828479bb5de2a7106f2bae2" dependencies = [ - "unicode-xid", + "unicode-ident", ] [[package]] name = "quote" -version = "1.0.15" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "864d3e96a899863136fc6e99f3d7cae289dafe43bf2c5ac19b70df7210c0a145" +checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b" dependencies = [ "proc-macro2", ] @@ -1316,7 +1473,7 @@ dependencies = [ "libc", "rand_chacha 0.3.1", - "rand_core 0.6.3", + "rand_core 0.6.4", ] [[package]] @@ -1336,7 +1493,7 @@ checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "rand_core 0.6.3", + "rand_core 0.6.4", ] [[package]] @@ -1350,11 +1507,11 @@ [[package]] name = "rand_core" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.4", + "getrandom 0.2.8", ] [[package]] @@ -1368,18 +1525,18 @@ [[package]] name = "redox_syscall" -version = "0.2.10" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" dependencies = [ "bitflags", ] [[package]] name = "regex" -version = "1.5.4" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461" +checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733" dependencies = [ "aho-corasick", "memchr", @@ -1397,9 +1554,9 @@ [[package]] name = "regex-syntax" -version = "0.6.25" +version = "0.6.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" +checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" [[package]] name = "remove_dir_all" @@ -1411,30 +1568,66 @@ ] [[package]] +name = "rnix" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8024a523e8836f1a5d051203dc00d833357fee94e351b51348dfaeca5364daa9" +dependencies = [ + "cbitset", + "rowan", + "smol_str", +] + +[[package]] +name = "ron" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "300a51053b1cb55c80b7a9fde4120726ddf25ca241a1cbb926626f62fb136bff" +dependencies = [ + "base64 0.13.1", + "bitflags", + "serde", +] + +[[package]] +name = "rowan" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1b36e449f3702f3b0c821411db1cbdf30fb451726a9456dce5dabcd44420043" +dependencies = [ + "countme", + "hashbrown 0.9.1", + "memoffset 0.6.5", + "rustc-hash", + "text-size", +] + +[[package]] name = "rsa" -version = "0.5.0" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e05c2603e2823634ab331437001b411b9ed11660fbc4066f3908c84a9439260d" +checksum = "094052d5470cbcef561cb848a7209968c9f12dfa6d668f4bca048ac5de51099c" dependencies = [ "byteorder", - "digest 0.9.0", - "lazy_static", + "digest 0.10.6", "num-bigint-dig", "num-integer", "num-iter", "num-traits", "pkcs1", "pkcs8", - "rand 0.8.5", + "rand_core 0.6.4", + "signature", + "smallvec", "subtle", "zeroize", ] [[package]] name = "rust-embed" -version = "6.3.0" +version = "6.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d40377bff8cceee81e28ddb73ac97f5c2856ce5522f0b260b763f434cdfae602" +checksum = "283ffe2f866869428c92e0d61c2f35dfb4355293cdfdc48f49e895c15f1333d1" dependencies = [ "rust-embed-impl", "rust-embed-utils", @@ -1443,9 +1636,9 @@ [[package]] name = "rust-embed-impl" -version = "6.2.0" +version = "6.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94e763e24ba2bf0c72bc6be883f967f794a019fafd1b86ba1daff9c91a7edd30" +checksum = "31ab23d42d71fb9be1b643fe6765d292c5e14d46912d13f3ae2815ca048ea04d" dependencies = [ "proc-macro2", "quote", @@ -1456,11 +1649,11 @@ [[package]] name = "rust-embed-utils" -version = "7.1.0" +version = "7.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad22c7226e4829104deab21df575e995bfbc4adfad13a595e387477f238c1aec" +checksum = "c1669d81dfabd1b5f8e2856b8bbe146c6192b0ba22162edc738ac0a5de18f054" dependencies = [ - "sha2 0.9.9", + "sha2", "walkdir", ] @@ -1471,10 +1664,24 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] +name = "rustix" +version = "0.36.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4fdebc4b395b7fbb9ab11e462e20ed9051e7b16e42d24042c776eca0ac81b03" +dependencies = [ + "bitflags", + "errno", + "io-lifetimes", + "libc", + "linux-raw-sys", + "windows-sys 0.42.0", +] + +[[package]] name = "ryu" -version = "1.0.9" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f" +checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde" [[package]] name = "salsa20" @@ -1482,7 +1689,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213" dependencies = [ - "cipher 0.4.3", + "cipher", ] [[package]] @@ -1501,15 +1708,21 @@ checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" [[package]] +name = "scratch" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddccb15bcce173023b3fedd9436f882a0739b8dfb45e4f6b6002bee5929f61b2" + +[[package]] name = "scrypt" -version = "0.9.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba0aaf3911fff0d942c10a49779de7754699810fc7dbe3df515613b2ecc8195a" +checksum = "9f9e24d2b632954ded8ab2ef9fea0a0c769ea56ea98bddbafbad22caeeadf45d" dependencies = [ "hmac", "pbkdf2", "salsa20", - "sha2 0.10.3", + "sha2", ] [[package]] @@ -1529,18 +1742,27 @@ [[package]] name = "serde" -version = "1.0.136" +version = "1.0.152" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789" +checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb" dependencies = [ "serde_derive", ] [[package]] +name = "serde-transcode" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "590c0e25c2a5bb6e85bf5c1bce768ceb86b316e7a01bdf07d2cb4ec2271990e2" +dependencies = [ + "serde", +] + +[[package]] name = "serde_derive" -version = "1.0.136" +version = "1.0.152" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08597e7152fcd306f41838ed3e37be9eaeed2b61c42e2117266a554fab4662f9" +checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e" dependencies = [ "proc-macro2", "quote", @@ -1549,9 +1771,9 @@ [[package]] name = "serde_json" -version = "1.0.79" +version = "1.0.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e8d9fa5c3b304765ce1fd9c4c8a3de2c8db365a5b91be52f186efc675681d95" +checksum = "877c235533714907a8c2464236f5c4b2a17262ef1bd71f38f35ea592c8da6883" dependencies = [ "itoa", "ryu", @@ -1560,26 +1782,13 @@ [[package]] name = "sha2" -version = "0.9.9" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" -dependencies = [ - "block-buffer 0.9.0", - "cfg-if", - "cpufeatures", - "digest 0.9.0", - "opaque-debug", -] - -[[package]] -name = "sha2" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "899bf02746a2c92bf1053d9327dadb252b01af1f81f90cdb902411f518bc7215" +checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" dependencies = [ "cfg-if", "cpufeatures", - "digest 0.10.3", + "digest 0.10.6", ] [[package]] @@ -1601,22 +1810,44 @@ ] [[package]] +name = "signature" +version = "1.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" +dependencies = [ + "digest 0.10.6", + "rand_core 0.6.4", +] + +[[package]] name = "slab" -version = "0.4.5" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9def91fd1e018fe007022791f865d0ccc9b3a0d5001e01aabb8b40e46000afb5" +checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" +dependencies = [ + "autocfg", +] [[package]] name = "smallvec" -version = "1.8.0" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" + +[[package]] +name = "smol_str" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83" +checksum = "7475118a28b7e3a2e157ce0131ba8c5526ea96e90ee601d9f6bb2e286a35ab44" +dependencies = [ + "serde", +] [[package]] name = "socket2" -version = "0.4.4" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0" +checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd" dependencies = [ "libc", "winapi", @@ -1630,14 +1861,21 @@ [[package]] name = "spki" -version = "0.4.1" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c01a0c15da1b0b0e1494112e7af814a678fec9bd157881b49beac661e9b6f32" +checksum = "67cf02bbac7a337dc36e4f5a693db6c21e7863f45070f7064577eb4367a3212b" dependencies = [ + "base64ct", "der", ] [[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] name = "strsim" version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1651,13 +1889,13 @@ [[package]] name = "syn" -version = "1.0.86" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a65b3f4ffa0092e9887669db0eae07941f023991ab58ea44da8fe8e2d511c6b" +checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5" dependencies = [ "proc-macro2", "quote", - "unicode-xid", + "unicode-ident", ] [[package]] @@ -1688,47 +1926,43 @@ [[package]] name = "termcolor" -version = "1.1.2" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4" +checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" dependencies = [ "winapi-util", ] [[package]] name = "terminal_size" -version = "0.1.17" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "633c1a546cee861a1a6d0dc69ebeca693bf4296661ba7852b9d21d159e0506df" +checksum = "cb20089a8ba2b69debd491f8d2d023761cbf196e999218c591fa1e7e15a21907" dependencies = [ - "libc", - "winapi", + "rustix", + "windows-sys 0.42.0", ] [[package]] -name = "textwrap" -version = "0.14.2" +name = "text-size" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0066c8d12af8b5acd21e00547c3797fde4e8677254a7ee429176ccebbe93dd80" -dependencies = [ - "terminal_size", - "unicode-width", -] +checksum = "288cb548dbe72b652243ea797201f3d481a0609a967980fcc5b2315ea811560a" [[package]] name = "thiserror" -version = "1.0.30" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "854babe52e4df1653706b98fcfc05843010039b406875930a70e4d9644e5c417" +checksum = "6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.30" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b" +checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f" dependencies = [ "proc-macro2", "quote", @@ -1746,9 +1980,9 @@ [[package]] name = "time" -version = "0.1.44" +version = "0.1.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" +checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a" dependencies = [ "libc", "wasi 0.10.0+wasi-snapshot-preview1", @@ -1757,46 +1991,64 @@ [[package]] name = "time" -version = "0.3.7" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "004cbc98f30fa233c61a38bc77e96a9106e65c88f2d3bef182ae952027e5753d" +checksum = "a561bf4617eebd33bca6434b988f39ed798e527f51a1e797d0ee4f61c0a38376" dependencies = [ - "libc", - "num_threads", "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd" + +[[package]] +name = "time-macros" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d967f99f534ca7e495c575c62638eebc2898a8c84c119b89e250477bc4ba16b2" +dependencies = [ + "time-core", ] [[package]] name = "tinystr" -version = "0.3.4" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29738eedb4388d9ea620eeab9384884fc3f06f586a2eddb56bedc5885126c7c1" +checksum = "7ac3f5b6856e931e15e07b478e98c8045239829a65f9156d4fa7e7788197a5ef" +dependencies = [ + "displaydoc", +] [[package]] name = "tokio" -version = "1.17.0" +version = "1.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2af73ac49756f3f7c01172e34a23e5d0216f6c32333757c2c61feb2bbff5a5ee" +checksum = "c8e00990ebabbe4c14c08aca901caed183ecd5c09562a12c824bb53d3c3fd3af" dependencies = [ + "autocfg", "bytes", "libc", "memchr", "mio", "num_cpus", - "once_cell", "parking_lot", "pin-project-lite", "signal-hook-registry", "socket2", "tokio-macros", - "winapi", + "windows-sys 0.42.0", ] [[package]] name = "tokio-macros" -version = "1.7.0" +version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b557f72f448c511a979e2564e55d74e6c4432fc96ff4f6241bc6bded342643b7" +checksum = "d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8" dependencies = [ "proc-macro2", "quote", @@ -1805,32 +2057,32 @@ [[package]] name = "tokio-util" -version = "0.7.0" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64910e1b9c1901aaf5375561e35b9c057d95ff41a44ede043a03e09279eabaf1" +checksum = "0bb2e075f03b3d66d8d8785356224ba688d2906a371015e225beeb65ca92c740" dependencies = [ "bytes", "futures-core", "futures-sink", - "log", "pin-project-lite", "tokio", + "tracing", ] [[package]] name = "toml" -version = "0.5.8" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa" +checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" dependencies = [ "serde", ] [[package]] name = "tracing" -version = "0.1.30" +version = "0.1.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d8d93354fe2a8e50d5953f5ae2e47a3fc2ef03292e7ea46e3cc38f549525fb9" +checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" dependencies = [ "cfg-if", "pin-project-lite", @@ -1840,9 +2092,9 @@ [[package]] name = "tracing-attributes" -version = "0.1.19" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8276d9a4a3a558d7b7ad5303ad50b53d58264641b82914b7ada36bd762e7a716" +checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" dependencies = [ "proc-macro2", "quote", @@ -1851,19 +2103,19 @@ [[package]] name = "tracing-core" -version = "0.1.22" +version = "0.1.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03cfcb51380632a72d3111cb8d3447a8d908e577d31beeac006f836383d29a23" +checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" dependencies = [ - "lazy_static", + "once_cell", "valuable", ] [[package]] name = "tracing-log" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6923477a48e41c1951f1999ef8bb5a3023eb723ceadafe78ffb65dc366761e3" +checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" dependencies = [ "lazy_static", "log", @@ -1872,13 +2124,13 @@ [[package]] name = "tracing-subscriber" -version = "0.3.8" +version = "0.3.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74786ce43333fcf51efe947aed9718fbe46d5c7328ec3f1029e818083966d9aa" +checksum = "a6176eae26dd70d0c919749377897b54a9276bd7061339665dd68777926b5a70" dependencies = [ - "ansi_term", - "lazy_static", "matchers", + "nu-ansi-term", + "once_cell", "regex", "sharded-slab", "smallvec", @@ -1899,24 +2151,24 @@ [[package]] name = "typenum" -version = "1.15.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" +checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" [[package]] name = "unic-langid" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73328fcd730a030bdb19ddf23e192187a6b01cd98be6d3140622a89129459ce5" +checksum = "398f9ad7239db44fd0f80fe068d12ff22d78354080332a5077dc6f52f14dcf2f" dependencies = [ "unic-langid-impl", ] [[package]] name = "unic-langid-impl" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a4a8eeaf0494862c1404c95ec2f4c33a2acff5076f64314b465e3ddae1b934d" +checksum = "e35bfd2f2b8796545b55d7d3fd3e89a0613f68a0d1c8bc28cb7ff96b411a35ff" dependencies = [ "serde", "tinystr", @@ -1932,24 +2184,30 @@ ] [[package]] +name = "unicode-ident" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" + +[[package]] name = "unicode-width" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973" +checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" [[package]] name = "unicode-xid" -version = "0.2.2" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" +checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" [[package]] name = "universal-hash" -version = "0.4.1" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05" +checksum = "7d3160b73c9a19f7e2939a2fdad446c57c1bbbbf4d919d3213ff1267a580d8b5" dependencies = [ - "generic-array", + "crypto-common", "subtle", ] @@ -1989,6 +2247,66 @@ checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" [[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.84" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.84" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.84" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.84" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.84" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d" + +[[package]] name = "winapi" version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -2021,46 +2339,84 @@ [[package]] name = "windows-sys" -version = "0.32.0" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3df6e476185f92a12c072be4a189a0210dcdcf512a1891d6dff9edb874deadc6" +checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" dependencies = [ + "windows_aarch64_gnullvm", "windows_aarch64_msvc", "windows_i686_gnu", "windows_i686_msvc", "windows_x86_64_gnu", + "windows_x86_64_gnullvm", "windows_x86_64_msvc", ] [[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e2522491fbfcd58cc84d47aeb2958948c4b8982e9a2d8a2a35bbaed431390e7" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608" + +[[package]] name = "windows_aarch64_msvc" -version = "0.32.0" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8e92753b1c443191654ec532f14c199742964a061be25d77d7a96f09db20bf5" +checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7" [[package]] name = "windows_i686_gnu" -version = "0.32.0" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a711c68811799e017b6038e0922cb27a5e2f43a2ddb609fe0b6f3eeda9de615" +checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640" [[package]] name = "windows_i686_msvc" -version = "0.32.0" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "146c11bb1a02615db74680b32a68e2d61f553cc24c4eb5b4ca10311740e44172" +checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605" [[package]] name = "windows_x86_64_gnu" -version = "0.32.0" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c912b12f7454c6620635bbff3450962753834be2a594819bd5e945af18ec64bc" +checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45" [[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463" + +[[package]] name = "windows_x86_64_msvc" -version = "0.32.0" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "504a2476202769977a040c6364301a3f65d0cc9e3fb08600b2bda150a0488316" +checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd" [[package]] name = "x25519-dalek" @@ -2075,24 +2431,24 @@ [[package]] name = "z85" -version = "3.0.4" +version = "3.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af896e93db81340b74b65f74276a99b210c086f3d34ed0abf433182a462af856" +checksum = "2a599daf1b507819c1121f0bf87fa37eb19daac6aff3aefefd4e6e2e0f2020fc" [[package]] name = "zeroize" -version = "1.4.3" +version = "1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d68d9dcec5f9b43a30d38c49f91dfedfaac384cb8f085faca366c26207dd1619" +checksum = "c394b5bd0c6f669e7275d9c20aa90ae064cb22e75a1cad54e1b34088034b149f" dependencies = [ "zeroize_derive", ] [[package]] name = "zeroize_derive" -version = "1.3.1" +version = "1.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81e8f13fef10b63c06356d65d416b070798ddabcadc10d3ece0c5be9b3c7eddb" +checksum = "44bf07cb3e50ea2003396695d58bf46bc9887a1f362260446fad6bc4e79bd36c" dependencies = [ "proc-macro2", "quote", --- a/cmds/fleet/Cargo.toml +++ b/cmds/fleet/Cargo.toml @@ -13,14 +13,14 @@ tempfile = "3.2" once_cell = "1.5" hostname = "0.3.1" -age-core = "0.8.0" +age-core = "0.9.0" peg = "0.8.0" nixlike = { path = "../../crates/nixlike" } -age = { version = "0.8.1", features = ["ssh", "armor"] } -base64 = "0.13.0" +age = { version = "0.9.0", features = ["ssh", "armor"] } +base64 = "0.21.0" chrono = { version = "0.4.19", features = ["serde"] } z85 = "3.0.3" -clap = { version = "3.1.0", features = [ +clap = { version = "4.0.29", features = [ "derive", "env", "wrap_help", --- a/cmds/fleet/src/cmds/build_systems.rs +++ b/cmds/fleet/src/cmds/build_systems.rs @@ -8,9 +8,6 @@ #[derive(Parser, Clone)] pub struct BuildSystems { - /// Jobs to run locally - #[clap(long)] - jobs: Option, /// Do not continue on error #[clap(long)] fail_fast: bool, @@ -19,13 +16,6 @@ privileged_build: bool, #[clap(subcommand)] subcommand: Subcommand, - - /// --builders arg for nix - #[clap(long)] - builders: Option, - /// --show-trace arg for nix - #[structopt(long)] - show_trace: bool, } enum UploadAction { @@ -126,7 +116,7 @@ Command::new("nix") }; nix_build - .args(&[ + .args([ "build", "--impure", "--json", @@ -140,22 +130,9 @@ "buildSystems.{}.{host}", action.build_attr() )), - ); + ) + .args(&config.nix_args); - if self.show_trace { - nix_build.arg("--show-trace"); - } - if let Some(builders) = &self.builders { - nix_build.arg("--builders").arg(builders); - } - if let Some(jobs) = &self.jobs { - nix_build.arg("--max-jobs"); - nix_build.arg(format!("{}", jobs)); - } - if !self.fail_fast { - nix_build.arg("--keep-going"); - } - nix_build.run_nix().await?; let built = std::fs::canonicalize(built)?; @@ -166,7 +143,7 @@ let mut tries = 0; loop { match Command::new("nix") - .args(&["copy", "--to"]) + .args(["copy", "--to"]) .arg(format!("ssh://root@{}", host)) .arg(&built) .inherit_stdio() @@ -188,7 +165,7 @@ info!("switching generation"); config .command_on(&host, "nix-env", true) - .args(&["-p", "/nix/var/nix/profiles/system", "--set"]) + .args(["-p", "/nix/var/nix/profiles/system", "--set"]) .arg(&built) .inherit_stdio() .run() @@ -219,18 +196,10 @@ Command::new("nix") }; nix_build - .args(&["build", "--impure", "--no-link", "--out-link"]) + .args(["build", "--impure", "--no-link", "--out-link"]) .arg(&out) - .arg( - config.configuration_attr_name(&format!("buildSystems.sdImage.{}", host,)), - ); - if let Some(builders) = &self.builders { - nix_build.arg("--builders").arg(builders); - } - if let Some(jobs) = &self.jobs { - nix_build.arg("--max-jobs"); - nix_build.arg(format!("{}", jobs)); - } + .arg(config.configuration_attr_name(&format!("buildSystems.sdImage.{}", host,))) + .args(&config.nix_args); if !self.fail_fast { nix_build.arg("--keep-going"); } @@ -250,21 +219,15 @@ Command::new("nix") }; nix_build - .args(&["build", "--impure", "--no-link", "--out-link"]) + .args(["build", "--impure", "--no-link", "--out-link"]) .arg(&out) .arg( config.configuration_attr_name(&format!( "buildSystems.installationCd.{}", host, )), - ); - if let Some(builders) = &self.builders { - nix_build.arg("--builders").arg(builders); - } - if let Some(jobs) = &self.jobs { - nix_build.arg("--max-jobs"); - nix_build.arg(format!("{}", jobs)); - } + ) + .args(&config.nix_args); if !self.fail_fast { nix_build.arg("--keep-going"); } --- a/cmds/fleet/src/cmds/info.rs +++ b/cmds/fleet/src/cmds/info.rs @@ -1,8 +1,15 @@ -use std::collections::BTreeSet; +use std::{collections::BTreeSet, time::Duration}; -use crate::host::Config; -use anyhow::{ensure, Result}; +use crate::{command::CommandExt, host::Config}; +use anyhow::{bail, ensure, Result}; use clap::Parser; +use nixlike::format_nix; +use serde_json::{json, Value}; +use tokio::{ + fs::{self, File}, + io::AsyncWriteExt, + process::Command, +}; #[derive(Parser)] pub struct Info { --- a/cmds/fleet/src/cmds/secrets/mod.rs +++ b/cmds/fleet/src/cmds/secrets/mod.rs @@ -2,13 +2,17 @@ fleetdata::{FleetSecret, FleetSharedSecret}, host::Config, }; -use anyhow::{bail, Result}; +use age::{Decryptor, Encryptor}; +use anyhow::{bail, ensure, Context, Result}; use clap::Parser; use futures::{StreamExt, TryStreamExt}; use std::{ - io::{self, Cursor, Read}, + collections::HashSet, + io::{self, Cursor, Read, Write}, + iter, path::PathBuf, }; +use tracing::{info, warn}; #[derive(Parser)] pub enum Secrets { @@ -42,6 +46,23 @@ #[clap(long)] public_file: Option, }, + /// Read secret from remote host, requires sudo on said host + Read { + name: String, + machine: String, + }, + UpdateShared { + name: String, + + machines: Option>, + + add_machines: Vec, + remove_machines: Vec, + + /// Which host should we use to decrypt + prefer_identities: Vec, + }, + Regenerate, } impl Secrets { @@ -78,9 +99,10 @@ let recipients = recipients .iter() .cloned() - .map(|r| Box::new(r) as Box) + .map(|r| Box::new(r) as Box) .collect(); let mut encryptor = age::Encryptor::with_recipients(recipients) + .expect("recipients provided") .wrap_output(&mut encrypted)?; io::copy(&mut Cursor::new(input), &mut encryptor)?; encryptor.finish()?; @@ -101,7 +123,7 @@ secret, public: match (public, public_file) { (Some(v), None) => Some(v), - (None, Some(v)) => Some(std::fs::read_to_string(&v)?), + (None, Some(v)) => Some(std::fs::read_to_string(v)?), (Some(_), Some(_)) => { bail!("only public or public_file should be set") } @@ -123,10 +145,14 @@ let secret = { let mut input = vec![]; io::stdin().read_to_end(&mut input)?; + if input.is_empty() { + bail!("no data provided") + } let mut encrypted = vec![]; - let recipient = Box::new(recipient) as Box; + let recipient = Box::new(recipient) as Box; let mut encryptor = age::Encryptor::with_recipients(vec![recipient]) + .expect("recipients provided") .wrap_output(&mut encrypted)?; io::copy(&mut Cursor::new(input), &mut encryptor)?; encryptor.finish()?; @@ -145,13 +171,180 @@ secret, public: match (public, public_file) { (Some(v), None) => Some(v), - (None, Some(v)) => Some(std::fs::read_to_string(&v)?), + (None, Some(v)) => Some(std::fs::read_to_string(v)?), (Some(_), Some(_)) => bail!("only public or public_file should be set"), (None, None) => None, }, }, ); } + // TODO: Instead of using sudo, decode secret on remote machine + #[allow(clippy::await_holding_refcell_ref)] + Secrets::Read { name, machine } => { + let data = config.data(); + + let Some(host_secrets) = data.host_secrets.get(&machine) else { + bail!("no secrets for machine {machine}"); + }; + let Some(secret) = host_secrets.get(&name) else { + bail!("machine {machine} has no secret {name}"); + }; + if secret.secret.is_empty() { + bail!("no secret {name}"); + } + let identity = config.identity(&machine).await?; + let decryptor = Decryptor::new(Cursor::new(&secret.secret))?; + let decryptor = match decryptor { + Decryptor::Recipients(r) => r, + Decryptor::Passphrase(_) => bail!("should be recipients"), + }; + let mut decryptor = decryptor + .decrypt(iter::once(&identity as &dyn age::Identity)) + .context("failed to decrypt, wrong key?")?; + + let mut decrypted = Vec::new(); + decryptor + .read_to_end(&mut decrypted) + .context("failed to decrypt")?; + // secret.secret + std::io::stdout().lock().write_all(&decrypted)?; + } + Secrets::UpdateShared { + name, + machines, + mut add_machines, + mut remove_machines, + prefer_identities, + } => { + let mut data = config.data_mut(); + if machines.is_none() && add_machines.is_empty() && remove_machines.is_empty() { + bail!("no operation"); + } + + let Some(mut secret) = data.shared_secrets.get_mut(&name) else { + bail!("no shared secret {name}"); + }; + if secret.secret.secret.is_empty() { + bail!("no secret"); + } + + let initial_machines = secret.owners.clone(); + let mut target_machines = secret.owners.clone(); + + // ensure!(machines.is_some() || !add_machines.is_empty() || ) + if let Some(machines) = machines { + ensure!( + add_machines.is_empty() && remove_machines.is_empty(), + "can't combine --machines and --add-machines/--remove-machines" + ); + let target = initial_machines.iter().collect::>(); + let source = machines.iter().collect::>(); + for removed in target.difference(&source) { + remove_machines.push((*removed).clone()); + } + for added in source.difference(&target) { + add_machines.push((*added).clone()); + } + } + + for machine in &remove_machines { + let mut removed = false; + while let Some(pos) = target_machines.iter().position(|m| m == machine) { + target_machines.swap_remove(pos); + removed = true; + } + if !removed { + bail!("secret is not enabled for {machine}"); + } + } + for machine in &add_machines { + if target_machines.iter().any(|m| m == machine) { + warn!("secret is already added to {machine}"); + } + } + if remove_machines.is_empty() { + warn!("secret will not be regenerated for removed machines, and until host rebuild, they will still possess the ability to decode secret"); + } + if target_machines.is_empty() { + info!("no machines left for secret, removing it"); + data.shared_secrets.remove(&name); + return Ok(()); + } + + let identity_holder = if !prefer_identities.is_empty() { + prefer_identities + .iter() + .find(|i| initial_machines.iter().any(|s| s == *i)) + } else { + secret.owners.first() + }; + let Some(identity_holder) = identity_holder else { + bail!("no available holder found"); + }; + let target_recipients = futures::stream::iter(&target_machines) + .flat_map(|m| futures::stream::once(config.recipient(m))) + .collect::>() + .await + .into_iter() + .map(|v| v.map(|v| Box::new(v) as Box)) + .collect::>>()?; + + let identity = config.identity(identity_holder).await?; + let decryptor = Decryptor::new(Cursor::new(&secret.secret.secret))?; + let decryptor = match decryptor { + Decryptor::Recipients(r) => r, + Decryptor::Passphrase(_) => bail!("should be recipients"), + }; + let mut decryptor = decryptor + .decrypt(iter::once(&identity as &dyn age::Identity)) + .context("failed to decrypt, wrong key?")?; + + let mut decrypted = Vec::new(); + decryptor + .read_to_end(&mut decrypted) + .context("failed to decrypt")?; + + let mut encrypted = vec![]; + let mut encryptor = Encryptor::with_recipients(target_recipients) + .expect("recipients provided") + .wrap_output(&mut encrypted)?; + io::copy(&mut Cursor::new(decrypted), &mut encryptor)?; + encryptor.finish()?; + + secret.secret.secret = encrypted; + } + Secrets::Regenerate => { + // config.data_mut().shared_secrets + { + let expected_shared_set = + config.shared_config_attr_names("sharedSecrets").await?; + let expected_shared_set = expected_shared_set.iter().collect::>(); + let shared_set = config.data(); + let shared_set = shared_set.shared_secrets.keys().collect::>(); + for removed in expected_shared_set.difference(&shared_set) { + warn!("secret needs to be generated: {removed}") + } + } + let mut to_remove = Vec::new(); + for (name, data) in &config.data().shared_secrets { + let expected_owners: Vec = config + .shared_config_attr(&format!("sharedSecrets.\"{name}\".expectedOwners")) + .await?; + if expected_owners.is_empty() { + warn!("secret was removed from fleet config: {name}, removing from data"); + to_remove.push(name.to_string()); + continue; + } + let set = data.owners.iter().collect::>(); + let expected_set = expected_owners.iter().collect::>(); + if set != expected_set { + warn!("reconfiguring owners for {name}"); + } + } + for k in to_remove { + config.data_mut().shared_secrets.remove(&k); + } + } } Ok(()) } --- a/cmds/fleet/src/command.rs +++ b/cmds/fleet/src/command.rs @@ -128,8 +128,15 @@ }; match log { NixLog::Msg { msg, raw_msg, .. } => { - if !(msg.ends_with(" is dirty") && msg.contains("warning:") && msg.contains(" Git tree ")) { - info!(target: "nix", "{}", raw_msg.unwrap_or(msg)) + if !(msg.starts_with("\u{1b}[35;1mwarning:\u{1b}[0m Git tree '") && msg.ends_with("' is dirty")) + && !msg.starts_with("\u{1b}[35;1mwarning:\u{1b}[0m not writing modified lock file of flake") + && msg != "\u{1b}[35;1mwarning:\u{1b}[0m \u{1b}[31;1merror:\u{1b}[0m SQLite database '\u{1b}[35;1m/nix/var/nix/db/db.sqlite\u{1b}[0m' is busy" { + if let Some(raw_msg) = raw_msg { + info!(target: "nix", "{raw_msg}\n{msg}") + }else { + info!(target: "nix", "{msg}") + + } } }, NixLog::Start { ref fields, typ, .. } if typ == 105 && !fields.is_empty() => { @@ -163,6 +170,9 @@ NixLog::Start { text, level: 1, typ: 111, .. } if text.starts_with("waiting for a machine to build ") => { // Useless repeating notification about build } + NixLog::Start { text, level: 3, typ: 111, .. } if text.starts_with("resolved derivation: ") => { + // CA resolved + } NixLog::Stop { .. } => {}, NixLog::Result { .. } => {}, _ => warn!("unknown log: {:?}", log) --- a/cmds/fleet/src/fleetdata.rs +++ b/cmds/fleet/src/fleetdata.rs @@ -1,6 +1,17 @@ +use anyhow::{bail, Result}; use chrono::{DateTime, Utc}; +use nixlike::format_nix; use serde::{Deserialize, Deserializer, Serialize, Serializer}; +use serde_json::{json, Value}; use std::collections::BTreeMap; +use tempfile::TempDir; +use tokio::{ + fs::{self, File}, + io::AsyncWriteExt, + process::Command, +}; + +use crate::command::CommandExt; #[derive(Serialize, Deserialize, Default)] #[serde(rename_all = "camelCase")] @@ -52,7 +63,7 @@ where S: Serializer, { - serializer.serialize_str(&z85::encode(&key)) + serializer.serialize_str(&z85::encode(key)) } fn from_z85<'de, D>(deserializer: D) -> Result, D::Error> @@ -61,5 +72,39 @@ { use serde::de::Error; String::deserialize(deserializer) - .and_then(|string| z85::decode(&string).map_err(|err| Error::custom(err.to_string()))) + .and_then(|string| z85::decode(string).map_err(|err| Error::custom(err.to_string()))) +} + +pub async fn dummy_flake() -> Result { + let data_str = fs::read_to_string("fleet.nix").await?; + + let mut cmd = Command::new("nix"); + cmd.arg("flake").arg("metadata").arg("--json"); + + let flake_dir = tempfile::tempdir()?; + let mut flake_nix = flake_dir.path().to_path_buf(); + flake_nix.push("flake.nix"); + // flake_dir + + File::create(&flake_nix) + .await? + .write_all( + format_nix(&format!( + " + {{ + outputs = {{self, ...}}: {{ + data = {data_str}; + }}; + }} + " + )) + .as_bytes(), + ) + .await?; + + // std::thread::sleep(Duration::MAX); + // flake_dir.close() + // FIXME + dbg!(&flake_nix); + Ok(flake_dir) } --- a/cmds/fleet/src/host.rs +++ b/cmds/fleet/src/host.rs @@ -2,6 +2,7 @@ cell::{Ref, RefCell, RefMut}, env::current_dir, ffi::{OsStr, OsString}, + io::Write, ops::Deref, path::PathBuf, sync::Arc, @@ -10,15 +11,20 @@ use anyhow::Result; use clap::{ArgGroup, Parser}; use serde::de::DeserializeOwned; +use tempfile::{NamedTempFile, TempDir}; use tokio::process::Command; -use crate::{command::CommandExt, fleetdata::FleetData}; +use crate::{ + command::CommandExt, + fleetdata::{dummy_flake, FleetData}, +}; pub struct FleetConfigInternals { pub local_system: String, pub directory: PathBuf, pub opts: FleetOpts, pub data: RefCell, + pub nix_args: Vec, } #[derive(Clone)] @@ -80,7 +86,27 @@ Command::new("nix") .arg("eval") .arg(self.configuration_attr_name("configuredHosts")) - .args(&["--apply", "builtins.attrNames", "--json", "--show-trace"]) + .args(["--apply", "builtins.attrNames", "--json", "--show-trace"]) + .args(&self.nix_args) + .run_nix_json() + .await + } + pub async fn shared_config_attr(&self, attr: &str) -> Result { + Command::new("nix") + .arg("eval") + .arg(self.configuration_attr_name(&format!("configUnchecked.{}", attr))) + .args(["--json", "--show-trace"]) + .args(&self.nix_args) + .run_nix_json() + .await + } + pub async fn shared_config_attr_names(&self, attr: &str) -> Result> { + Command::new("nix") + .arg("eval") + .arg(self.configuration_attr_name(&format!("configUnchecked.{}", attr))) + .args(["--apply", "builtins.attrNames"]) + .args(["--json", "--show-trace"]) + .args(&self.nix_args) .run_nix_json() .await } @@ -93,7 +119,8 @@ host, attr )), ) - .args(&["--json", "--show-trace"]) + .args(["--json", "--show-trace"]) + .args(&self.nix_args) .run_nix_json() .await } @@ -106,16 +133,18 @@ } pub fn save(&self) -> Result<()> { - let mut fleet_data_path = self.directory.clone(); - fleet_data_path.push("fleet.nix"); + let mut tempfile = NamedTempFile::new_in(self.directory.clone())?; let data = nixlike::serialize(&self.data() as &FleetData)?; - std::fs::write( - fleet_data_path, + tempfile.write_all( format!( "# This file contains fleet state and shouldn't be edited by hand\n\n{}\n", data - ), + ) + .as_bytes(), )?; + let mut fleet_data_path = self.directory.clone(); + fleet_data_path.push("fleet.nix"); + tempfile.persist(fleet_data_path)?; Ok(()) } } @@ -143,7 +172,7 @@ } impl FleetOpts { - pub fn build(mut self) -> Result { + pub async fn build(mut self, nix_args: Vec) -> Result { let local_system = self.local_system.clone(); if self.localhost.is_none() { self.localhost @@ -161,6 +190,7 @@ directory, data, local_system, + nix_args, }))) } } --- a/cmds/fleet/src/keys.rs +++ b/cmds/fleet/src/keys.rs @@ -35,6 +35,16 @@ Ok(key) } } + /// Insecure, requires root + pub async fn identity(&self, host: &str) -> anyhow::Result { + warn!("Loading private key for {host}"); + let key = self + .command_on(host, "cat", true) + .arg("/etc/ssh/ssh_host_ed25519_key") + .run_string() + .await?; + Ok(age::ssh::Identity::from_buffer(key.as_bytes(), None)?) + } pub async fn recipient(&self, host: &str) -> anyhow::Result { let key = self.key(host).await?; age::ssh::Recipient::from_str(&key).map_err(|e| anyhow!("parse recipient error: {:?}", e)) --- a/cmds/fleet/src/main.rs +++ b/cmds/fleet/src/main.rs @@ -59,8 +59,9 @@ .map_err(|e| anyhow!("Failed to initialize logger: {}", e))?; info!("Starting"); - let opts = RootOpts::parse(); - let config = opts.fleet_opts.build()?; + let mut os_args = std::env::args_os(); + let opts = RootOpts::parse_from((&mut os_args).take_while(|v| v != "--")); + let config = opts.fleet_opts.build(os_args.collect()).await?; match run_command(&config, opts.command).await { Ok(()) => { --- a/cmds/install-secrets/Cargo.toml +++ b/cmds/install-secrets/Cargo.toml @@ -4,14 +4,14 @@ edition = "2021" [dependencies] -age = { version = "0.8.1", features = ["ssh"] } +age = { version = "0.9.0", features = ["ssh"] } anyhow = "1.0.44" -env_logger = "0.9.0" +env_logger = "0.10.0" log = "0.4.14" -nix = "0.25.0" +nix = "0.26.1" serde = "1.0.130" -serde_json = "1.0.68" -clap = { version = "3.1.0", features = [ +serde_json = "1.0.89" +clap = { version = "4.0.29", features = [ "derive", "env", "wrap_help", --- a/cmds/install-secrets/src/main.rs +++ b/cmds/install-secrets/src/main.rs @@ -1,7 +1,7 @@ use age::Decryptor; use anyhow::{anyhow, bail, Context, Result}; use clap::Parser; -use log::error; +use log::{error, info, warn}; use nix::sys::stat::Mode; use nix::unistd::{chown, Group, User}; use serde::{Deserialize, Deserializer}; @@ -43,7 +43,7 @@ use serde::de::Error; if let Some(v) = >::deserialize(deserializer)? { Ok(Some( - z85::decode(&v).map_err(|err| Error::custom(err.to_string()))?, + z85::decode(v).map_err(|err| Error::custom(err.to_string()))?, )) } else { Ok(None) @@ -71,6 +71,7 @@ .context("failed to persist")?; } if value.secret.is_none() { + info!("no secret data found"); return Ok(()); } let secret = value.secret.as_ref().unwrap(); @@ -109,6 +110,9 @@ .context("failed to decrypt")?; decrypted }; + if decrypted.is_empty() { + warn!("secret is decoded as empty, something is broken?"); + } io::copy(&mut Cursor::new(&decrypted), &mut stable_temp) .context("failed to write decrypted file")?; @@ -155,6 +159,7 @@ let mut failed = false; for (name, value) in data { + info!("initializing secret {name}"); if let Err(e) = init_secret(&identity, value) { error!( "{:?}", --- a/crates/nixlike/Cargo.toml +++ b/crates/nixlike/Cargo.toml @@ -4,8 +4,12 @@ edition = "2021" [dependencies] -dprint-core = "0.51.0" +alejandra = "1.5.0" +rnix = "=0.10.2" linked-hash-map = "0.5.4" peg = "0.8.0" serde = "1.0.130" thiserror = "1.0.29" +serde_json = "1.0.91" +ron = "0.8.0" +serde-transcode = "1.1.1" --- a/crates/nixlike/src/lib.rs +++ b/crates/nixlike/src/lib.rs @@ -121,5 +121,9 @@ #[test] fn test() { - assert_eq!(serialize("Hello\nworld").unwrap(), "\"Hello\\nworld\""); + assert_eq!(serialize("Hello\nworld").unwrap(), "\"Hello\\nworld\"\n"); +} +pub fn format_nix(value: &String) -> String { + let (_, out) = alejandra::format::in_memory("".to_owned(), value.to_owned()); + out } --- a/crates/nixlike/src/to_string.rs +++ b/crates/nixlike/src/to_string.rs @@ -1,10 +1,6 @@ use crate::Value; -use dprint_core::formatting::{ - condition_resolvers, conditions, format, ConditionResolverContext, Info, PrintItems, - PrintOptions, Signal, -}; -fn write_nix_obj_key_buf(k: &str, v: &Value, out: &mut PrintItems) { +fn write_nix_obj_key_buf(k: &str, v: &Value, out: &mut String) { if k.contains('.') { out.push_str("\""); out.push_str(k); @@ -27,99 +23,54 @@ } } -fn write_nix_buf(value: &Value, out: &mut PrintItems) { +fn write_nix_str(str: &str, out: &mut String) { + out.push_str(&format!( + "\"{}\"", + str.replace('\\', "\\\\") + .replace('"', "\\\"") + .replace('\n', "\\n") + .replace('\t', "\\t") + .replace('\r', "\\r") + .replace('$', "\\$") + )) +} + +fn write_nix_buf(value: &Value, out: &mut String) { match value { Value::Null => out.push_str("null"), Value::Boolean(v) => out.push_str(if *v { "true" } else { "false" }), Value::Number(n) => out.push_str(&format!("{}", n)), - Value::String(s) => out.push_str(&format!( - "\"{}\"", - s.replace('\\', "\\\\") - .replace('"', "\\\"") - .replace('\n', "\\n") - .replace('\t', "\\t") - .replace('\r', "\\r") - .replace('$', "\\$") - )), + Value::String(s) => write_nix_str(s, out), Value::Array(a) => { if a.is_empty() { out.push_str("[ ]"); } else { - let start_info = Info::new("start"); - let end_info = Info::new("end"); - let is_multiple_lines = move |ctx: &mut ConditionResolverContext| { - condition_resolvers::is_multiple_lines(ctx, &start_info, &end_info) - }; - out.push_str("["); - out.push_info(start_info); - out.push_signal(Signal::StartIndent); - out.push_condition(conditions::if_true_or( - "array start", - is_multiple_lines, - Signal::NewLine.into(), - Signal::SpaceOrNewLine.into(), - )); + out.push('['); for item in a { write_nix_buf(item, out); - out.push_condition(conditions::if_true_or( - "element separator", - is_multiple_lines, - Signal::NewLine.into(), - Signal::SpaceOrNewLine.into(), - )); + out.push('\n'); } - out.push_signal(Signal::FinishIndent); - out.push_info(end_info); - out.push_str("]"); + out.push(']'); } } Value::Object(obj) => { if obj.is_empty() { out.push_str("{ }") } else { - let start_info = Info::new("start"); - let end_info = Info::new("end"); - let is_multiple_lines = move |ctx: &mut ConditionResolverContext| { - condition_resolvers::is_multiple_lines(ctx, &start_info, &end_info) - }; - out.push_str("{"); - out.push_info(start_info); - out.push_signal(Signal::StartIndent); - out.push_condition(conditions::if_true_or( - "object start", - is_multiple_lines, - Signal::NewLine.into(), - Signal::SpaceOrNewLine.into(), - )); + out.push('{'); for (k, v) in obj { write_nix_obj_key_buf(k, v, out); - out.push_condition(conditions::if_true_or( - "element separator", - is_multiple_lines, - Signal::NewLine.into(), - Signal::SpaceOrNewLine.into(), - )); + out.push('\n'); } - out.push_signal(Signal::FinishIndent); - out.push_info(end_info); - out.push_str("}"); + out.push('}'); } } }; } pub fn write_nix(value: &Value) -> String { - format( - || { - let mut items = PrintItems::new(); - write_nix_buf(value, &mut items); - items - }, - PrintOptions { - max_width: 120, - use_tabs: false, - indent_width: 2, - new_line_text: "\n", - }, - ) + let mut out = String::new(); + write_nix_buf(value, &mut out); + let (_, out) = alejandra::format::in_memory("".to_owned(), out); + out } --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,26 @@ "nodes": { "flake-utils": { "locked": { - "lastModified": 1653893745, - "narHash": "sha256-0jntwV3Z8//YwuOjzhV2sgJJPt+HY6KhU7VZUL0fKZQ=", + "lastModified": 1667395993, + "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", "owner": "numtide", "repo": "flake-utils", - "rev": "1ed9fb1935d260de5fe1c2f7ee0ebaae17ed2fa1", + "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_2": { + "locked": { + "lastModified": 1659877975, + "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0", "type": "github" }, "original": { @@ -17,16 +32,16 @@ }, "nixpkgs": { "locked": { - "lastModified": 1655726478, - "narHash": "sha256-n0ArNOgTpxabE1wp7iGGYQMf8CBUN1/SjItuV+vyjvw=", + "lastModified": 1670700221, + "narHash": "sha256-+Fy/Wu8qeAppA14R4gLSlxmD0jGNVWYrgAJUaL23qkI=", "owner": "nixos", "repo": "nixpkgs", - "rev": "439dae554611b75c181e09ad55b8485ae50da0c6", + "rev": "ccf0f09e2e6744dcd721860a44c633e8708fde2b", "type": "github" }, "original": { "owner": "nixos", - "ref": "staging-next", + "ref": "master", "repo": "nixpkgs", "type": "github" } @@ -39,13 +54,18 @@ } }, "rust-overlay": { - "flake": false, + "inputs": { + "flake-utils": "flake-utils_2", + "nixpkgs": [ + "nixpkgs" + ] + }, "locked": { - "lastModified": 1655692957, - "narHash": "sha256-PubmAIcfn/PQRA1G4FdEA9r+oo5JpgjPlx5EcTAgelM=", + "lastModified": 1670639101, + "narHash": "sha256-UvPSgbtaOk9WcgVqywnvQXOEEHx6OXdG+QXIwnbyvCw=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "72b262045a2afa8f6dca94572f6ed5409ef346ab", + "rev": "d00c488cb455c21fea731167bf8c1b8da605aac3", "type": "github" }, "original": { --- a/flake.nix +++ b/flake.nix @@ -2,9 +2,9 @@ description = "NixOS configuration management"; inputs = { - nixpkgs.url = "github:nixos/nixpkgs/staging-next"; - rust-overlay = { url = "github:oxalica/rust-overlay"; flake = false; }; - flake-utils.url = "github:numtide/flake-utils"; + nixpkgs.url = "github:nixos/nixpkgs/master"; + rust-overlay = { url = "github:oxalica/rust-overlay"; inputs.nixpkgs.follows = "nixpkgs"; }; + flake-utils = { url = "github:numtide/flake-utils"; }; }; outputs = { self, rust-overlay, flake-utils, nixpkgs }: with nixpkgs.lib; rec { lib = import ./lib { inherit flake-utils; }; @@ -15,7 +15,7 @@ inherit system; overlays = [ (import rust-overlay) ]; }; llvmPkgs = pkgs.buildPackages.llvmPackages_11; - rust = (pkgs.rustChannelOf { date = "2022-02-02"; channel = "nightly"; }).default.override { extensions = [ "rust-src" ]; }; + rust = (pkgs.rustChannelOf { date = "2022-12-02"; channel = "nightly"; }).default.override { extensions = [ "rust-src" ]; }; rustPlatform = pkgs.makeRustPlatform { cargo = rust; rustc = rust; }; in { --- a/lib/default.nix +++ b/lib/default.nix @@ -51,6 +51,7 @@ in rec { inherit configuredHosts configuredSecrets configuredSystems; + configUnchecked = root.config; buildSystems = { toplevel = builtins.mapAttrs (_name: value: value.config.system.build.toplevel) (configuredSystemsWithExtraModules [ ]); sdImage = builtins.mapAttrs (_name: value: value.config.system.build.sdImage) (configuredSystemsWithExtraModules [ --- a/modules/fleet/secrets.nix +++ b/modules/fleet/secrets.nix @@ -9,6 +9,7 @@ if not matches expectedOwners - then this secret is considered outdated, and should be regenerated/reencrypted ''; + default = [ ]; }; expectedOwners = mkOption { type = listOf str; @@ -80,7 +81,7 @@ assertions = mapAttrsToList (name: secret: { assertion = builtins.sort (a: b: a < b) secret.owners == builtins.sort (a: b: a < b) secret.expectedOwners; - message = "Shared secret ${name} is expected to be encrypted for ${builtins.toJSON secret.expectedOwners}, but it is encrypted for ${builtins.toJSON secret.owners}"; + message = "Shared secret ${name} is expected to be encrypted for ${builtins.toJSON secret.expectedOwners}, but it is encrypted for ${builtins.toJSON secret.owners}. Run fleet secrets regenerate to fix"; }) config.sharedSecrets; hosts = hostsToAttrs (host: {