diff --git a/Cargo.lock b/Cargo.lock index 37df4a3..a87a495 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,5 +1,7 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. +version = 3 + [[package]] name = "aead" version = "0.3.2" @@ -55,37 +57,27 @@ dependencies = [ ] [[package]] -name = "ansi_term" -version = "0.11.0" +name = "anyhow" +version = "1.0.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" +checksum = "ee10e43ae4a853c0a3591d4e2ada1719e553be18199d9da9d4a83f5927c2f5c7" + +[[package]] +name = "argon2" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25df3c03f1040d0069fcd3907e24e36d59f9b6fa07ba49be0eb25a794f036ba7" dependencies = [ - "winapi", + "base64ct", + "blake2", + "password-hash", ] [[package]] -name = "anyhow" -version = "1.0.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee67c11feeac938fae061b232e38e0b6d94f97a9df10e6271319325ac4c56a86" - -[[package]] -name = "arrayref" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" - -[[package]] -name = "arrayvec" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" - -[[package]] name = "async-attributes" -version = "1.1.1" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efd3d156917d94862e779f356c5acae312b08fd3121e792c857d7928c8088423" +checksum = "a3203e79f4dd9bdda415ed03cf14dae5a2bf775c683a00f94e9cd1faf0f596e5" dependencies = [ "quote", "syn", @@ -93,9 +85,9 @@ dependencies = [ [[package]] name = "async-channel" -version = "1.5.1" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59740d83946db6a5af71ae25ddf9562c2b176b2ca42cf99a455f09f4a220d6b9" +checksum = "2114d64672151c0c5eaa5e131ec84a74f06e1e559830dabba01ca30605d66319" dependencies = [ "concurrent-queue", "event-listener", @@ -114,26 +106,29 @@ dependencies = [ [[package]] name = "async-executor" -version = "1.4.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb877970c7b440ead138f6321a3b5395d6061183af779340b65e20c0fede9146" +checksum = "871f9bb5e0a22eeb7e8cf16641feb87c9dc67032ccf8ff49e772eb9941d3a965" dependencies = [ "async-task", "concurrent-queue", "fastrand", "futures-lite", "once_cell", - "vec-arena", + "slab", ] [[package]] name = "async-global-executor" -version = "1.4.3" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73079b49cd26b8fd5a15f68fc7707fc78698dc2a3d61430f2a7a9430230dfa04" +checksum = "9586ec52317f36de58453159d48351bc244bc24ced3effc1fce22f3d48664af6" dependencies = [ + "async-channel", "async-executor", "async-io", + "async-mutex", + "blocking", "futures-lite", "num_cpus", "once_cell", @@ -141,9 +136,9 @@ dependencies = [ [[package]] name = "async-h1" -version = "2.3.0" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5c68a75f812ff0f299e142c06dd0c34e3295a594d935e61eeb6c77041d1d4dc" +checksum = "cc5142de15b549749cce62923a50714b0d7b77f5090ced141599e78899865451" dependencies = [ "async-channel", "async-dup", @@ -159,25 +154,33 @@ dependencies = [ [[package]] name = "async-io" -version = "1.3.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9315f8f07556761c3e48fec2e6b276004acf426e6dc068b2c2251854d65ee0fd" +checksum = "a811e6a479f2439f0c04038796b5cfb3d2ad56c230e0f2d3f7b04d68cfee607b" dependencies = [ "concurrent-queue", - "fastrand", "futures-lite", "libc", "log", - "nb-connect", "once_cell", "parking", "polling", - "vec-arena", + "slab", + "socket2", "waker-fn", "winapi", ] [[package]] +name = "async-lock" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6a8ea61bf9947a1007c5cada31e647dbc77b103c679858150003ba697ea798b" +dependencies = [ + "event-listener", +] + +[[package]] name = "async-mutex" version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -188,15 +191,16 @@ dependencies = [ [[package]] name = "async-process" -version = "1.0.1" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c8cea09c1fb10a317d1b5af8024eeba256d6554763e85ecd90ff8df31c7bbda" +checksum = "83137067e3a2a6a06d67168e49e68a0957d215410473a740cea95a2425c0b7c6" dependencies = [ "async-io", "blocking", - "cfg-if 0.1.10", + "cfg-if 1.0.0", "event-listener", "futures-lite", + "libc", "once_cell", "signal-hook", "winapi", @@ -213,23 +217,22 @@ dependencies = [ "http-types", "log", "memchr", - "pin-project-lite 0.1.11", + "pin-project-lite 0.1.12", ] [[package]] name = "async-std" -version = "1.8.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f9f84f1280a2b436a2c77c2582602732b6c2f4321d5494d6e799e6c367859a8" +checksum = "f8056f1455169ab86dd47b47391e4ab0cbd25410a70e9fe675544f49bafaf952" dependencies = [ "async-attributes", "async-channel", "async-global-executor", "async-io", - "async-mutex", + "async-lock", "async-process", - "blocking", - "crossbeam-utils 0.8.1", + "crossbeam-utils", "futures-channel", "futures-core", "futures-io", @@ -240,7 +243,7 @@ dependencies = [ "memchr", "num_cpus", "once_cell", - "pin-project-lite 0.2.2", + "pin-project-lite 0.2.7", "pin-utils", "slab", "wasm-bindgen-futures", @@ -254,9 +257,9 @@ checksum = "e91831deabf0d6d7ec49552e489aed63b7456a7a3c46cff62adad428110b0af0" [[package]] name = "async-trait" -version = "0.1.42" +version = "0.1.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d3a45e77e34375a7923b1e8febb049bb011f064714a8e17a1a616fef01da13d" +checksum = "44318e776df68115a881de9a8fd1b9e53368d7a4a5ce4cc48517da3393233a5e" dependencies = [ "proc-macro2", "quote", @@ -270,17 +273,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "065374052e7df7ee4047b1160cca5e1467a12351a40b3da123c870ba0b8eda2a" [[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 = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -294,41 +286,38 @@ checksum = "a4521f3e3d031370679b3b140beb36dfe4801b09ac77e30c61941f97df3ef28b" [[package]] name = "base64" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff" - -[[package]] -name = "base64" version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" [[package]] -name = "bincode" -version = "1.3.1" +name = "base64ct" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f30d3a39baa26f9651f17b375061f3233dde33424a8b72b0dbe93a68a0bc896d" +checksum = "8a32fd6af2b5827bce66c29053ba0e7c42b9dcab01835835058558c10851a46b" + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" dependencies = [ - "byteorder", "serde", ] [[package]] name = "bitflags" -version = "1.2.1" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] -name = "blake2b_simd" -version = "0.5.11" +name = "blake2" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afa748e348ad3be8263be728124b24a24f268266f6f5d58af9d75f6a40b5c587" +checksum = "b9cf849ee05b2ee5fba5e36f97ff8ec2533916700fc0758d40d92136a42f3388" dependencies = [ - "arrayref", - "arrayvec", - "constant_time_eq", + "digest 0.10.3", ] [[package]] @@ -340,7 +329,7 @@ dependencies = [ "block-padding", "byte-tools", "byteorder", - "generic-array 0.12.3", + "generic-array 0.12.4", ] [[package]] @@ -353,6 +342,15 @@ dependencies = [ ] [[package]] +name = "block-buffer" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf7fe51849ea569fd452f37822f606a5cabb684dc918707a0193fd4664ff324" +dependencies = [ + "generic-array 0.14.4", +] + +[[package]] name = "block-padding" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -363,9 +361,9 @@ dependencies = [ [[package]] name = "blocking" -version = "1.0.2" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5e170dbede1f740736619b776d7251cb1b9095c435c34d8ca9f57fcd2f335e9" +checksum = "046e47d4b2d391b1f6f8b407b1deb8dee56c1852ccd868becf2710f601b5f427" dependencies = [ "async-channel", "async-task", @@ -383,15 +381,15 @@ checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" [[package]] name = "bumpalo" -version = "3.4.0" +version = "3.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e8c087f005730276d1096a652e92a8bacee2e2472bcc9715a74d2bec38b5820" +checksum = "8f1e260c3a9040a7c19a12468758f4c16f31a81a1fe087482be9570ec864bb6c" [[package]] name = "byte-pool" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e38e98299d518ec351ca016363e0cbfc77059dcd08dfa9700d15e405536097a" +checksum = "f8c7230ddbb427b1094d477d821a99f3f54d36333178eeb806e279bcdcecf0ca" dependencies = [ "crossbeam-queue", "stable_deref_trait", @@ -405,9 +403,9 @@ checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" [[package]] name = "byteorder" -version = "1.4.2" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae44d1a3d5a19df61dd0c8beb138458ac2a53a7ac09eba97d55592540004306b" +checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" [[package]] name = "cache-padded" @@ -417,9 +415,9 @@ checksum = "631ae5198c9be5e753e5cc215e1bd73c2b466a3565173db433f52bb9d3e66dba" [[package]] name = "cc" -version = "1.0.66" +version = "1.0.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c0496836a84f8d0495758516b8621a622beb77c0fed418570e50764093ced48" +checksum = "22a9137b95ea06864e018375b72adfb7db6e6f68cfc8df5a04d00288050485ee" [[package]] name = "cfg-if" @@ -444,17 +442,29 @@ dependencies = [ [[package]] name = "clap" -version = "2.33.3" +version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002" +checksum = "6d76c22c9b9b215eeb8d016ad3a90417bd13cb24cf8142756e6472445876cab7" dependencies = [ - "ansi_term", - "atty", "bitflags", - "strsim", + "clap_derive", + "indexmap", + "lazy_static", + "os_str_bytes", "textwrap", - "unicode-width", - "vec_map", +] + +[[package]] +name = "clap_derive" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fd1122e63869df2cb309f449da1ad54a7c6dfeb7c7e6ccd8e0825d9eb93bb72" +dependencies = [ + "heck", + "proc-macro-error", + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -468,38 +478,35 @@ dependencies = [ [[package]] name = "const_fn" -version = "0.4.5" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28b9d6de7f49e22cf97ad17fc4036ece69300032f45f78f30b4a4482cdc3f4a6" - -[[package]] -name = "constant_time_eq" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" +checksum = "f92cfa0fd5690b3cf8c1ef2cabbd9b7ef22fa53cf5e1f92b05103f6d5d1cf6e7" [[package]] name = "cookie" -version = "0.14.3" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "784ad0fbab4f3e9cef09f20e0aea6000ae08d2cb98ac4c0abc53df18803d702f" +checksum = "03a5d7b21829bc7b4bf4754a978a241ae54ea55a40f92bb20216e54096f4b951" dependencies = [ "aes-gcm", - "base64 0.12.3", + "base64", "hkdf", "hmac", "percent-encoding", - "rand 0.7.3", - "sha2", + "rand 0.8.5", + "sha2 0.9.8", "time", "version_check", ] [[package]] -name = "cpuid-bool" -version = "0.1.2" +name = "cpufeatures" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8aebca1129a03dc6dc2b127edd729435bbc4a37e1d5f4d7513165089ceb02634" +checksum = "95059428f66df56b63431fdb4e1947ed2190586af5c5a8a8b71122bdf5a7f469" +dependencies = [ + "libc", +] [[package]] name = "cpuid-bool" @@ -518,13 +525,12 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.1" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1aaa739f95311c2c7887a76863f500026092fb1dce0161dab577e559ef3569d" +checksum = "4ec02e091aa634e2c3ada4a392989e7c3116673ef0ac5b72232439094d73b7fd" dependencies = [ "cfg-if 1.0.0", - "const_fn", - "crossbeam-utils 0.8.1", + "crossbeam-utils", "lazy_static", "memoffset", "scopeguard", @@ -532,48 +538,55 @@ dependencies = [ [[package]] name = "crossbeam-queue" -version = "0.2.3" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "774ba60a54c213d409d5353bda12d49cd68d14e45036a285234c8d6f91f92570" +checksum = "9b10ddc024425c88c2ad148c1b0fd53f4c6d38db9697c9f1588381212fa657c9" dependencies = [ - "cfg-if 0.1.10", - "crossbeam-utils 0.7.2", - "maybe-uninit", + "cfg-if 1.0.0", + "crossbeam-utils", ] [[package]] name = "crossbeam-utils" -version = "0.7.2" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8" +checksum = "d82cfc11ce7f2c3faef78d8a684447b40d503d9681acebed6cb728d45940c4db" dependencies = [ - "autocfg", - "cfg-if 0.1.10", - "lazy_static", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02d96d1e189ef58269ebe5b97953da3274d83a93af647c2ddd6f9dab28cedb8d" -dependencies = [ - "autocfg", "cfg-if 1.0.0", "lazy_static", ] [[package]] -name = "crypto-mac" -version = "0.10.0" +name = "crypto-common" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4857fd85a0c34b3c3297875b747c1e02e06b6a0ea32dd892d8192b9ce0813ea6" +checksum = "57952ca27b5e3606ff4dd79b0020231aaf9d6aa76dc05fd30137538c50bd3ce8" +dependencies = [ + "generic-array 0.14.4", + "typenum", +] + +[[package]] +name = "crypto-mac" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bff07008ec701e8028e2ceb8f83f0e4274ee62bd2dbdc4fefff2e9a91824081a" dependencies = [ "generic-array 0.14.4", "subtle", ] [[package]] +name = "ctor" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccc0a48a9b826acdf4028595adc9db92caea352f7af011a3034acd172a52a0aa" +dependencies = [ + "quote", + "syn", +] + +[[package]] name = "ctr" version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -583,10 +596,14 @@ dependencies = [ ] [[package]] -name = "data-encoding" -version = "2.3.1" +name = "dashmap" +version = "4.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "993a608597367c6377b258c25d7120740f00ed23a2252b729b1932dd7866f908" +checksum = "e77a43b28d0668df09411cb0bc9a8c2adc40f9a048afe863e05fd43251e8e39c" +dependencies = [ + "cfg-if 1.0.0", + "num_cpus", +] [[package]] name = "digest" @@ -594,7 +611,7 @@ version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" dependencies = [ - "generic-array 0.12.3", + "generic-array 0.12.4", ] [[package]] @@ -607,19 +624,30 @@ dependencies = [ ] [[package]] -name = "dirs" -version = "3.0.1" +name = "digest" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "142995ed02755914747cc6ca76fc7e4583cd18578746716d0508ea6ed558b9ff" +checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506" +dependencies = [ + "block-buffer 0.10.2", + "crypto-common", + "subtle", +] + +[[package]] +name = "directories" +version = "4.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f51c5d4ddabd36886dd3e1438cb358cdcb0d7c499cb99cb4ac2e38e18b5cb210" dependencies = [ "dirs-sys", ] [[package]] name = "dirs-sys" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e93d7f5705de3e49895a2b5e0b8855a1c27f080192ae9c32a6432d50741a57a" +checksum = "03d86534ed367a67548dc68113a0f5db55432fdfbb6e6f9d77704397d95d5780" dependencies = [ "libc", "redox_users", @@ -646,9 +674,9 @@ checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" [[package]] name = "fastrand" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca5faf057445ce5c9d4329e382b2ce7ca38550ef3b73a5348362d5f24e0c7fe3" +checksum = "b394ed3d285a429378d3b384b9eb1285267e7df4b166df24b7a6939a04dc392e" dependencies = [ "instant", ] @@ -671,9 +699,9 @@ dependencies = [ [[package]] name = "form_urlencoded" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ece68d15c92e84fa4f19d3780f1294e5ca82a78a6d515f1efaabcc144688be00" +checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" dependencies = [ "matches", "percent-encoding", @@ -691,46 +719,47 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.9" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f01c61843314e95f96cc9245702248733a3a3d744e43e2e755e3c7af8348a0a9" +checksum = "5da6ba8c3bb3c165d3c7319fc1cc8304facf1fb8db99c5de877183c08a273888" dependencies = [ "futures-core", ] [[package]] name = "futures-core" -version = "0.3.9" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db8d3b0917ff63a2a96173133c02818fac4a746b0a57569d3baca9ec0e945e08" +checksum = "88d1c26957f23603395cd326b0ffe64124b818f4449552f960d815cfba83a53d" [[package]] name = "futures-io" -version = "0.3.9" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e37c1a51b037b80922864b8eed90692c5cd8abd4c71ce49b77146caa47f3253b" +checksum = "522de2a0fe3e380f1bc577ba0474108faf3f6b18321dbf60b3b9c39a75073377" [[package]] name = "futures-lite" -version = "1.11.3" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4481d0cd0de1d204a4fa55e7d45f07b1d958abcb06714b3446438e2eff695fb" +checksum = "7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48" dependencies = [ "fastrand", "futures-core", "futures-io", "memchr", "parking", - "pin-project-lite 0.2.2", + "pin-project-lite 0.2.7", "waker-fn", ] [[package]] name = "futures-macro" -version = "0.3.9" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f8719ca0e1f3c5e34f3efe4570ef2c0610ca6da85ae7990d472e9cbfba13664" +checksum = "18e4a4b95cea4b4ccbcf1c5675ca7c4ee4e9e75eb79944d07defde18068f79bb" dependencies = [ + "autocfg", "proc-macro-hack", "proc-macro2", "quote", @@ -739,23 +768,21 @@ dependencies = [ [[package]] name = "futures-task" -version = "0.3.9" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a92a0843a2ff66823a8f7c77bffe9a09be2b64e533562c412d63075643ec0038" -dependencies = [ - "once_cell", -] +checksum = "1d3d00f4eddb73e498a54394f228cd55853bdf059259e8e7bc6e69d408892e99" [[package]] name = "futures-util" -version = "0.3.9" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "036a2107cdeb57f6d7322f1b6c363dad67cd63ca3b7d1b925bdf75bd5d96cda9" +checksum = "36568465210a3a6ee45e1f165136d68671471a501e632e9a98d96872222b5481" dependencies = [ + "autocfg", "futures-core", "futures-macro", "futures-task", - "pin-project-lite 0.2.2", + "pin-project-lite 0.2.7", "pin-utils", "proc-macro-hack", "proc-macro-nested", @@ -773,9 +800,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.12.3" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c68f0274ae0e023facc3c97b2e00f076be70e254bc851d972503b328db79b2ec" +checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" dependencies = [ "typenum", ] @@ -803,13 +830,13 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.1" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4060f4657be78b8e766215b02b18a2e862d83745545de804638e2b545e81aee6" +checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753" dependencies = [ "cfg-if 1.0.0", "libc", - "wasi 0.10.1+wasi-snapshot-preview1", + "wasi 0.10.2+wasi-snapshot-preview1", ] [[package]] @@ -839,26 +866,27 @@ dependencies = [ name = "gmarche" version = "0.1.0" dependencies = [ + "argon2", "async-std", "bincode", "bs58", - "dirs", + "clap", + "directories", "handlebars", "hex", - "rand 0.8.1", + "rand 0.8.5", "serde", "serde_json", - "sha2", + "sha2 0.10.2", "sled", - "structopt", "tide", ] [[package]] name = "handlebars" -version = "3.5.2" +version = "4.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "964d0e99a61fe9b1b347389b77ebf8b7e1587b70293676aaca7d27e59b9073b2" +checksum = "25546a65e5cf1f471f3438796fc634650b31d7fcde01d444c309aeb28b92e3a8" dependencies = [ "log", "pest", @@ -869,28 +897,31 @@ dependencies = [ ] [[package]] -name = "heck" -version = "0.3.2" +name = "hashbrown" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cbf45460356b7deeb5e3415b5563308c0a9b057c85e12b06ad551f98d0a6ac" -dependencies = [ - "unicode-segmentation", -] +checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" + +[[package]] +name = "heck" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" [[package]] name = "hermit-abi" -version = "0.1.17" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aca5565f760fb5b220e499d72710ed156fdb74e631659e99377d9ebfbd13ae8" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" dependencies = [ "libc", ] [[package]] name = "hex" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "644f9158b2f133fd50f5fb3242878846d9eb792e445c893805ff0e3824006e35" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "hkdf" @@ -914,29 +945,31 @@ dependencies = [ [[package]] name = "http-client" -version = "6.2.0" +version = "6.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "010092b71b94ee49293995625ce7a607778b8b4099c8088fa84fd66bd3e0f21c" +checksum = "ea880b03c18a7e981d7fb3608b8904a98425d53c440758fcebf7d934aa56547c" dependencies = [ "async-trait", + "cfg-if 1.0.0", + "dashmap", "http-types", "log", ] [[package]] name = "http-types" -version = "2.9.0" +version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2ab8d0085fb82859c9adf050bd53992297ecdd03a665a230dfa50c8c964bf3d" +checksum = "6e9b187a72d63adbfba487f48095306ac823049cb504ee195541e91c7775f5ad" dependencies = [ "anyhow", "async-channel", "async-std", - "base64 0.13.0", + "base64", "cookie", "futures-lite", "infer", - "pin-project-lite 0.1.11", + "pin-project-lite 0.2.7", "rand 0.7.3", "serde", "serde_json", @@ -947,15 +980,15 @@ dependencies = [ [[package]] name = "httparse" -version = "1.3.4" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd179ae861f0c2e53da70d892f5f3029f9594be0c41dc5269cd371691b1dc2f9" +checksum = "acd94fdbe1d4ff688b67b04eee2e17bd50995534a61539e45adfefb45e5e5503" [[package]] name = "idna" -version = "0.2.0" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02e2673c30ee86b5b96a9cb52ad15718aa1f966f5ab9ad54a8b95d5ca33120a9" +checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" dependencies = [ "matches", "unicode-bidi", @@ -963,6 +996,16 @@ dependencies = [ ] [[package]] +name = "indexmap" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282a6247722caba404c065016bbfa522806e51714c34f5dfc3e4a3a46fcb4223" +dependencies = [ + "autocfg", + "hashbrown", +] + +[[package]] name = "infer" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -970,24 +1013,30 @@ checksum = "64e9829a50b42bb782c1df523f78d332fe371b10c661e78b7a3c34b0198e9fac" [[package]] name = "instant" -version = "0.1.9" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61124eeebbd69b8190558df225adf7e4caafce0d743919e5d6b19652314ec5ec" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" dependencies = [ "cfg-if 1.0.0", ] [[package]] name = "itoa" -version = "0.4.7" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736" +checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" + +[[package]] +name = "itoa" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35" [[package]] name = "js-sys" -version = "0.3.46" +version = "0.3.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf3d7383929f7c9c7c2d0fa596f325832df98c3704f2c60553080f7127a58175" +checksum = "7cc9ffccd38c451a86bf13657df244e9c3f37493cce8e5e21e940963777acc84" dependencies = [ "wasm-bindgen", ] @@ -1009,26 +1058,27 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.82" +version = "0.2.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89203f3fba0a3795506acaad8ebce3c80c0af93f994d5a1d7a0b1eeb23271929" +checksum = "fbe5e23404da5b4f555ef85ebed98fb4083e55a00c317800bc2a50ede9f3d219" [[package]] name = "lock_api" -version = "0.4.2" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd96ffd135b2fd7b973ac026d28085defbe8983df057ced3eb4f2130b0831312" +checksum = "712a4d093c9976e24e7dbca41db895dabcbac38eb5f4045393d17a95bdfb1109" dependencies = [ "scopeguard", ] [[package]] name = "log" -version = "0.4.11" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fabed175da42fed1fa0746b0ea71f412aa9d35e76e95e59b192c64b9dc2bf8b" +checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" dependencies = [ - "cfg-if 0.1.10", + "cfg-if 1.0.0", + "value-bag", ] [[package]] @@ -1039,42 +1089,26 @@ checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" [[package]] name = "matches" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" - -[[package]] -name = "maybe-uninit" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" +checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" [[package]] name = "memchr" -version = "2.3.4" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525" +checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" [[package]] name = "memoffset" -version = "0.6.1" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "157b4208e3059a8f9e78d559edc658e13df41410cb3ae03979c83130067fdd87" +checksum = "59accc507f1338036a0477ef61afdae33cde60840f4dfe481319ce3ad116ddf9" dependencies = [ "autocfg", ] [[package]] -name = "nb-connect" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8123a81538e457d44b933a02faf885d3fe8408806b23fa700e8f01c6c3a98998" -dependencies = [ - "libc", - "winapi", -] - -[[package]] name = "num_cpus" version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1086,9 +1120,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.5.2" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13bd41f508810a131401606d54ac32a467c97172d74ba7662562ebba5ad07fa0" +checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56" [[package]] name = "opaque-debug" @@ -1103,6 +1137,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] +name = "os_str_bytes" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e22443d1643a904602595ba1cd8f7d896afe56d26712531c5ff73a15b2fbf64" +dependencies = [ + "memchr", +] + +[[package]] name = "parking" version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1110,9 +1153,9 @@ checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72" [[package]] name = "parking_lot" -version = "0.11.1" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d7744ac029df22dca6284efe4e898991d28e3085c706c972bcd7da4a27a15eb" +checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" dependencies = [ "instant", "lock_api", @@ -1121,9 +1164,9 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.8.2" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ccb628cad4f84851442432c60ad8e1f607e29752d0bf072cbd0baf28aa34272" +checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216" dependencies = [ "cfg-if 1.0.0", "instant", @@ -1134,6 +1177,17 @@ dependencies = [ ] [[package]] +name = "password-hash" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d791538a6dcc1e7cb7fe6f6b58aca40e7f79403c45b2bc274008b5e647af1d8" +dependencies = [ + "base64ct", + "rand_core 0.6.3", + "subtle", +] + +[[package]] name = "percent-encoding" version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1184,18 +1238,18 @@ dependencies = [ [[package]] name = "pin-project" -version = "1.0.3" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a83804639aad6ba65345661744708855f9fbcb71176ea8d28d05aeb11d975e7" +checksum = "576bc800220cc65dac09e99e97b08b358cfab6e17078de8dc5fee223bd2d0c08" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.0.3" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7bcc46b8f73443d15bc1c5fecbb315718491fa9187fa483f0e359323cde8b3a" +checksum = "6e8fe8163d14ce7f0cdac2e040116f22eac817edabff0be91e8aff7e9accf389" dependencies = [ "proc-macro2", "quote", @@ -1204,15 +1258,15 @@ dependencies = [ [[package]] name = "pin-project-lite" -version = "0.1.11" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c917123afa01924fc84bb20c4c03f004d9c38e5127e3c039bbf7f4b9c76a2f6b" +checksum = "257b64915a082f7811703966789728173279bdebb956b143dbcd23f6f970a777" [[package]] name = "pin-project-lite" -version = "0.2.2" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6196deb704a4cebec440b7a50d05d55410be7c923caf0447f9d052508b8dca3c" +checksum = "8d31d11c69a6b52a174b42bdc0c30e5e11670f90788b2c471c31c1d17d449443" [[package]] name = "pin-utils" @@ -1222,14 +1276,14 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "polling" -version = "2.0.2" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2a7bc6b2a29e632e45451c941832803a18cce6781db04de8a04696cdca8bde4" +checksum = "685404d509889fade3e86fe3a5803bca2ec09b0c0778d5ada6ec8bf7a8de5259" dependencies = [ - "cfg-if 0.1.10", + "cfg-if 1.0.0", "libc", "log", - "wepoll-sys", + "wepoll-ffi", "winapi", ] @@ -1239,16 +1293,16 @@ version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eebcc4aa140b9abd2bc40d9c3f7ccec842679cd79045ac3a7ac698c1a064b7cd" dependencies = [ - "cpuid-bool 0.2.0", + "cpuid-bool", "opaque-debug 0.3.0", "universal-hash", ] [[package]] name = "ppv-lite86" -version = "0.2.10" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857" +checksum = "ed0cfbc8191465bed66e1718596ee0b0b35d5ee1f41c5df2189d0fe8bde535ba" [[package]] name = "proc-macro-error" @@ -1282,30 +1336,30 @@ checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" [[package]] name = "proc-macro-nested" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eba180dafb9038b050a4c280019bbedf9f2467b61e5d892dcad585bb57aadc5a" +checksum = "bc881b2c22681370c6a780e47af9840ef841837bc98118431d4e1868bd0c1086" [[package]] name = "proc-macro2" -version = "1.0.24" +version = "1.0.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71" +checksum = "ba508cc11742c0dc5c1659771673afbab7a0efab23aa17e854cbab0837ed0b43" dependencies = [ "unicode-xid", ] [[package]] name = "quick-error" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ac73b1112776fc109b2e61909bc46c7e1bf0d7f690ffb1676553acce16d5cda" +checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" [[package]] name = "quote" -version = "1.0.8" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "991431c3519a3f36861882da93630ce66b52918dcf1b8e2fd66b397fc96f28df" +checksum = "38bc8cc6a5f2e3655e0899c1b848643b2562f853f114bfec7be120678e3ace05" dependencies = [ "proc-macro2", ] @@ -1320,19 +1374,18 @@ dependencies = [ "libc", "rand_chacha 0.2.2", "rand_core 0.5.1", - "rand_hc 0.2.0", + "rand_hc", ] [[package]] name = "rand" -version = "0.8.1" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c24fcd450d3fa2b592732565aa4f17a27a61c65ece4726353e000939b0edee34" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", - "rand_chacha 0.3.0", - "rand_core 0.6.1", - "rand_hc 0.3.0", + "rand_chacha 0.3.1", + "rand_core 0.6.3", ] [[package]] @@ -1347,12 +1400,12 @@ dependencies = [ [[package]] name = "rand_chacha" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e12735cf05c9e10bf21534da50a147b924d555dc7a547c42e6bb2d5b6017ae0d" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "rand_core 0.6.1", + "rand_core 0.6.3", ] [[package]] @@ -1366,11 +1419,11 @@ dependencies = [ [[package]] name = "rand_core" -version = "0.6.1" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c026d7df8b298d90ccbbc5190bd04d85e159eaf5576caeacf8741da93ccbd2e5" +checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" dependencies = [ - "getrandom 0.2.1", + "getrandom 0.2.3", ] [[package]] @@ -1383,29 +1436,22 @@ dependencies = [ ] [[package]] -name = "rand_hc" -version = "0.3.0" +name = "redox_syscall" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3190ef7066a446f2e7f42e239d161e905420ccab01eb967c9eb27d21b2322a73" +checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff" dependencies = [ - "rand_core 0.6.1", + "bitflags", ] [[package]] -name = "redox_syscall" -version = "0.1.57" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce" - -[[package]] name = "redox_users" -version = "0.3.5" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de0737333e7a9502c789a36d7c7fa6092a49895d4faa31ca5df163857ded2e9d" +checksum = "528532f3d801c87aec9def2add9ca802fe569e44a544afe633765267840abe64" dependencies = [ - "getrandom 0.1.16", + "getrandom 0.2.3", "redox_syscall", - "rust-argon2", ] [[package]] @@ -1415,18 +1461,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56770675ebc04927ded3e60633437841581c285dc6236109ea25fbf3beb7b59e" [[package]] -name = "rust-argon2" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b18820d944b33caa75a71378964ac46f58517c92b6ae5f762636247c09e78fb" -dependencies = [ - "base64 0.13.0", - "blake2b_simd", - "constant_time_eq", - "crossbeam-utils 0.8.1", -] - -[[package]] name = "rustc_version" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1464,18 +1498,18 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.118" +version = "1.0.136" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06c64263859d87aa2eb554587e2d23183398d617427327cf2b3d0ed8c69e4800" +checksum = "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.118" +version = "1.0.136" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c84d3526699cd55261af4b941e4e725444df67aa4f9e6a3564f18030d12672df" +checksum = "08597e7152fcd306f41838ed3e37be9eaeed2b61c42e2117266a554fab4662f9" dependencies = [ "proc-macro2", "quote", @@ -1484,22 +1518,21 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.61" +version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fceb2595057b6891a4ee808f70054bd2d12f0e97f1cbb78689b59f676df325a" +checksum = "8e8d9fa5c3b304765ce1fd9c4c8a3de2c8db365a5b91be52f186efc675681d95" dependencies = [ - "itoa", + "itoa 1.0.1", "ryu", "serde", ] [[package]] name = "serde_qs" -version = "0.7.2" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5af82de3c6549b001bec34961ff2d6a54339a87bab37ce901b693401f27de6cb" +checksum = "c7715380eec75f029a4ef7de39a9200e0a63823176b759d055b613f5a87df6a6" dependencies = [ - "data-encoding", "percent-encoding", "serde", "thiserror", @@ -1512,7 +1545,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "edfa57a7f8d9c1d260a549e7224100f6c43d43f9103e06dd8b4095a9b2b43ce9" dependencies = [ "form_urlencoded", - "itoa", + "itoa 0.4.8", "ryu", "serde", ] @@ -1537,22 +1570,33 @@ checksum = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d" [[package]] name = "sha2" -version = "0.9.2" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e7aab86fe2149bad8c507606bdb3f4ef5e7b2380eb92350f56122cca72a42a8" +checksum = "b69f9a4c9740d74c5baa3fd2e547f9525fa8088a8a958e0ca2409a514e33f5fa" dependencies = [ "block-buffer 0.9.0", "cfg-if 1.0.0", - "cpuid-bool 0.1.2", + "cpufeatures", "digest 0.9.0", "opaque-debug 0.3.0", ] [[package]] -name = "signal-hook" -version = "0.1.17" +name = "sha2" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e31d442c16f047a671b5a71e2161d6e68814012b7f5379d269ebd915fac2729" +checksum = "55deaec60f81eefe3cce0dc50bda92d6d8e88f2a27df7c5033b42afeb1ed2676" +dependencies = [ + "cfg-if 1.0.0", + "cpufeatures", + "digest 0.10.3", +] + +[[package]] +name = "signal-hook" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c98891d737e271a2954825ef19e46bd16bdb98e2746f2eec4f7a4ef7946efd1" dependencies = [ "libc", "signal-hook-registry", @@ -1560,9 +1604,9 @@ dependencies = [ [[package]] name = "signal-hook-registry" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16f1d0fef1604ba8f7a073c7e701f213e056707210e9020af4528e0101ce11a6" +checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" dependencies = [ "libc", ] @@ -1578,19 +1622,19 @@ dependencies = [ [[package]] name = "slab" -version = "0.4.2" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" +checksum = "9def91fd1e018fe007022791f865d0ccc9b3a0d5001e01aabb8b40e46000afb5" [[package]] name = "sled" -version = "0.34.6" +version = "0.34.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d0132f3e393bcb7390c60bb45769498cf4550bcb7a21d7f95c02b69f6362cdc" +checksum = "7f96b4737c2ce5987354855aed3797279def4ebf734436c6aa4552cf8e169935" dependencies = [ "crc32fast", "crossbeam-epoch", - "crossbeam-utils 0.8.1", + "crossbeam-utils", "fs2", "fxhash", "libc", @@ -1600,9 +1644,19 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.6.1" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e" +checksum = "1ecab6c735a6bb4139c0caafd0cc3635748bbb3acf4550e8138122099251f309" + +[[package]] +name = "socket2" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dc90fe6c7be1a323296982db1836d1ea9e47b6839496dde9a541bc496df3516" +dependencies = [ + "libc", + "winapi", +] [[package]] name = "stable_deref_trait" @@ -1612,9 +1666,9 @@ checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" [[package]] name = "standback" -version = "0.2.14" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c66a8cff4fa24853fdf6b51f75c6d7f8206d7c75cab4e467bcd7f25c2b1febe0" +checksum = "e113fb6f3de07a243d434a56ec6f186dfd51cb08448239fe7bcae73f87ff28ff" dependencies = [ "version_check", ] @@ -1669,46 +1723,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "213701ba3370744dcd1a12960caa4843b3d68b4d1c0a5d575e0d65b2ee9d16c0" [[package]] -name = "strsim" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" - -[[package]] -name = "structopt" -version = "0.3.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5277acd7ee46e63e5168a80734c9f6ee81b1367a7d8772a2d765df2a3705d28c" -dependencies = [ - "clap", - "lazy_static", - "structopt-derive", -] - -[[package]] -name = "structopt-derive" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ba9cdfda491b814720b6b06e0cac513d922fc407582032e8706e9f137976f90" -dependencies = [ - "heck", - "proc-macro-error", - "proc-macro2", - "quote", - "syn", -] - -[[package]] name = "subtle" -version = "2.4.0" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e81da0851ada1f3e9d4312c704aa4f8806f0f9d69faaf8df2f3464b4a9437c2" +checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" + +[[package]] +name = "sval" +version = "1.0.0-alpha.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45f6ee7c7b87caf59549e9fe45d6a69c75c8019e79e212a835c5da0e92f0ba08" [[package]] name = "syn" -version = "1.0.58" +version = "1.0.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc60a3d73ea6594cd712d830cc1f0390fd71542d8c8cd24e70cc54cdfd5e05d5" +checksum = "f2afee18b8beb5a596ecb4a2dce128c719b4ba399d34126b9e4396e3f9860966" dependencies = [ "proc-macro2", "quote", @@ -1717,27 +1747,24 @@ dependencies = [ [[package]] name = "textwrap" -version = "0.11.0" +version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" -dependencies = [ - "unicode-width", -] +checksum = "0066c8d12af8b5acd21e00547c3797fde4e8677254a7ee429176ccebbe93dd80" [[package]] name = "thiserror" -version = "1.0.23" +version = "1.0.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76cc616c6abf8c8928e2fdcc0dbfab37175edd8fb49a4641066ad1364fdab146" +checksum = "854babe52e4df1653706b98fcfc05843010039b406875930a70e4d9644e5c417" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.23" +version = "1.0.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9be73a2caec27583d0046ef3796c3794f868a5bc813db689eed00c7631275cd1" +checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b" dependencies = [ "proc-macro2", "quote", @@ -1746,9 +1773,9 @@ dependencies = [ [[package]] name = "tide" -version = "0.15.0" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c832ca099a0645f6446b6c8900b09e3b76978dedc0d7383438698b32ff07f734" +checksum = "c459573f0dd2cc734b539047f57489ea875af8ee950860ded20cf93a79a1dee0" dependencies = [ "async-h1", "async-sse", @@ -1760,7 +1787,7 @@ dependencies = [ "http-types", "kv-log-macro", "log", - "pin-project-lite 0.1.11", + "pin-project-lite 0.2.7", "route-recognizer", "serde", "serde_json", @@ -1768,9 +1795,9 @@ dependencies = [ [[package]] name = "time" -version = "0.2.24" +version = "0.2.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "273d3ed44dca264b0d6b3665e8d48fb515042d42466fad93d2a45b90ec4058f7" +checksum = "4752a97f8eebd6854ff91f1c1824cd6160626ac4bd44287f7f4ea2035a02a242" dependencies = [ "const_fn", "libc", @@ -1793,9 +1820,9 @@ dependencies = [ [[package]] name = "time-macros-impl" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5c3be1edfad6027c69f5491cf4cb310d1a71ecd6af742788c6ff8bced86b8fa" +checksum = "fd3c141a1b43194f3f56a1411225df8646c55781d5f26db825b3d98507eb482f" dependencies = [ "proc-macro-hack", "proc-macro2", @@ -1806,9 +1833,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.1.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccf8dbc19eb42fba10e8feaaec282fb50e2c14b2726d6301dbfeed0f73306a6f" +checksum = "2c1c1d5a42b6245520c249549ec267180beaffcc0615401ac8e31853d4b6d8d2" dependencies = [ "tinyvec_macros", ] @@ -1821,9 +1848,9 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] name = "typenum" -version = "1.12.0" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "373c8a200f9e67a0c95e62a4f52fbf80c23b4381c05a17845531982fa99e6b33" +checksum = "b63708a265f51345575b27fe43f9500ad611579e764c79edbc2037b1121959ec" [[package]] name = "ucd-trie" @@ -1833,45 +1860,30 @@ checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c" [[package]] name = "unicode-bidi" -version = "0.3.4" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" -dependencies = [ - "matches", -] +checksum = "1a01404663e3db436ed2746d9fefef640d868edae3cceb81c3b8d5732fda678f" [[package]] name = "unicode-normalization" -version = "0.1.16" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a13e63ab62dbe32aeee58d1c5408d35c36c392bba5d9d3142287219721afe606" +checksum = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9" dependencies = [ "tinyvec", ] [[package]] -name = "unicode-segmentation" -version = "1.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb0d2e7be6ae3a5fa87eed5fb451aff96f2573d2694942e40543ae0bbe19c796" - -[[package]] -name = "unicode-width" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3" - -[[package]] name = "unicode-xid" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564" +checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" [[package]] name = "universal-hash" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8326b2c654932e3e4f9196e69d08fdf7cfd718e1dc6f66b347e6024a0c961402" +checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05" dependencies = [ "generic-array 0.14.4", "subtle", @@ -1879,9 +1891,9 @@ dependencies = [ [[package]] name = "url" -version = "2.2.0" +version = "2.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5909f2b0817350449ed73e8bcd81c8c3c8d9a7a5d8acba4b27db277f1868976e" +checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c" dependencies = [ "form_urlencoded", "idna", @@ -1891,22 +1903,21 @@ dependencies = [ ] [[package]] -name = "vec-arena" -version = "1.0.0" +name = "value-bag" +version = "1.0.0-alpha.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eafc1b9b2dfc6f5529177b62cf806484db55b32dc7c9658a118e11bbeb33061d" - -[[package]] -name = "vec_map" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" +checksum = "79923f7731dc61ebfba3633098bf3ac533bbd35ccd8c57e7088d9a5eebe0263f" +dependencies = [ + "ctor", + "sval", + "version_check", +] [[package]] name = "version_check" -version = "0.9.2" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5a972e5669d67ba988ce3dc826706fb0a8b01471c088cb0b6110b805cc36aed" +checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe" [[package]] name = "waker-fn" @@ -1922,15 +1933,15 @@ checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" [[package]] name = "wasi" -version = "0.10.1+wasi-snapshot-preview1" +version = "0.10.2+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93c6c3420963c5c64bca373b25e77acb562081b9bb4dd5bb864187742186cea9" +checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" [[package]] name = "wasm-bindgen" -version = "0.2.69" +version = "0.2.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cd364751395ca0f68cafb17666eee36b63077fb5ecd972bbcd74c90c4bf736e" +checksum = "632f73e236b219150ea279196e54e610f5dbafa5d61786303d4da54f84e47fce" dependencies = [ "cfg-if 1.0.0", "serde", @@ -1940,9 +1951,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.69" +version = "0.2.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1114f89ab1f4106e5b55e688b828c0ab0ea593a1ea7c094b141b14cbaaec2d62" +checksum = "a317bf8f9fba2476b4b2c85ef4c4af8ff39c3c7f0cdfeed4f82c34a880aa837b" dependencies = [ "bumpalo", "lazy_static", @@ -1955,9 +1966,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.19" +version = "0.4.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fe9756085a84584ee9457a002b7cdfe0bfff169f45d2591d8be1345a6780e35" +checksum = "8e8d7523cb1f2a4c96c1317ca690031b714a51cc14e05f712446691f413f5d39" dependencies = [ "cfg-if 1.0.0", "js-sys", @@ -1967,9 +1978,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.69" +version = "0.2.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a6ac8995ead1f084a8dea1e65f194d0973800c7f571f6edd70adf06ecf77084" +checksum = "d56146e7c495528bf6587663bea13a8eb588d39b36b679d83972e1a2dbbdacf9" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1977,9 +1988,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.69" +version = "0.2.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5a48c72f299d80557c7c62e37e7225369ecc0c963964059509fbafe917c7549" +checksum = "7803e0eea25835f8abdc585cd3021b3deb11543c6fe226dcd30b228857c5c5ab" dependencies = [ "proc-macro2", "quote", @@ -1990,25 +2001,25 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.69" +version = "0.2.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e7811dd7f9398f14cc76efd356f98f03aa30419dea46aa810d71e819fc97158" +checksum = "0237232789cf037d5480773fe568aac745bfe2afbc11a863e97901780a6b47cc" [[package]] name = "web-sys" -version = "0.3.46" +version = "0.3.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "222b1ef9334f92a21d3fb53dc3fd80f30836959a90f9274a626d7e06315ba3c3" +checksum = "38eb105f1c59d9eaa6b5cdc92b859d85b926e82cb2e0945cd0c9259faa6fe9fb" dependencies = [ "js-sys", "wasm-bindgen", ] [[package]] -name = "wepoll-sys" -version = "3.0.1" +name = "wepoll-ffi" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fcb14dea929042224824779fbc82d9fab8d2e6d3cbc0ac404de8edf489e77ff" +checksum = "d743fdedc5c64377b5fc2bc036b01c7fd642205a0d96356034ae3404d49eb7fb" dependencies = [ "cc", ] diff --git a/Cargo.toml b/Cargo.toml index 2af12f9..20d1105 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,19 +2,20 @@ name = "gmarche" version = "0.1.0" authors = ["Pascal Engélibert "] -edition = "2018" +edition = "2021" [dependencies] -async-std = { version = "1.8.0", features = ["attributes"] } -bincode = "1.3.1" +argon2 = "0.3.4" +async-std = { version = "1.10.0", features = ["attributes"] } +bincode = "1.3.3" bs58 = "0.4.0" -dirs = "3.0.1" -handlebars = "3.5.2" -hex = "0.4.2" -rand = "0.8.1" -serde = { version = "1.0.118", features = ["derive"] } -serde_json = "1.0.61" -sha2 = "0.9.2" -sled = "0.34.6" -structopt = "0.3.21" -tide = { version = "0.15.0", default-features = false, features = ["h1-server", "cookies", "logger"] } +clap = { version = "3.1.1", default-features = false, features = ["derive", "std"] } +directories = "4.0.1" +handlebars = "4.2.1" +hex = "0.4.3" +rand = "0.8.5" +serde = { version = "1.0.136", features = ["derive"] } +serde_json = "1.0.79" +sha2 = "0.10.2" +sled = "0.34.7" +tide = { version = "0.16.0", default-features = false, features = ["h1-server", "cookies", "logger"] } diff --git a/src/cli.rs b/src/cli.rs index 0e88715..26643da 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -1,8 +1,8 @@ +use clap::Parser; use std::{ ffi::OsStr, path::{Path, PathBuf}, }; -use structopt::StructOpt; #[derive(Clone, Debug)] pub struct ConfigPath(pub PathBuf); @@ -10,9 +10,10 @@ pub struct ConfigPath(pub PathBuf); impl Default for ConfigPath { fn default() -> ConfigPath { ConfigPath( - dirs::config_dir() - .unwrap_or_else(|| Path::new(".config").to_path_buf()) - .join("gmarche"), + directories::ProjectDirs::from("tk", "txmn", "gmarche").map_or_else( + || Path::new(".config").to_path_buf(), + |o| o.config_dir().into(), + ), ) } } @@ -34,19 +35,19 @@ impl ToString for ConfigPath { } } -#[derive(Clone, Debug, StructOpt)] -#[structopt(name = "gmarche")] +#[derive(Clone, Debug, Parser)] +#[clap(name = "gmarche")] pub struct MainOpt { /// Directory - #[structopt(short, long, parse(from_os_str), default_value)] + #[clap(short, long, parse(from_os_str), default_value_t=ConfigPath::default())] pub dir: ConfigPath, /// Subcommand - #[structopt(subcommand)] + #[clap(subcommand)] pub cmd: MainSubcommand, } -#[derive(Clone, Debug, StructOpt)] +#[derive(Clone, Debug, Parser)] pub enum MainSubcommand { /// Initialize config & db Init, diff --git a/src/db.rs b/src/db.rs index 70579c0..3185097 100644 --- a/src/db.rs +++ b/src/db.rs @@ -3,17 +3,29 @@ use std::path::Path; const DB_DIR: &str = "db"; -const DB_NAME_ADS: &str = "ads"; +const DB_NAME_AD: &str = "ad"; +const DB_NAME_AD_BY_GROUP: &str = "ad_by_group"; +const DB_NAME_GROUP: &str = "group"; +const DB_NAME_GROUP_BY_GROUP: &str = "group_by_group"; +const DB_NAME_GROUP_BY_NAME: &str = "group_by_name"; #[derive(Clone)] pub struct Dbs { - pub ads: Tree, + pub ad: Tree, + pub ad_by_group: Tree, + pub group: Tree, + pub group_by_group: Tree, + pub group_by_name: Tree, } pub fn load_dbs(path: &Path) -> Dbs { let db = sled::open(path.join(DB_DIR)).expect("Cannot open db"); Dbs { - ads: db.open_tree(DB_NAME_ADS).unwrap(), + ad: db.open_tree(DB_NAME_AD).unwrap(), + ad_by_group: db.open_tree(DB_NAME_AD_BY_GROUP).unwrap(), + group: db.open_tree(DB_NAME_GROUP).unwrap(), + group_by_group: db.open_tree(DB_NAME_GROUP_BY_GROUP).unwrap(), + group_by_name: db.open_tree(DB_NAME_GROUP_BY_NAME).unwrap(), } } diff --git a/src/main.rs b/src/main.rs index c2d82bd..3e6719b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -9,11 +9,13 @@ mod static_files; mod templates; mod utils; -use structopt::StructOpt; +use utils::*; + +use clap::Parser; #[async_std::main] async fn main() { - let opt = cli::MainOpt::from_args(); + let opt = cli::MainOpt::parse(); match opt.cmd { cli::MainSubcommand::Init => { @@ -29,9 +31,25 @@ async fn main() { fn init_all<'reg>(opt: cli::MainOpt) -> (config::Config, db::Dbs, templates::Templates<'reg>) { std::fs::create_dir_all(&opt.dir.0).expect("Cannot create dir"); static_files::init_static_files(&opt.dir.0); + let dbs = db::load_dbs(&opt.dir.0); + + if !dbs.group.contains_key(&ROOT_GROUP_ID).unwrap() { + dbs.group + .insert( + ROOT_GROUP_ID, + bincode::serialize(&Group { + name: String::new(), + parent: ROOT_GROUP_ID, + title: String::from("ĞMarché"), + }) + .unwrap(), + ) + .unwrap(); + } + ( config::read_config(&opt.dir.0), - db::load_dbs(&opt.dir.0), + dbs, templates::load_templates(&opt.dir.0), ) } diff --git a/src/queries.rs b/src/queries.rs index b3aba13..a3b209a 100644 --- a/src/queries.rs +++ b/src/queries.rs @@ -1,5 +1,15 @@ use serde::{Deserialize, Serialize}; +#[derive(Clone, Debug, Deserialize)] +pub struct AdminLoginQuery { + pub psw: String, +} + +#[derive(Clone, Debug, Deserialize)] +pub struct AdminRmAdQuery { + pub ad: String, +} + #[derive(Clone, Debug, Deserialize, Serialize)] pub struct NewAdQuery { pub author: String, @@ -10,6 +20,13 @@ pub struct NewAdQuery { pub title: String, } +#[derive(Clone, Debug, Deserialize, Serialize)] +pub struct AdminNewGroupQuery { + pub parent: String, + pub name: String, + pub title: String, +} + #[derive(Clone, Debug, Deserialize)] pub struct RmAdQuery { pub ad: String, @@ -17,31 +34,23 @@ pub struct RmAdQuery { } #[derive(Clone, Debug, Deserialize)] -pub struct AdminRmAdQuery { - pub ad: String, -} - -#[derive(Clone, Debug, Deserialize)] -pub struct AdminLoginQuery { - pub psw: String, -} - -#[derive(Clone, Debug, Deserialize)] #[serde(tag = "a")] -pub enum Query { +pub enum IndexQuery { #[serde(rename = "new_ad")] - NewAdQuery(NewAdQuery), + NewAd(NewAdQuery), #[serde(rename = "rm_ad")] - RmAdQuery(RmAdQuery), + RmAd(RmAdQuery), } #[derive(Clone, Debug, Deserialize)] #[serde(tag = "a")] pub enum AdminQuery { #[serde(rename = "login")] - LoginQuery(AdminLoginQuery), + Login(AdminLoginQuery), + #[serde(rename = "new_group")] + NewGroup(AdminNewGroupQuery), #[serde(rename = "rm_ad")] - RmAdQuery(AdminRmAdQuery), + RmAd(AdminRmAdQuery), } #[derive(Debug, Deserialize)] diff --git a/src/server.rs b/src/server.rs index 9a5e602..2c150da 100644 --- a/src/server.rs +++ b/src/server.rs @@ -1,11 +1,11 @@ use super::{cli, config::*, db::*, queries::*, static_files, templates::*, utils::*}; -use handlebars::to_json; -use sha2::{Digest, Sha512Trunc256}; -use std::{ - convert::{TryFrom, TryInto}, - sync::Arc, +use argon2::{ + password_hash::{rand_core::OsRng, PasswordHash, PasswordHasher, PasswordVerifier, SaltString}, + Argon2, }; +use handlebars::to_json; +use std::{convert::TryFrom, sync::Arc}; pub async fn start_server( config: Config, @@ -45,6 +45,44 @@ pub async fn start_server( handle_post_index(req, config.clone(), templates.clone(), dbs.clone()) } }); + app.at(&format!("{}g/:group", config.root_url)).get({ + let config = config.clone(); + let templates = templates.clone(); + let dbs = dbs.clone(); + move |req: tide::Request<()>| { + serve_group( + req, + config.clone(), + templates.clone(), + dbs.clone(), + &[], + None, + ) + } + }); + app.at(&format!("{}g/:group/:ad", config.root_url)).get({ + let config = config.clone(); + let templates = templates.clone(); + let dbs = dbs.clone(); + move |req: tide::Request<()>| { + serve_group( + req, + config.clone(), + templates.clone(), + dbs.clone(), + &[], + None, + ) + } + }); + app.at(&format!("{}admin/g/:group", config.root_url)).get({ + let config = config.clone(); + let templates = templates.clone(); + let dbs = dbs.clone(); + move |req: tide::Request<()>| { + handle_admin_group(req, config.clone(), templates.clone(), dbs.clone()) + } + }); app.at(&format!("{}ad/:ad", config.root_url)).post({ let config = config.clone(); let templates = templates.clone(); @@ -129,11 +167,12 @@ async fn serve_index<'a>( errors, }, ads: &to_json( - dbs.ads - .iter() + dbs.ad_by_group + .scan_prefix(ROOT_GROUP_ID) .filter_map(|x| { - let (ad_id, ad) = x.ok()?; - let ad_id = hex::encode(ad_id.as_ref()); + let (k, ad) = x.ok()?; + let ad_id = + hex::encode(AdId::try_from(&k.as_ref()[16..32]).ok()?); Some(AdWithId { ad: bincode::deserialize::(&ad).ok()?, selected: selected_ad.map_or(false, |i| i == ad_id), @@ -142,6 +181,16 @@ async fn serve_index<'a>( }) .collect::>(), ), + groups: &to_json( + dbs.group_by_group + .scan_prefix(ROOT_GROUP_ID) + .keys() + .filter_map(|k| GroupId::try_from(&k.ok()?.as_ref()[16..32]).ok()) + .filter_map(|subgroup_id| { + bincode::deserialize(&dbs.group.get(subgroup_id).ok()??).ok() + }) + .collect::>(), + ), new_ad_form_refill, }, ) @@ -150,6 +199,171 @@ async fn serve_index<'a>( .build()) } +async fn serve_group<'a>( + req: tide::Request<()>, + config: Arc, + templates: Arc>, + dbs: Dbs, + errors: &[ErrorTemplate<'a>], + new_ad_form_refill: Option, +) -> tide::Result { + if let Ok(group_name) = req.param("group") { + if let Some(group_id) = dbs.group_by_name.get(group_name).unwrap() { + let selected_ad = req.param("ad").ok(); + + Ok(tide::Response::builder(200) + .content_type(tide::http::mime::HTML) + .body( + templates + .hb + .render( + "group.html", + &GroupTemplate { + common: CommonTemplate { + lang: "fr", + root_url: &config.root_url, + title: &config.title, + errors, + }, + ads: &to_json( + dbs.ad_by_group + .scan_prefix(group_id.clone()) + .filter_map(|x| { + let (k, ad) = x.ok()?; + let ad_id = hex::encode( + AdId::try_from(&k.as_ref()[16..32]).ok()?, + ); + Some(AdWithId { + ad: bincode::deserialize::(&ad).ok()?, + selected: selected_ad.map_or(false, |i| i == ad_id), + id: ad_id, + }) + }) + .collect::>(), + ), + groups: &to_json( + dbs.group_by_group + .scan_prefix(group_id) + .keys() + .filter_map(|k| { + GroupId::try_from(&k.ok()?.as_ref()[16..32]).ok() + }) + .filter_map(|subgroup_id| { + bincode::deserialize(&dbs.group.get(subgroup_id).ok()??) + .ok() + }) + .collect::>(), + ), + new_ad_form_refill, + }, + ) + .unwrap_or_else(|e| e.to_string()), + ) + .build()) + } else { + serve_index( + req, + config, + templates, + dbs, + &[ErrorTemplate { + text: "Le groupe demandé n'existe pas.", + }], + None, + ) + .await + } + } else { + serve_index(req, config, templates, dbs, &[], None).await + } +} + +async fn serve_admin_group<'a>( + req: tide::Request<()>, + config: Arc, + templates: Arc>, + dbs: Dbs, + errors: &[ErrorTemplate<'a>], + new_group_form_refill: Option, +) -> tide::Result { + if let Ok(group_name) = req.param("group") { + if let Some(group_id) = dbs.group_by_name.get(group_name).unwrap() { + if let Some(group) = dbs.group.get(&group_id).unwrap() { + if let Ok(group) = bincode::deserialize::(&group) { + let selected_ad = req.param("ad").ok(); + + return Ok(tide::Response::builder(200) + .content_type(tide::http::mime::HTML) + .body( + templates + .hb + .render( + "admin_group.html", + &AdminGroupTemplate { + common: CommonTemplate { + lang: "fr", + root_url: &config.root_url, + title: &config.title, + errors, + }, + ads: &to_json( + dbs.ad_by_group + .scan_prefix(group_id.clone()) + .filter_map(|x| { + let (k, ad) = x.ok()?; + let ad_id = hex::encode( + AdId::try_from(&k.as_ref()[16..32]).ok()?, + ); + Some(AdWithId { + ad: bincode::deserialize::(&ad).ok()?, + selected: selected_ad + .map_or(false, |i| i == ad_id), + id: ad_id, + }) + }) + .collect::>(), + ), + group: &to_json(group), + groups: &to_json( + dbs.group_by_group + .scan_prefix(group_id) + .keys() + .filter_map(|k| { + GroupId::try_from(&k.ok()?.as_ref()[16..32]) + .ok() + }) + .filter_map(|subgroup_id| { + bincode::deserialize( + &dbs.group.get(subgroup_id).ok()??, + ) + .ok() + }) + .collect::>(), + ), + new_group_form_refill, + }, + ) + .unwrap_or_else(|e| e.to_string()), + ) + .build()); + } + } + } + serve_admin( + req, + config, + templates, + dbs, + &[ErrorTemplate { + text: "Le groupe demandé n'existe pas.", + }], + ) + .await + } else { + serve_admin(req, config, templates, dbs, &[]).await + } +} + async fn serve_admin<'a>( req: tide::Request<()>, config: Arc, @@ -173,11 +387,12 @@ async fn serve_admin<'a>( errors, }, ads: &to_json( - dbs.ads - .iter() + dbs.ad_by_group + .scan_prefix(ROOT_GROUP_ID) .filter_map(|x| { - let (ad_id, ad) = x.ok()?; - let ad_id = hex::encode(ad_id.as_ref()); + let (k, ad) = x.ok()?; + let ad_id = + hex::encode(AdId::try_from(&k.as_ref()[16..32]).ok()?); Some(AdWithId { ad: bincode::deserialize::(&ad).ok()?, selected: selected_ad.map_or(false, |i| i == ad_id), @@ -186,6 +401,16 @@ async fn serve_admin<'a>( }) .collect::>(), ), + groups: &to_json( + dbs.group_by_group + .scan_prefix(ROOT_GROUP_ID) + .keys() + .filter_map(|k| GroupId::try_from(&k.ok()?.as_ref()[16..32]).ok()) + .filter_map(|subgroup_id| { + bincode::deserialize(&dbs.group.get(subgroup_id).ok()??).ok() + }) + .collect::>(), + ), }, ) .unwrap_or_else(|e| e.to_string()), @@ -226,11 +451,11 @@ async fn handle_post_index( templates: Arc>, dbs: Dbs, ) -> tide::Result { - match req.body_form::().await? { - Query::NewAdQuery(query) => { + match req.body_form::().await? { + IndexQuery::NewAd(query) => { handle_new_ad(req, config.clone(), templates.clone(), dbs.clone(), query).await } - Query::RmAdQuery(query) => { + IndexQuery::RmAd(query) => { handle_rm_ad(req, config.clone(), templates.clone(), dbs.clone(), query).await } } @@ -243,9 +468,7 @@ async fn handle_new_ad( dbs: Dbs, query: NewAdQuery, ) -> tide::Result { - let mut hasher = Sha512Trunc256::new(); - hasher.update(&query.psw); - dbs.ads + dbs.ad .insert( AdId::random(), bincode::serialize(&Ad { @@ -275,7 +498,10 @@ async fn handle_new_ad( }) }, author: query.author, - password: hasher.finalize()[..].try_into().unwrap(), + password: Argon2::default() + .hash_password(query.psw.as_bytes(), &SaltString::generate(&mut OsRng)) + .unwrap() + .to_string(), price: query.price, quantity: query.quantity, time: 0, @@ -284,7 +510,7 @@ async fn handle_new_ad( .unwrap(), ) .unwrap(); - dbs.ads.flush_async().await.unwrap(); + dbs.ad.flush_async().await.unwrap(); Ok(tide::Redirect::new(&config.root_url).into()) } @@ -295,42 +521,31 @@ async fn handle_rm_ad( dbs: Dbs, query: RmAdQuery, ) -> tide::Result { - let mut hasher = Sha512Trunc256::new(); - hasher.update(query.psw); - let password: PasswordHash = hasher.finalize()[..].try_into().unwrap(); - /*query - .ads - .into_iter() - .filter_map(|x| Some(AdId::try_from(hex::decode(x).ok()?.as_ref()).ok()?)) - .for_each(|ad_id| { - if let Some(raw) = dbs.ads.get(&ad_id).unwrap() { - if let Ok(ad) = bincode::deserialize::(&raw) { - if ad.password == password { - dbs.ads.remove(&ad_id).unwrap(); - } - } - } - });*/ if let Ok(ad_id) = hex::decode(query.ad) { if let Ok(ad_id) = AdId::try_from(ad_id.as_ref()) { - if let Some(raw) = dbs.ads.get(&ad_id).unwrap() { + if let Some(raw) = dbs.ad.get(&ad_id).unwrap() { if let Ok(ad) = bincode::deserialize::(&raw) { - if ad.password == password { - dbs.ads.remove(&ad_id).unwrap(); + if let Ok(password) = PasswordHash::new(&ad.password) { + if Argon2::default() + .verify_password(query.psw.as_bytes(), &password) + .is_ok() + { + dbs.ad.remove(&ad_id).unwrap(); - dbs.ads.flush_async().await.unwrap(); - } else { - return serve_index( - req, - config, - templates, - dbs, - &[ErrorTemplate { - text: "Le mot de passe de l'annonce est incorrect.", - }], - None, - ) - .await; + dbs.ad.flush_async().await.unwrap(); + } else { + return serve_index( + req, + config, + templates, + dbs, + &[ErrorTemplate { + text: "Le mot de passe de l'annonce est incorrect.", + }], + None, + ) + .await; + } } } } @@ -364,6 +579,31 @@ async fn handle_admin( } } +async fn handle_admin_group( + req: tide::Request<()>, + config: Arc, + templates: Arc>, + dbs: Dbs, +) -> tide::Result { + if let Some(psw) = req.cookie("admin") { + if config.admin_passwords.contains(&String::from(psw.value())) { + serve_admin_group(req, config, templates, dbs, &[], None).await + } else { + serve_admin_login( + req, + config, + templates, + &[ErrorTemplate { + text: "Mot de passe administrateur invalide", + }], + ) + .await + } + } else { + serve_admin_login(req, config, templates, &[]).await + } +} + async fn handle_post_admin( mut req: tide::Request<()>, config: Arc, @@ -373,16 +613,58 @@ async fn handle_post_admin( if let Some(psw) = req.cookie("admin") { if config.admin_passwords.contains(&String::from(psw.value())) { match req.body_form::().await? { - AdminQuery::RmAdQuery(query) => { + AdminQuery::RmAd(query) => { if let Ok(ad_id) = hex::decode(query.ad) { if let Ok(ad_id) = AdId::try_from(ad_id.as_ref()) { - dbs.ads.remove(&ad_id).unwrap(); + dbs.ad.remove(&ad_id).unwrap(); - dbs.ads.flush_async().await.unwrap(); + dbs.ad.flush_async().await.unwrap(); } } Ok(tide::Redirect::new(&format!("{}admin", config.root_url)).into()) } + AdminQuery::NewGroup(query) => { + if let Some(Ok(parent_group_id)) = if query.parent.is_empty() { + Some(Ok(ROOT_GROUP_ID)) + } else { + dbs.group_by_name + .get(&query.parent) + .unwrap() + .map(|o| GroupId::try_from(o.as_ref())) + } { + if !dbs.group_by_name.contains_key(&query.name).unwrap() { + let group_id = rand::random::(); + dbs.group + .insert( + group_id, + bincode::serialize(&Group { + parent: parent_group_id, + name: query.name.clone(), + title: query.title, + }) + .unwrap(), + ) + .unwrap(); + dbs.group_by_name + .insert(query.name.clone(), &group_id) + .unwrap(); + dbs.group_by_group + .insert([parent_group_id, group_id].concat(), &[]) + .unwrap(); + return Ok(tide::Redirect::new(&format!( + "{}admin/g/{}", + config.root_url, query.name + )) + .into()); + } + return Ok(tide::Redirect::new(&format!( + "{}admin/g/{}", + config.root_url, query.parent + )) + .into()); + } + Ok(tide::Redirect::new(&format!("{}admin", config.root_url)).into()) + } _ => serve_admin(req, config, templates, dbs, &[]).await, } } else { @@ -396,7 +678,7 @@ async fn handle_post_admin( ) .await } - } else if let AdminQuery::LoginQuery(query) = req.body_form::().await? { + } else if let AdminQuery::Login(query) = req.body_form::().await? { if config.admin_passwords.contains(&query.psw) { serve_admin(req, config.clone(), templates, dbs, &[]) .await diff --git a/src/templates.rs b/src/templates.rs index 9f3c2f1..7446429 100644 --- a/src/templates.rs +++ b/src/templates.rs @@ -7,12 +7,17 @@ use std::path::Path; const TEMPLATES_DIR: &str = "templates"; static TEMPLATE_FILES: &[(&str, &str)] = &[ - ("index.html", include_str!("../templates/index.html")), ("admin.html", include_str!("../templates/admin.html")), ( + "admin_group.html", + include_str!("../templates/admin_group.html"), + ), + ( "admin_login.html", include_str!("../templates/admin_login.html"), ), + ("group.html", include_str!("../templates/group.html")), + ("index.html", include_str!("../templates/index.html")), ]; pub struct Templates<'reg> { @@ -59,6 +64,7 @@ pub struct IndexTemplate<'a> { #[serde(flatten)] pub common: CommonTemplate<'a>, pub ads: &'a Json, + pub groups: &'a Json, pub new_ad_form_refill: Option, } @@ -73,6 +79,27 @@ pub struct AdminTemplate<'a> { #[serde(flatten)] pub common: CommonTemplate<'a>, pub ads: &'a Json, + pub groups: &'a Json, +} + +// TODO add subgroups, parent groups, title +#[derive(Serialize)] +pub struct GroupTemplate<'a> { + #[serde(flatten)] + pub common: CommonTemplate<'a>, + pub ads: &'a Json, + pub groups: &'a Json, + pub new_ad_form_refill: Option, +} + +#[derive(Serialize)] +pub struct AdminGroupTemplate<'a> { + #[serde(flatten)] + pub common: CommonTemplate<'a>, + pub ads: &'a Json, + pub group: &'a Json, + pub groups: &'a Json, + pub new_group_form_refill: Option, } #[derive(Serialize)] diff --git a/src/utils.rs b/src/utils.rs index 2190235..5a21427 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -2,7 +2,16 @@ use serde::{Deserialize, Serialize}; use sha2::{Digest, Sha256}; use std::convert::{TryFrom, TryInto}; -pub type PasswordHash = [u8; 32]; +pub type GroupId = [u8; 16]; + +pub static ROOT_GROUP_ID: GroupId = [0; 16]; + +#[derive(Deserialize, Serialize)] +pub struct Group { + pub name: String, + pub parent: GroupId, + pub title: String, +} #[derive(Clone, Debug, Hash, Eq, PartialEq, Serialize)] pub struct AdId([u8; 16]); @@ -30,7 +39,7 @@ impl TryFrom<&[u8]> for AdId { #[derive(Clone, Debug, Deserialize, Serialize)] pub struct Ad { pub author: String, - pub password: PasswordHash, + pub password: String, pub price: String, pub pubkey: Option, pub quantity: String, diff --git a/templates/admin.html b/templates/admin.html index ebd7f1a..4026d21 100644 --- a/templates/admin.html +++ b/templates/admin.html @@ -27,6 +27,10 @@ {{/if}} + {{#each groups}} + {{this.title}}
+ {{/each}} + {{#if ads}} Cliquez sur une annonce pour afficher le détail.
@@ -62,6 +66,19 @@ {{else}}

Il n'y a pas encore d'annonce ici.

{{/if}} + + + + +
+ Nouveau groupe + +
+ +
+ +
+