diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 071c0f8..93b88a7 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -12,7 +12,7 @@ jobs: steps: - uses: actions/checkout@v2 - name: Install dependencies - run: sudo apt update && sudo apt install -y libdbus-1-dev libssh2-1-dev libssl-dev + run: sudo apt update && sudo apt install -y libdbus-1-dev - uses: actions-rs/toolchain@v1 with: toolchain: stable diff --git a/CHANGELOG.md b/CHANGELOG.md index caa04e3..430c459 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ # Changelog - [Changelog](#changelog) + - [0.10.0](#0100) - [0.9.0](#090) - [0.8.2](#082) - [0.8.1](#081) @@ -25,6 +26,40 @@ --- +## 0.10.0 + +Released on 15/10/2022 + +> ⭐ 500 stars update ⭐ +> Thank you for supporting termscp and make it reaching 500 stars on Github + +- **Changed keybindings for BACKTAB**: backtab will now change the explorer tab + - To active the LOG PANEL, use `P` +- **Yes/No dialogs** are now answerable by pressing `Y` or `N` on your keyboard ([Issue 121](https://github.com/veeso/termscp/issues/121)) +- **Use ssh2 config IdentityFile** as fallback for key based authentication +- **Bugfix** + - Fixed [Issue 122](https://github.com/veeso/termscp/issues/122) + - Fixed version comparison when going above 0.9 +- Dependencies: + - Bump `argh` to `0.1.9` + - Bump `chrono` to `0.4.22` + - Bump `keyring` to `1.2.0` + - Bump `notify-rust` to `4.5.10` + - Bump `open` to `3.0.3` + - Bump `rpassword` to `7.0.0` + - Changed `regex` to `lazy-regex 2.3.0` + - Bump `remotefs-ftp` to `0.1.2` + - Bump `remotefs-ssh` to `0.1.2` + - Bump `self_update` to `0.32` + - Bump `ssh2-config` to `0.1.3` + - Bump `tuirealm` to `1.8.0` + - Bump `tui-realm-stdlib` to `1.1.7` + - Bump `unicode-width` to `0.1.10` + - Added `version-compare 0.1.0` + - Bump `whoami` to `1.2.3` + - Bump `wildmatch` to `2.1.1` + - Removed libssl dependency + ## 0.9.0 Released on 18/06/2022 diff --git a/Cargo.lock b/Cargo.lock index 08a3c87..1e5c0f9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8,17 +8,6 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" -[[package]] -name = "aes" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "884391ef1066acaa41e766ba8f596341b96e93ce34f9a43e7d24bf0a0eaf0561" -dependencies = [ - "aes-soft", - "aesni", - "cipher 0.2.5", -] - [[package]] name = "aes" version = "0.7.5" @@ -26,31 +15,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8" dependencies = [ "cfg-if 1.0.0", - "cipher 0.3.0", + "cipher", "cpufeatures", "opaque-debug", ] -[[package]] -name = "aes-soft" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be14c7498ea50828a38d0e24a765ed2effe92a705885b57d029cd67d45744072" -dependencies = [ - "cipher 0.2.5", - "opaque-debug", -] - -[[package]] -name = "aesni" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea2e11f5e94c2f7d386164cc2aa1f97823fed6f259e486940a71c174dd01b0ce" -dependencies = [ - "cipher 0.2.5", - "opaque-debug", -] - [[package]] name = "ahash" version = "0.4.7" @@ -58,34 +27,45 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "739f4a8db6605981345c5654f3a85b056ce52f37a39d34da03f25bf2151ea16e" [[package]] -name = "aho-corasick" -version = "0.7.18" +name = "ahash" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" +checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" +dependencies = [ + "getrandom", + "once_cell", + "version_check", +] + +[[package]] +name = "aho-corasick" +version = "0.7.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4f55bd91a0978cbfd91c457a164bab8b4001c833b7f323132c0a4e1922dd44e" dependencies = [ "memchr", ] [[package]] -name = "ansi_term" -version = "0.12.1" +name = "android_system_properties" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" dependencies = [ - "winapi 0.3.9", + "libc", ] [[package]] name = "anyhow" -version = "1.0.57" +version = "1.0.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f9b8508dccb7687a1d6c4ce66b2b0ecef467c94667de27d8d7fe1f8d2a9cdc" +checksum = "98161a4e3e2184da77bb14f02184cdd111e83bbbcc9979dfee3c44b9a85f5602" [[package]] name = "argh" -version = "0.1.7" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbb41d85d92dfab96cb95ab023c265c5e4261bb956c0fb49ca06d90c570f1958" +checksum = "c375edecfd2074d5edcc31396860b6e54b6f928714d0e097b983053fac0cabe3" dependencies = [ "argh_derive", "argh_shared", @@ -93,12 +73,12 @@ dependencies = [ [[package]] name = "argh_derive" -version = "0.1.7" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be69f70ef5497dd6ab331a50bd95c6ac6b8f7f17a7967838332743fbd58dc3b5" +checksum = "aa013479b80109a1bf01a039412b0f0013d716f36921226d86c6709032fb7a03" dependencies = [ "argh_shared", - "heck", + "heck 0.4.0", "proc-macro2", "quote", "syn", @@ -106,16 +86,17 @@ dependencies = [ [[package]] name = "argh_shared" -version = "0.1.7" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6f8c380fa28aa1b36107cd97f0196474bb7241bb95a453c5c01a15ac74b2eac" +checksum = "149f75bbec1827618262e0855a68f0f9a7f2edc13faebf33c4f16d6725edb6a9" [[package]] name = "async-io" -version = "1.7.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5e18f61464ae81cde0a23e713ae8fd299580c54d697a35820cfd0625b8b0e07" +checksum = "83e21f3a490c72b3b0cf44962180e60045de2925d8dff97918f7ee43c8f637c7" dependencies = [ + "autocfg", "concurrent-queue", "futures-lite", "libc", @@ -131,9 +112,9 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.56" +version = "0.1.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96cf8829f67d2eab0b2dfa42c5d0ef737e0724e4a82b01b3e292456202b19716" +checksum = "76464446b8bc32758d7e88ee1a804d9914cd9b1cb264c029899680b0be29826f" dependencies = [ "proc-macro2", "quote", @@ -148,11 +129,12 @@ checksum = "e69e13a99a7e6e070bb114f7ff381e58c7ccc188630121fc4c2fe4bcf24cd072" dependencies = [ "http", "log", - "native-tls", - "openssl", + "rustls", "serde", "serde_json", "url", + "webpki", + "webpki-roots", "wildmatch", ] @@ -215,16 +197,6 @@ dependencies = [ "generic-array", ] -[[package]] -name = "block-modes" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57a0e8073e8baa88212fb5823574c02ebccb395136ba9a164ab89379ec6072f0" -dependencies = [ - "block-padding", - "cipher 0.2.5", -] - [[package]] name = "block-modes" version = "0.8.1" @@ -232,7 +204,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2cb03d1bed155d89dce0f845b7899b18a9a163e148fd004e1c28421a783e2d8e" dependencies = [ "block-padding", - "cipher 0.3.0", + "cipher", ] [[package]] @@ -243,9 +215,9 @@ checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" [[package]] name = "bumpalo" -version = "3.10.0" +version = "3.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37ccbd214614c6783386c1af30caf03192f17891059cecc394b4fb119e363de3" +checksum = "c1ad822118d20d2c234f427000d5acc36eabe1e29a348c89b63dd60b13f28e5d" [[package]] name = "byteorder" @@ -255,9 +227,9 @@ checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" [[package]] name = "bytes" -version = "1.1.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8" +checksum = "ec8a7b6a70fde80372154c65702f00a0f56f3e1c36abbc6c440484be248856db" [[package]] name = "bytesize" @@ -297,26 +269,19 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.19" +version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73" +checksum = "bfd4d1b31faaa3a89d7934dbded3111da0d2ef28e3ebccdb4f0179f5929d1ef1" dependencies = [ - "libc", + "iana-time-zone", + "js-sys", "num-integer", "num-traits", "time 0.1.44", + "wasm-bindgen", "winapi 0.3.9", ] -[[package]] -name = "cipher" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12f8e7987cbd042a63249497f41aed09f8e65add917ea6566effbc56578d6801" -dependencies = [ - "generic-array", -] - [[package]] name = "cipher" version = "0.3.0" @@ -327,24 +292,35 @@ dependencies = [ ] [[package]] -name = "concurrent-queue" -version = "1.2.2" +name = "codespan-reporting" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30ed07550be01594c6026cff2a1d7fe9c8f683caa798e12b68694ac9e88286a3" +checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" +dependencies = [ + "termcolor", + "unicode-width", +] + +[[package]] +name = "concurrent-queue" +version = "1.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af4780a44ab5696ea9e28294517f1fffb421a83a25af521333c838635509db9c" dependencies = [ "cache-padded", ] [[package]] name = "console" -version = "0.15.0" +version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a28b32d32ca44b70c3e4acd7db1babf555fa026e385fb95f18028f88848b3c31" +checksum = "c050367d967ced717c04b65d8c619d863ef9292ce0c5760028655a2fb298718c" dependencies = [ "encode_unicode", + "lazy_static", "libc", - "once_cell", "terminal_size", + "unicode-width", "winapi 0.3.9", ] @@ -375,9 +351,9 @@ checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" [[package]] name = "cpufeatures" -version = "0.2.2" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59a6001667ab124aebae2a495118e11d30984c3a653e99d86d58971708cf5e4b" +checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" dependencies = [ "libc", ] @@ -402,24 +378,23 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.8" +version = "0.8.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf124c720b7686e3c2663cf54062ab0f68a88af2fb6a030e87e30bf721fcb38" +checksum = "edbafec5fa1f196ca66527c1b12c2ec4745ca14b50f1ad8f9f6f720b55d11fac" dependencies = [ "cfg-if 1.0.0", - "lazy_static", ] [[package]] name = "crossterm" -version = "0.23.2" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2102ea4f781910f8a5b98dd061f4c2023f479ce7bb1236330099ceb5a93cf17" +checksum = "e64e6c0fbe2c17357405f7c758c1ef960fce08bdfb2c03d88d2a18d7e09c4b67" dependencies = [ "bitflags", "crossterm_winapi", "libc", - "mio 0.8.3", + "mio 0.8.4", "parking_lot 0.12.1", "signal-hook", "signal-hook-mio", @@ -435,16 +410,6 @@ dependencies = [ "winapi 0.3.9", ] -[[package]] -name = "crypto-mac" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bff07008ec701e8028e2ceb8f83f0e4274ee62bd2dbdc4fefff2e9a91824081a" -dependencies = [ - "generic-array", - "subtle", -] - [[package]] name = "crypto-mac" version = "0.11.1" @@ -457,19 +422,76 @@ dependencies = [ [[package]] name = "ctor" -version = "0.1.22" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f877be4f7c9f246b183111634f75baa039715e3f46ce860677d3b19a69fb229c" +checksum = "cdffe87e1d521a10f9696f833fe502293ea446d7f256c06128293a4119bdf4cb" dependencies = [ "quote", "syn", ] [[package]] -name = "dbus" -version = "0.9.5" +name = "cxx" +version = "1.0.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de0a745c25b32caa56b82a3950f5fec7893a960f4c10ca3b02060b0c38d8c2ce" +checksum = "19f39818dcfc97d45b03953c1292efc4e80954e1583c4aa770bac1383e2310a4" +dependencies = [ + "cc", + "cxxbridge-flags", + "cxxbridge-macro", + "link-cplusplus", +] + +[[package]] +name = "cxx-build" +version = "1.0.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e580d70777c116df50c390d1211993f62d40302881e54d4b79727acb83d0199" +dependencies = [ + "cc", + "codespan-reporting", + "once_cell", + "proc-macro2", + "quote", + "scratch", + "syn", +] + +[[package]] +name = "cxxbridge-flags" +version = "1.0.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56a46460b88d1cec95112c8c363f0e2c39afdb237f60583b0b36343bf627ea9c" + +[[package]] +name = "cxxbridge-macro" +version = "1.0.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "747b608fecf06b0d72d440f27acc99288207324b793be2c17991839f3d4995ea" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "dashmap" +version = "5.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "907076dfda823b0b36d2a1bb5f90c96660a5bbcd7729e10727f07858f22c4edc" +dependencies = [ + "cfg-if 1.0.0", + "hashbrown 0.12.3", + "lock_api", + "once_cell", + "parking_lot_core 0.9.3", +] + +[[package]] +name = "dbus" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f8bcdd56d2e5c4ed26a529c5a9029f5db8290d433497506f958eae3be148eb6" dependencies = [ "libc", "libdbus-sys", @@ -500,15 +522,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac41dd49fb554432020d52c875fc290e110113f864c6b1b525cd62c7e7747a5d" dependencies = [ "byteorder", - "cipher 0.3.0", + "cipher", "opaque-debug", ] [[package]] name = "diff" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e25ea47919b1560c4e3b7fe0aaab9becf5b84a10325ddf7db0f0ba5e1026499" +checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" [[package]] name = "digest" @@ -581,9 +603,9 @@ dependencies = [ [[package]] name = "either" -version = "1.6.1" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" +checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" [[package]] name = "encode_unicode" @@ -623,23 +645,23 @@ dependencies = [ [[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", ] [[package]] name = "filetime" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0408e2626025178a6a7f7ffc05a25bc47103229f19c113755de7bf63816290c" +checksum = "e94a7bbaa59354bc20dd75b67f23e2797b4490e9d6928203fb105c79e448c86c" dependencies = [ "cfg-if 1.0.0", "libc", "redox_syscall", - "winapi 0.3.9", + "windows-sys", ] [[package]] @@ -675,11 +697,10 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "form_urlencoded" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" +checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" dependencies = [ - "matches", "percent-encoding", ] @@ -720,9 +741,9 @@ checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" [[package]] name = "futures" -version = "0.3.21" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f73fe65f54d1e12b726f517d3e2135ca3125a437b6d998caf1962961f7172d9e" +checksum = "7f21eda599937fba36daeb58a22e8f5cee2d14c4a17b5b7739c7c8e5e3b8230c" dependencies = [ "futures-channel", "futures-core", @@ -735,9 +756,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.21" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3083ce4b914124575708913bca19bfe887522d6e2e6d0952943f5eac4a74010" +checksum = "30bdd20c28fadd505d0fd6712cdfcb0d4b5648baf45faef7f852afb2399bb050" dependencies = [ "futures-core", "futures-sink", @@ -745,15 +766,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.21" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3" +checksum = "4e5aa3de05362c3fb88de6531e6296e85cde7739cccad4b9dfeeb7f6ebce56bf" [[package]] name = "futures-executor" -version = "0.3.21" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9420b90cfa29e327d0429f19be13e7ddb68fa1cccb09d65e5706b8c7a749b8a6" +checksum = "9ff63c23854bee61b6e9cd331d523909f238fc7636290b96826e9cfa5faa00ab" dependencies = [ "futures-core", "futures-task", @@ -762,9 +783,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.21" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc4045962a5a5e935ee2fdedaa4e08284547402885ab326734432bed5d12966b" +checksum = "bbf4d2a7a308fd4578637c0b17c7e1c7ba127b8f6ba00b29f717e9655d85eb68" [[package]] name = "futures-lite" @@ -783,9 +804,9 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.21" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33c1e13800337f4d4d7a316bf45a567dbcb6ffe087f16424852d97e97a91f512" +checksum = "42cd15d1c7456c04dbdf7e88bcd69760d74f3a798d6444e16974b505b0e62f17" dependencies = [ "proc-macro2", "quote", @@ -794,21 +815,21 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.21" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21163e139fa306126e6eedaf49ecdb4588f939600f0b1e770f4205ee4b7fa868" +checksum = "21b20ba5a92e727ba30e72834706623d94ac93a725410b6a6b6fbc1b07f7ba56" [[package]] name = "futures-task" -version = "0.3.21" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c66a976bf5909d801bbef33416c41372779507e7a6b3a5e25e4749c58f776a" +checksum = "a6508c467c73851293f390476d4491cf4d227dbabcd4170f3bb6044959b294f1" [[package]] name = "futures-util" -version = "0.3.21" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8b7abd5d659d9b90c8cba917f6ec750a74e2dc23902ef9cd4cc8c8b22e6036a" +checksum = "44fb6cb1be61cc1d2e43b262516aafcf63b241cffdb1d3fa115f91d9c7b09c90" dependencies = [ "futures-channel", "futures-core", @@ -824,9 +845,9 @@ dependencies = [ [[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", @@ -834,20 +855,20 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9be70c98951c83b8d2f8f60d7065fa6d5146873094452a1008da8c2f1e4205ad" +checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6" dependencies = [ "cfg-if 1.0.0", "libc", - "wasi 0.10.0+wasi-snapshot-preview1", + "wasi 0.11.0+wasi-snapshot-preview1", ] [[package]] name = "h2" -version = "0.3.13" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37a82c6d637fc9515a4694bbf1cb2457b79d81ce52b3108bdeea58b07dd34a57" +checksum = "5ca32592cf21ac7ccab1825cd87f6c9b3d9022c44d086172ed0966bec8af30be" dependencies = [ "bytes", "fnv", @@ -868,14 +889,17 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04" dependencies = [ - "ahash", + "ahash 0.4.7", ] [[package]] name = "hashbrown" -version = "0.11.2" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash 0.7.6", +] [[package]] name = "heck" @@ -886,6 +910,12 @@ dependencies = [ "unicode-segmentation", ] +[[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.19" @@ -903,22 +933,12 @@ checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "hkdf" -version = "0.10.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51ab2f639c231793c5f6114bdb9bbe50a7dbbfcd7c7c6bd8475dec2d991e964f" +checksum = "01706d578d5c281058480e673ae4086a9f4710d8df1ad80a5b03e39ece5f886b" dependencies = [ "digest", - "hmac 0.10.1", -] - -[[package]] -name = "hmac" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1441c6b1e930e2817404b5046f1f989899143a12bf92de603b69f4e0aee1e15" -dependencies = [ - "crypto-mac 0.10.1", - "digest", + "hmac", ] [[package]] @@ -927,7 +947,7 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b" dependencies = [ - "crypto-mac 0.11.1", + "crypto-mac", "digest", ] @@ -966,9 +986,9 @@ dependencies = [ [[package]] name = "httparse" -version = "1.7.1" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "496ce29bb5a52785b44e0f7ca2847ae0bb839c9bd28f69acac9b99d461c0c04c" +checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" [[package]] name = "httpdate" @@ -978,9 +998,9 @@ checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" [[package]] name = "hyper" -version = "0.14.19" +version = "0.14.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42dc3c131584288d375f2d07f822b0cb012d8c6fb899a5b9fdb3cb7eb9b6004f" +checksum = "02c929dc5c39e335a03c405292728118860721b10190d98c2a0f0efd5baafbac" dependencies = [ "bytes", "futures-channel", @@ -1001,49 +1021,71 @@ dependencies = [ ] [[package]] -name = "hyper-tls" -version = "0.5.0" +name = "hyper-rustls" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +checksum = "d87c48c02e0dc5e3b849a2041db3029fd066650f8f717c07bf8ed78ccb895cac" dependencies = [ - "bytes", + "http", "hyper", - "native-tls", + "rustls", "tokio", - "tokio-native-tls", + "tokio-rustls", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.51" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5a6ef98976b22b3b7f2f3a806f858cb862044cfa66805aa3ad84cb3d3b785ed" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "winapi 0.3.9", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fde6edd6cef363e9359ed3c98ba64590ba9eecba2293eb5a723ab32aee8926aa" +dependencies = [ + "cxx", + "cxx-build", ] [[package]] name = "idna" -version = "0.2.3" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" +checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" dependencies = [ - "matches", "unicode-bidi", "unicode-normalization", ] [[package]] name = "indexmap" -version = "1.8.2" +version = "1.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6012d540c5baa3589337a98ce73408de9b5a25ec9fc2c6fd6be8f0d39e0ca5a" +checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e" dependencies = [ "autocfg", - "hashbrown 0.11.2", + "hashbrown 0.12.3", ] [[package]] name = "indicatif" -version = "0.16.2" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d207dc617c7a380ab07ff572a6e52fa202a2a8f355860ac9c38e23f8196be1b" +checksum = "bfddc9561e8baf264e0e45e197fd7696320026eb10a8180340debc27b18f535b" dependencies = [ "console", - "lazy_static", "number_prefix", - "regex", + "unicode-width", ] [[package]] @@ -1092,15 +1134,15 @@ checksum = "879d54834c8c76457ef4293a689b2a8c59b076067ad77b15efafbb05f92a592b" [[package]] name = "itoa" -version = "1.0.2" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d" +checksum = "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc" [[package]] name = "js-sys" -version = "0.3.57" +version = "0.3.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "671a26f820db17c2a2750743f1dd03bafd15b98c9f30c7c2628c024c05d73397" +checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47" dependencies = [ "wasm-bindgen", ] @@ -1117,9 +1159,9 @@ dependencies = [ [[package]] name = "keyring" -version = "1.1.2" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "894a58932447ecc241a3545135bdfd26ac0e611295b391904ce0b085310ab38c" +checksum = "38fb8399ddcabfccb274577a8d90f0653e0b5b5977797c1c8834ad09839a10e5" dependencies = [ "byteorder", "secret-service", @@ -1127,6 +1169,29 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "lazy-regex" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6b12f2eb6ed7d39405c5eb25a034b4c106a9ad87a6d9be3298de6c5f32fd57d" +dependencies = [ + "lazy-regex-proc_macros", + "once_cell", + "regex", +] + +[[package]] +name = "lazy-regex-proc_macros" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2496e5264069bc726ccf37eb76b9cd89406ae110d836c3f76729f99c8a23293" +dependencies = [ + "proc-macro2", + "quote", + "regex", + "syn", +] + [[package]] name = "lazy_static" version = "1.4.0" @@ -1141,9 +1206,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.126" +version = "0.2.135" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836" +checksum = "68783febc7782c6c5cb401fbda4de5a9898be1762314da0bb2c10ced61f18b0c" [[package]] name = "libdbus-sys" @@ -1181,10 +1246,19 @@ dependencies = [ ] [[package]] -name = "lock_api" -version = "0.4.7" +name = "link-cplusplus" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "327fa5b6a6940e4699ec49a9beae1ea4845c6bab9314e4f84ac68742139d8c53" +checksum = "9272ab7b96c9046fbc5bc56c06c117cb639fe2d509df0c421cad82d2915cf369" +dependencies = [ + "cc", +] + +[[package]] +name = "lock_api" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" dependencies = [ "autocfg", "scopeguard", @@ -1201,15 +1275,15 @@ dependencies = [ [[package]] name = "mac-notification-sys" -version = "0.5.0" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "297c13fc8ff9fa8b2d0e53850f80e0aa962628e865d447031ce58cdb062e5b29" +checksum = "3e72d50edb17756489e79d52eb146927bec8eba9dd48faadf9ef08bca3791ad5" dependencies = [ "cc", "dirs-next", "objc-foundation", "objc_id", - "time 0.3.9", + "time 0.3.15", ] [[package]] @@ -1218,9 +1292,9 @@ version = "3.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c913782c21b53ad246863641fffbaf73a9eb32ff0d939b10d361b7294e2ea9c" dependencies = [ - "aes 0.7.5", + "aes", "base64", - "block-modes 0.8.1", + "block-modes", "crc-any", "des", "digest", @@ -1244,12 +1318,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" -[[package]] -name = "matches" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" - [[package]] name = "maybe-async" version = "0.2.6" @@ -1284,6 +1352,15 @@ version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" +[[package]] +name = "memoffset" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" +dependencies = [ + "autocfg", +] + [[package]] name = "mime" version = "0.3.16" @@ -1292,9 +1369,9 @@ checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" [[package]] name = "miniz_oxide" -version = "0.5.3" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f5c75688da582b8ffc1f1799e9db273f32133c49e048f614d22ec3256773ccc" +checksum = "96590ba8f175222643a85693f33d26e9c8a015f599c216509b1a6894af675d34" dependencies = [ "adler", ] @@ -1320,9 +1397,9 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "713d550d9b44d89174e066b7a6217ae06234c10cb47819a88290d2b353c31799" +checksum = "57ee1c23c7c63b0c9250c339ffdc69255f110b298b901b9f6c82547b7b87caaf" dependencies = [ "libc", "log", @@ -1395,15 +1472,15 @@ dependencies = [ [[package]] name = "nix" -version = "0.17.0" +version = "0.22.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50e4785f2c3b7589a0d0c1dd60285e1188adac4006e8abd6dd578e1567027363" +checksum = "e4916f159ed8e5de0082076562152a76b7a1f64a01fd9d1e0fea002c37624faf" dependencies = [ "bitflags", "cc", - "cfg-if 0.1.10", + "cfg-if 1.0.0", "libc", - "void", + "memoffset", ] [[package]] @@ -1426,20 +1503,20 @@ dependencies = [ [[package]] name = "notify-rust" -version = "4.5.8" +version = "4.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a995a3d2834cefa389218e7a35156e8ce544bc95f836900da01ee0b26a07e9d4" +checksum = "368e89ea58df747ce88be669ae44e79783c1d30bfd540ad0fc520b3f41f0b3b0" dependencies = [ "dbus", "mac-notification-sys", - "winrt-notification", + "tauri-winrt-notification", ] [[package]] name = "num" -version = "0.3.1" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b7a8e9be5e039e2ff869df49155f1c06bd01ade2117ec783e56ab0932b67a8f" +checksum = "43db66d1170d347f9a065114077f7dccb00c1b9478c89384490a3425279a4606" dependencies = [ "num-bigint", "num-complex", @@ -1451,9 +1528,9 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.3.3" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f6f7833f2cbf2360a6cfd58cd41a53aa7a90bd4c202f5b1c7dd2ed73c57b2c3" +checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" dependencies = [ "autocfg", "num-integer", @@ -1462,9 +1539,9 @@ dependencies = [ [[package]] name = "num-complex" -version = "0.3.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "747d632c0c558b87dbabbe6a82f3b4ae03720d0646ac5b7b4dae89394be5f2c5" +checksum = "7ae39348c8bc5fbd7f40c727a9925f03517afd2ab27d46702108b6a7e5414c19" dependencies = [ "num-traits", ] @@ -1492,9 +1569,9 @@ dependencies = [ [[package]] name = "num-rational" -version = "0.3.2" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12ac428b1cb17fce6f731001d307d351ec70a6d202fc2e60f7d4c5e42d8f4f07" +checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" dependencies = [ "autocfg", "num-bigint", @@ -1567,9 +1644,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.12.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7709cef83f0c1f58f666e746a08b21e0085f7440fa6a29cc194d68aac97a4225" +checksum = "e82dad04139b71a90c080c8463fe0dc7902db5192d939bd0950f074d014339e1" [[package]] name = "opaque-debug" @@ -1579,9 +1656,9 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] name = "open" -version = "2.1.3" +version = "3.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2423ffbf445b82e58c3b1543655968923dd06f85432f10be2bb4f1b7122f98c" +checksum = "b4a3100141f1733ea40b53381b0ae3117330735ef22309a190ac57b9576ea716" dependencies = [ "pathdiff", "windows-sys", @@ -1589,9 +1666,9 @@ dependencies = [ [[package]] name = "openssl" -version = "0.10.40" +version = "0.10.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb81a6430ac911acb25fe5ac8f1d2af1b4ea8a4fdfda0f1ee4292af2e2d8eb0e" +checksum = "12fc0523e3bd51a692c8850d075d74dc062ccf251c0110668cbd921917118a13" dependencies = [ "bitflags", "cfg-if 1.0.0", @@ -1630,9 +1707,9 @@ dependencies = [ [[package]] name = "openssl-sys" -version = "0.9.74" +version = "0.9.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "835363342df5fba8354c5b453325b110ffd54044e588c539cf2f20a8014e4cb1" +checksum = "5230151e44c0f05157effb743e8d517472843121cf9243e8b81393edb5acd9ce" dependencies = [ "autocfg", "cc", @@ -1717,9 +1794,15 @@ dependencies = [ [[package]] name = "path-slash" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cacbb3c4ff353b534a67fb8d7524d00229da4cb1dc8c79f4db96e375ab5b619" +checksum = "498a099351efa4becc6a19c72aa9270598e8fd274ca47052e37455241c88b696" + +[[package]] +name = "path-slash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e91099d4268b0e11973f036e885d652fb0b21fedcf69738c627f94db6a44f42" [[package]] name = "pathdiff" @@ -1729,9 +1812,9 @@ checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" [[package]] name = "percent-encoding" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" +checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" [[package]] name = "pin-project-lite" @@ -1753,10 +1836,11 @@ checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae" [[package]] name = "polling" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "685404d509889fade3e86fe3a5803bca2ec09b0c0778d5ada6ec8bf7a8de5259" +checksum = "899b00b9c8ab553c743b3e11e87c5c7d423b2a2de229ba95b24a756344748011" dependencies = [ + "autocfg", "cfg-if 1.0.0", "libc", "log", @@ -1772,14 +1856,14 @@ checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" [[package]] name = "pretty_assertions" -version = "1.2.1" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c89f989ac94207d048d92db058e4f6ec7342b0971fc58d1271ca148b799b3563" +checksum = "a25e9bcb20aa780fd0bb16b72403a9064d6b3f22f026946029acb941a50af755" dependencies = [ - "ansi_term", "ctor", "diff", "output_vt100", + "yansi", ] [[package]] @@ -1793,10 +1877,11 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "1.1.3" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e17d47ce914bf4de440332250b0edd23ce48c005f59fab39d3335866b114f11a" +checksum = "eda0fc3b0fb7c975631757e14d9049da17374063edb6ebbcbc54d880d4fe94e9" dependencies = [ + "once_cell", "thiserror", "toml", ] @@ -1827,9 +1912,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.39" +version = "1.0.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c54b25569025b7fc9651de43004ae593a75ad88543b17178aa5e1b9c4f15f56f" +checksum = "94e2ef8dbfc347b10c094890f778ee2e36ca9bb4262e86dc99cd217e35f3470b" dependencies = [ "unicode-ident", ] @@ -1844,10 +1929,19 @@ dependencies = [ ] [[package]] -name = "quote" -version = "1.0.18" +name = "quick-xml" +version = "0.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1feb54ed693b93a84e14094943b84b7c4eae204c512b7ccb95ab0c66d278ad1" +checksum = "11bafc859c6815fbaffbbbf4229ecb767ac913fecb27f9ad4343662e9ef099ea" +dependencies = [ + "memchr", +] + +[[package]] +name = "quote" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" dependencies = [ "proc-macro2", ] @@ -1875,18 +1969,18 @@ dependencies = [ [[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", ] [[package]] name = "redox_syscall" -version = "0.2.13" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" dependencies = [ "bitflags", ] @@ -1904,9 +1998,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.5.6" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d83f127d94bdbcda4c8cc2e50f6f84f4b611f69c902699ca385a39c3a75f9ff1" +checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b" dependencies = [ "aho-corasick", "memchr", @@ -1915,9 +2009,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.6.26" +version = "0.6.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49b3de9ec5dc0a3417da371aab17d729997c15010e7fd24ff707773a33bddb64" +checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244" [[package]] name = "remotefs" @@ -1933,13 +2027,13 @@ dependencies = [ [[package]] name = "remotefs-aws-s3" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9939849e0b3895b07f258458d0fa5cd4632c78ffc517e66e1f758ddf23990542" +checksum = "896bc1b45d85d017e632b79faf8f78eccf5ca6f372baf541977b9274a1446b05" dependencies = [ "chrono", "log", - "path-slash", + "path-slash 0.1.5", "remotefs", "rust-s3", "thiserror", @@ -1948,12 +2042,12 @@ dependencies = [ [[package]] name = "remotefs-ftp" -version = "0.1.0" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "359fd989a6ad50fa6defae771e453695412cbfdb5476f49e42d1bb1d51b5c096" +checksum = "5af56f530781b5749b45acfc1e3ed196d4db05c17e1a7a2eae5a2fccd862079a" dependencies = [ "log", - "path-slash", + "path-slash 0.1.5", "remotefs", "suppaftp", "users", @@ -1961,14 +2055,14 @@ dependencies = [ [[package]] name = "remotefs-ssh" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea2ac5a7f475c1b63ffd2aaab57ca4e37e6a6ed23461046d4fb1554835e6088a" +checksum = "190106b53b839cf094172d2f1bc14e8d2846a69de06b239f11c2fc353080e9e0" dependencies = [ "chrono", "lazy_static", "log", - "path-slash", + "path-slash 0.2.1", "regex", "remotefs", "ssh2", @@ -1987,9 +2081,9 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.11.10" +version = "0.11.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46a1f7aa4f35e5e8b4160449f51afc758f0ce6454315a9fa7d0d113e958c41eb" +checksum = "431949c384f4e2ae07605ccaa56d1d9d2ecdb5cadd4f9577ccfab29f2e5149fc" dependencies = [ "base64", "bytes", @@ -2000,36 +2094,52 @@ dependencies = [ "http", "http-body", "hyper", - "hyper-tls", + "hyper-rustls", "ipnet", "js-sys", - "lazy_static", "log", "mime", - "native-tls", + "once_cell", "percent-encoding", "pin-project-lite", + "rustls", + "rustls-pemfile", "serde", "serde_json", "serde_urlencoded", "tokio", - "tokio-native-tls", + "tokio-rustls", + "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", + "webpki-roots", "winreg", ] [[package]] -name = "rpassword" -version = "6.0.1" +name = "ring" +version = "0.16.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bf099a1888612545b683d2661a1940089f6c2e5a8e38979b2159da876bfd956" +checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" +dependencies = [ + "cc", + "libc", + "once_cell", + "spin", + "untrusted", + "web-sys", + "winapi 0.3.9", +] + +[[package]] +name = "rpassword" +version = "7.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26b763cb66df1c928432cc35053f8bd4cec3335d8559fc16010017d16b3c1680" dependencies = [ "libc", - "serde", - "serde_json", "winapi 0.3.9", ] @@ -2058,7 +2168,7 @@ dependencies = [ "cfg-if 1.0.0", "chrono", "hex", - "hmac 0.11.0", + "hmac", "http", "log", "maybe-async", @@ -2073,16 +2183,31 @@ dependencies = [ ] [[package]] -name = "rustversion" -version = "1.0.6" +name = "rustls" +version = "0.20.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2cc38e8fa666e2de3c4aba7edeb5ffc5246c1c2ed0e3d17e560aeeba736b23f" +checksum = "5aab8ee6c7097ed6057f43c187a62418d0c05a4bd5f18b3571db50ee0f9ce033" +dependencies = [ + "log", + "ring", + "sct", + "webpki", +] + +[[package]] +name = "rustls-pemfile" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0864aeff53f8c05aa08d86e5ef839d3dfcf07aeba2db32f12db0ef716e87bd55" +dependencies = [ + "base64", +] [[package]] name = "ryu" -version = "1.0.10" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695" +checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09" [[package]] name = "same-file" @@ -2116,13 +2241,29 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" [[package]] -name = "secret-service" -version = "2.0.1" +name = "scratch" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2400fb1bf2a87b303ada204946294f932ade4929477e9e2bf66d7b49a66656ec" +checksum = "9c8132065adcfd6e02db789d9285a0deb2f3fcb04002865ab67d5fb103533898" + +[[package]] +name = "sct" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" dependencies = [ - "aes 0.6.0", - "block-modes 0.7.0", + "ring", + "untrusted", +] + +[[package]] +name = "secret-service" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1da5c423b8783185fd3fecd1c8796c267d2c089d894ce5a93c280a5d3f780a2" +dependencies = [ + "aes", + "block-modes", "hkdf", "lazy_static", "num", @@ -2137,9 +2278,9 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.6.1" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dc14f172faf8a0194a3aded622712b0de276821addc574fa54fc0a1167e10dc" +checksum = "2bc1bb97804af6631813c55739f771071e0f2ed33ee20b68c86ec505d906356c" dependencies = [ "bitflags", "core-foundation", @@ -2160,16 +2301,16 @@ dependencies = [ [[package]] name = "self_update" -version = "0.30.0" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88c865d17fb512577be02a09fd2fd96c31c7e46fe649205d84feefd8b2a332da" +checksum = "7e08f3ce73aed26096783c26570ba416ff8f4524c89a14bcdf068967dc80daef" dependencies = [ "either", "flate2", "hyper", "indicatif", "log", - "quick-xml", + "quick-xml 0.22.0", "regex", "reqwest", "semver", @@ -2181,15 +2322,15 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.9" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cb243bdfdb5936c8dc3c45762a19d12ab4550cdc753bc247637d4ec35a040fd" +checksum = "e25dfac463d778e353db5be2449d1cce89bd6fd23c9f1ea21310ce6e5a1b29c4" [[package]] name = "serde" -version = "1.0.137" +version = "1.0.145" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61ea8d54c77f8315140a05f4c7237403bf38b72704d031543aa1d16abbf517d1" +checksum = "728eb6351430bccb993660dfffc5a72f91ccc1295abaa8ce19b27ebe4f75568b" dependencies = [ "serde_derive", ] @@ -2208,9 +2349,9 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.137" +version = "1.0.145" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f26faba0c3959972377d3b2d306ee9f71faee9714294e41bb777f83f88578be" +checksum = "81fa1584d3d1bcacd84c277a0dfe21f5b0f6accf4a23d04d4c6d61f1af522b4c" dependencies = [ "proc-macro2", "quote", @@ -2219,9 +2360,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.81" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b7ce2b32a1aed03c558dc61a5cd328f15aff2dbc17daad8fb8af04d2100e15c" +checksum = "41feea4228a6f1cd09ec7a3593a682276702cd67b5273544757dae23c096f074" dependencies = [ "itoa", "ryu", @@ -2230,9 +2371,9 @@ dependencies = [ [[package]] name = "serde_repr" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2ad84e47328a31223de7fed7a4f5087f2d6ddfe586cf3ca25b7a165bc0a5aed" +checksum = "1fe39d9fbb0ebf5eb2c7cb7e2a47e4f462fad1379f1166b8ae49ad9eae89a7ca" dependencies = [ "proc-macro2", "quote", @@ -2253,10 +2394,12 @@ dependencies = [ [[package]] name = "serial_test" -version = "0.7.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d19dbfb999a147cedbfe82f042eb9555f5b0fa4ef95ee4570b74349103d9c9f4" +checksum = "92761393ee4dc3ff8f4af487bd58f4307c9329bbedea02cac0089ad9c411e153" dependencies = [ + "dashmap", + "futures", "lazy_static", "log", "parking_lot 0.12.1", @@ -2265,14 +2408,13 @@ dependencies = [ [[package]] name = "serial_test_derive" -version = "0.7.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb9e2050b2be1d681f8f1c1a528bcfe4e00afa2d8995f713974f5333288659f2" +checksum = "4b6f5d1c3087fb119617cff2966fe3808a80e5eb59a8c1601d5994d66f4346a5" dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "rustversion", "syn", ] @@ -2306,7 +2448,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af" dependencies = [ "libc", - "mio 0.8.3", + "mio 0.8.4", "signal-hook", ] @@ -2327,20 +2469,23 @@ checksum = "48dfff04aade74dd495b007c831cd6f4e0cee19c344dd9dc0884c0289b70a786" dependencies = [ "log", "termcolor", - "time 0.3.9", + "time 0.3.15", ] [[package]] name = "slab" -version = "0.4.6" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb703cfe953bccee95685111adeedb76fabe4e97549a58d16f03ea7b9367bb32" +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 = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83" +checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" [[package]] name = "smawk" @@ -2350,14 +2495,20 @@ checksum = "f67ad224767faa3c7d8b6d91985b78e70a1324408abcb1cfcc2be4c06bc06043" [[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 0.3.9", ] +[[package]] +name = "spin" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" + [[package]] name = "ssh2" version = "0.9.3" @@ -2402,7 +2553,7 @@ version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "339f799d8b549e3744c7ac7feb216383e4005d94bdb22561b3ab8f3b808ae9fb" dependencies = [ - "heck", + "heck 0.3.3", "proc-macro2", "quote", "syn", @@ -2416,23 +2567,22 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" [[package]] name = "suppaftp" -version = "4.2.0" +version = "4.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c42610de5ed0db28274b24c010aa530ebc391e5a4e9bd44a08e9daa8a245cc5" +checksum = "e847b04a392385badf1f7a766dcb4f9c7ce5f180360e5820d0b78cda026a9802" dependencies = [ "chrono", - "lazy_static", + "lazy-regex", "log", "native-tls", - "regex", "thiserror", ] [[package]] name = "syn" -version = "1.0.96" +version = "1.0.102" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0748dd251e24453cb8717f0354206b91557e4ec8703673a4b30208f2abaf1ebf" +checksum = "3fcd952facd492f9be3ef0d0b7032a6e442ee9b361d4acc2b1d0c4aaa5f613a1" dependencies = [ "proc-macro2", "quote", @@ -2450,6 +2600,17 @@ dependencies = [ "xattr", ] +[[package]] +name = "tauri-winrt-notification" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c58de036c4d2e20717024de2a3c4bf56c301f07b21bc8ef9b57189fce06f1f3b" +dependencies = [ + "quick-xml 0.23.1", + "strum", + "windows", +] + [[package]] name = "tempfile" version = "3.3.0" @@ -2485,7 +2646,7 @@ dependencies = [ [[package]] name = "termscp" -version = "0.9.0" +version = "0.10.0" dependencies = [ "argh", "bitflags", @@ -2496,6 +2657,7 @@ dependencies = [ "edit", "hostname", "keyring", + "lazy-regex", "lazy_static", "log", "magic-crypt", @@ -2504,7 +2666,6 @@ dependencies = [ "open", "pretty_assertions", "rand", - "regex", "remotefs", "remotefs-aws-s3", "remotefs-ftp", @@ -2514,6 +2675,7 @@ dependencies = [ "serde", "serial_test", "simplelog", + "ssh2-config", "tempfile", "thiserror", "toml", @@ -2521,15 +2683,16 @@ dependencies = [ "tuirealm", "unicode-width", "users", + "version-compare", "whoami", "wildmatch", ] [[package]] name = "textwrap" -version = "0.14.2" +version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0066c8d12af8b5acd21e00547c3797fde4e8677254a7ee429176ccebbe93dd80" +checksum = "949517c0cf1bf4ee812e2e07e08ab448e3ae0d23472aee8a06c985f0c8815b16" dependencies = [ "smawk", "unicode-linebreak", @@ -2538,18 +2701,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.31" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd829fe32373d27f76265620b5309d0340cb8550f523c1dda251d6298069069a" +checksum = "10deb33631e3c9018b9baf9dcbbc4f737320d2b576bac10f6aefa048fa407e3e" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.31" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a" +checksum = "982d17546b47146b28f7c22e3d08465f6b8903d0ea13c1660d9d84a6e7adcdbb" dependencies = [ "proc-macro2", "quote", @@ -2580,9 +2743,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.9" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2702e08a7a860f005826c6815dcac101b19b5eb330c27fe4a5928fec1d20ddd" +checksum = "d634a985c4d4238ec39cacaed2e7ae552fbd3c476b552c1deac3021b7d7eaf0c" dependencies = [ "itoa", "libc", @@ -2613,36 +2776,37 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] name = "tokio" -version = "1.19.2" +version = "1.21.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c51a52ed6686dd62c320f9b89299e9dfb46f730c7a48e635c19f21d116cb1439" +checksum = "a9e03c497dc955702ba729190dc4aac6f2a0ce97f913e5b1b5912fc5039d9099" dependencies = [ + "autocfg", "bytes", "libc", "memchr", - "mio 0.8.3", + "mio 0.8.4", "num_cpus", - "once_cell", "pin-project-lite", "socket2", "winapi 0.3.9", ] [[package]] -name = "tokio-native-tls" -version = "0.3.0" +name = "tokio-rustls" +version = "0.23.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b" +checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" dependencies = [ - "native-tls", + "rustls", "tokio", + "webpki", ] [[package]] name = "tokio-stream" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df54d54117d6fdc4e4fea40fe1e4e566b3505700e148a6827e59b34b0d2600d9" +checksum = "f6edf2d6bc038a43d31353570e27270603f4648d18f5ed10c0e179abe43255af" dependencies = [ "futures-core", "pin-project-lite", @@ -2651,9 +2815,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc463cd8deddc3770d20f9852143d50bf6094e640b485cb2e189a2099085ff45" +checksum = "0bb2e075f03b3d66d8d8785356224ba688d2906a371015e225beeb65ca92c740" dependencies = [ "bytes", "futures-core", @@ -2674,15 +2838,15 @@ dependencies = [ [[package]] name = "tower-service" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" [[package]] name = "tracing" -version = "0.1.35" +version = "0.1.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a400e31aa60b9d44a52a8ee0343b5b18566b03a8321e0d321f695cf56e940160" +checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" dependencies = [ "cfg-if 1.0.0", "pin-project-lite", @@ -2691,9 +2855,9 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.27" +version = "0.1.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7709595b8878a4965ce5e87ebf880a7d39c9afc6837721b21a5a816a8117d921" +checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" dependencies = [ "once_cell", ] @@ -2706,9 +2870,9 @@ checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" [[package]] name = "tui" -version = "0.18.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96fe69244ec2af261bced1d9046a6fee6c8c2a6b0228e59e5ba39bc8ba4ed729" +checksum = "ccdd26cbd674007e649a272da4475fb666d3aa0ad0531da7136db6fab0e5bad1" dependencies = [ "bitflags", "cassowary", @@ -2719,9 +2883,9 @@ dependencies = [ [[package]] name = "tui-realm-stdlib" -version = "1.1.6" +version = "1.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0566e37c05db854178698583e6bad03fdbcfdef8b389294c6934efc18c32f620" +checksum = "e08728483414e0bcb385f6fa11df99b4b273813d11ee38aa30db12e6db30bc66" dependencies = [ "textwrap", "tuirealm", @@ -2730,14 +2894,13 @@ dependencies = [ [[package]] name = "tuirealm" -version = "1.6.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef13e401c3c7d1f1b51d6193409d231c316057ad088431467a4e6882b4e25447" +checksum = "265411b5606f400459af94fbc5aae6a7bc0e98094d08cb5868390c932be88e26" dependencies = [ "bitflags", "crossterm", - "lazy_static", - "regex", + "lazy-regex", "thiserror", "tui", "tuirealm_derive", @@ -2768,49 +2931,55 @@ checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" [[package]] name = "unicode-ident" -version = "1.0.0" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d22af068fba1eb5edcb4aea19d382b2a3deb4c8f9d475c589b6ada9e0fd493ee" +checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3" [[package]] name = "unicode-linebreak" -version = "0.1.2" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a52dcaab0c48d931f7cc8ef826fa51690a08e1ea55117ef26f89864f532383f" +checksum = "c5faade31a542b8b35855fff6e8def199853b2da8da256da52f52f1316ee3137" dependencies = [ + "hashbrown 0.12.3", "regex", ] [[package]] name = "unicode-normalization" -version = "0.1.19" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" dependencies = [ "tinyvec", ] [[package]] name = "unicode-segmentation" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99" +checksum = "0fdbf052a0783de01e944a6ce7a8cb939e295b1e7be835a1112c3b9a7f047a5a" [[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 = "untrusted" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" [[package]] name = "url" -version = "2.2.2" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c" +checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" dependencies = [ "form_urlencoded", "idna", - "matches", "percent-encoding", ] @@ -2830,18 +2999,18 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" +[[package]] +name = "version-compare" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe88247b92c1df6b6de80ddc290f3976dbdf2f5f5d3fd049a9fb598c6dd5ca73" + [[package]] name = "version_check" version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" -[[package]] -name = "void" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" - [[package]] name = "waker-fn" version = "1.1.0" @@ -2883,9 +3052,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.80" +version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27370197c907c55e3f1a9fbe26f44e937fe6451368324e009cba39e139dc08ad" +checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268" dependencies = [ "cfg-if 1.0.0", "wasm-bindgen-macro", @@ -2893,13 +3062,13 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.80" +version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53e04185bfa3a779273da532f5025e33398409573f348985af9a1cbf3774d3f4" +checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142" dependencies = [ "bumpalo", - "lazy_static", "log", + "once_cell", "proc-macro2", "quote", "syn", @@ -2908,9 +3077,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.30" +version = "0.4.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f741de44b75e14c35df886aff5f1eb73aa114fa5d4d00dcd37b5e01259bf3b2" +checksum = "23639446165ca5a5de86ae1d8896b737ae80319560fbaa4c2887b7da6e7ebd7d" dependencies = [ "cfg-if 1.0.0", "js-sys", @@ -2920,9 +3089,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.80" +version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17cae7ff784d7e83a2fe7611cfe766ecf034111b49deb850a3dc7699c08251f5" +checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2930,9 +3099,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.80" +version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99ec0dc7a4756fffc231aab1b9f2f578d23cd391390ab27f952ae0c9b3ece20b" +checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c" dependencies = [ "proc-macro2", "quote", @@ -2943,20 +3112,39 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.80" +version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d554b7f530dee5964d9a9468d95c1f8b8acae4f282807e7d27d4b03099a46744" +checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" [[package]] name = "web-sys" -version = "0.3.57" +version = "0.3.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b17e741662c70c8bd24ac5c5b18de314a2c26c32bf8346ee1e6f53de919c283" +checksum = "bcda906d8be16e728fd5adc5b729afad4e444e106ab28cd1c7256e54fa61510f" dependencies = [ "js-sys", "wasm-bindgen", ] +[[package]] +name = "webpki" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "webpki-roots" +version = "0.22.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "368bfe657969fb01238bb756d351dcade285e0f6fcbd36dcb23359a5169975be" +dependencies = [ + "webpki", +] + [[package]] name = "wepoll-ffi" version = "0.1.2" @@ -2968,30 +3156,31 @@ dependencies = [ [[package]] name = "which" -version = "4.2.5" +version = "4.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c4fb54e6113b6a8772ee41c3404fb0301ac79604489467e0a9ce1f3e97c24ae" +checksum = "1c831fbbee9e129a8cf93e7747a82da9d95ba8e16621cae60ec2cdc849bacb7b" dependencies = [ "either", - "lazy_static", "libc", + "once_cell", ] [[package]] name = "whoami" -version = "1.2.1" +version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524b58fa5a20a2fb3014dd6358b70e6579692a56ef6fce928834e488f42f65e8" +checksum = "d6631b6a2fd59b1841b622e8f1a7ad241ef0a46f2d580464ce8140ac94cbd571" dependencies = [ + "bumpalo", "wasm-bindgen", "web-sys", ] [[package]] name = "wildmatch" -version = "2.1.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6c48bd20df7e4ced539c12f570f937c6b4884928a87fee70a479d72f031d4e0" +checksum = "ee583bdc5ff1cf9db20e9db5bb3ff4c3089a8f6b8b31aff265c9aba85812db86" [[package]] name = "winapi" @@ -3038,14 +3227,15 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows" -version = "0.24.0" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9f39345ae0c8ab072c0ac7fe8a8b411636aa34f89be19ddd0d9226544f13944" +checksum = "f1c4bd0a50ac6020f65184721f758dba47bb9fbc2133df715ec74a237b26794a" dependencies = [ - "windows_i686_gnu 0.24.0", - "windows_i686_msvc 0.24.0", - "windows_x86_64_gnu 0.24.0", - "windows_x86_64_msvc 0.24.0", + "windows_aarch64_msvc 0.39.0", + "windows_i686_gnu 0.39.0", + "windows_i686_msvc 0.39.0", + "windows_x86_64_gnu 0.39.0", + "windows_x86_64_msvc 0.39.0", ] [[package]] @@ -3054,7 +3244,7 @@ version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" dependencies = [ - "windows_aarch64_msvc", + "windows_aarch64_msvc 0.36.1", "windows_i686_gnu 0.36.1", "windows_i686_msvc 0.36.1", "windows_x86_64_gnu 0.36.1", @@ -3068,10 +3258,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" [[package]] -name = "windows_i686_gnu" -version = "0.24.0" +name = "windows_aarch64_msvc" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0866510a3eca9aed73a077490bbbf03e5eaac4e1fd70849d89539e5830501fd" +checksum = "ec7711666096bd4096ffa835238905bb33fb87267910e154b18b44eaabb340f2" [[package]] name = "windows_i686_gnu" @@ -3080,10 +3270,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" [[package]] -name = "windows_i686_msvc" -version = "0.24.0" +name = "windows_i686_gnu" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf0ffed56b7e9369a29078d2ab3aaeceea48eb58999d2cff3aa2494a275b95c6" +checksum = "763fc57100a5f7042e3057e7e8d9bdd7860d330070251a73d003563a3bb49e1b" [[package]] name = "windows_i686_msvc" @@ -3092,10 +3282,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" [[package]] -name = "windows_x86_64_gnu" -version = "0.24.0" +name = "windows_i686_msvc" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "384a173630588044205a2993b6864a2f56e5a8c1e7668c07b93ec18cf4888dc4" +checksum = "7bc7cbfe58828921e10a9f446fcaaf649204dcfe6c1ddd712c5eebae6bda1106" [[package]] name = "windows_x86_64_gnu" @@ -3104,10 +3294,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" [[package]] -name = "windows_x86_64_msvc" -version = "0.24.0" +name = "windows_x86_64_gnu" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bd8f062d8ca5446358159d79a90be12c543b3a965c847c8f3eedf14b321d399" +checksum = "6868c165637d653ae1e8dc4d82c25d4f97dd6605eaa8d784b5c6e0ab2a252b65" [[package]] name = "windows_x86_64_msvc" @@ -3115,6 +3305,12 @@ version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" +[[package]] +name = "windows_x86_64_msvc" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e4d40883ae9cae962787ca76ba76390ffa29214667a111db9e0a1ad8377e809" + [[package]] name = "winreg" version = "0.10.1" @@ -3124,17 +3320,6 @@ dependencies = [ "winapi 0.3.9", ] -[[package]] -name = "winrt-notification" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "007a0353840b23e0c6dc73e5b962ff58ed7f6bc9ceff3ce7fe6fbad8d496edf4" -dependencies = [ - "strum", - "windows", - "xml-rs", -] - [[package]] name = "ws2_32-sys" version = "0.2.1" @@ -3161,10 +3346,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2d7d3948613f75c98fd9328cfdcc45acc4d360655289d0a7d4ec931392200a3" [[package]] -name = "zbus" -version = "1.9.1" +name = "yansi" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2326acc379a3ac4e34b794089f5bdb17086bf29a5fdf619b7b4cc772dc2e9dad" +checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" + +[[package]] +name = "zbus" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cbeb2291cd7267a94489b71376eda33496c1b9881adf6b36f26cc2779f3fc49" dependencies = [ "async-io", "byteorder", @@ -3185,9 +3376,9 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "1.9.1" +version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a482c56029e48681b89b92b5db3c446db0915e8dd1052c0328a574eda38d5f93" +checksum = "fa3959a7847cf95e3d51e312856617c5b1b77191176c65a79a5f14d778bbe0a6" dependencies = [ "proc-macro-crate 0.1.5", "proc-macro2", @@ -3205,7 +3396,7 @@ dependencies = [ "crc32fast", "crossbeam-utils", "flate2", - "time 0.3.9", + "time 0.3.15", ] [[package]] @@ -3228,7 +3419,7 @@ version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4ca5e22593eb4212382d60d26350065bf2a02c34b85bc850474a74b589a3de9" dependencies = [ - "proc-macro-crate 1.1.3", + "proc-macro-crate 1.2.1", "proc-macro2", "quote", "syn", diff --git a/Cargo.toml b/Cargo.toml index 82a81d1..d2ca8e8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ [package] -authors = ["Christian Visintin"] +authors = ["Christian Visintin "] categories = ["command-line-utilities"] description = "termscp is a feature rich terminal file transfer and explorer with support for SCP/SFTP/FTP/S3" edition = "2021" @@ -10,7 +10,7 @@ license = "MIT" name = "termscp" readme = "README.md" repository = "https://github.com/veeso/termscp" -version = "0.9.0" +version = "0.10.0" [package.metadata.rpm] package = "termscp" @@ -31,51 +31,59 @@ name = "termscp" path = "src/main.rs" [dependencies] -argh = "0.1.7" +argh = "0.1.9" bitflags = "1.3.2" bytesize = "1.1.0" -chrono = "0.4.19" +chrono = "0.4.22" content_inspector = "0.2.4" dirs = "4.0.0" edit = "0.1.4" hostname = "0.3.1" -keyring = { version = "1.1.2", optional = true } +keyring = { version = "1.2.0", optional = true } +lazy-regex = "^2.3.0" lazy_static = "1.4.0" log = "0.4.17" magic-crypt = "3.1.10" notify = "4.0.17" -notify-rust = { version = "4.5.6", default-features = false, features = [ "d" ] } -open = "2.1.3" +notify-rust = { version = "4.5.10", default-features = false, features = [ "d" ] } +open = "3.0.3" rand = "0.8.5" -regex = "1.5.6" remotefs = "^0.2.0" -remotefs-aws-s3 = "^0.2.0" -remotefs-ftp = { version = "^0.1.0", features = [ "secure" ] } -remotefs-ssh = { version = "^0.1.1", features = [ "ssh2-vendored" ] } -rpassword = "6.0.1" -self_update = { version = "0.30.0", features = [ "archive-tar", "archive-zip", "compression-flate2", "compression-zip-deflate" ] } -serde = { version = "^1.0.0", features = [ "derive" ] } +remotefs-aws-s3 = { version = "^0.2.1", default-features = false, features = [ "find", "rustls" ] } + +rpassword = "7.0.0" +self_update = { version = "0.32.0", default-features = false, features = [ "rustls", "archive-tar", "archive-zip", "compression-flate2", "compression-zip-deflate" ] } +serde = { version = "^1", features = [ "derive" ] } simplelog = "0.12.0" +ssh2-config = "^0.1.3" tempfile = "3.2.0" -thiserror = "^1.0.0" +thiserror = "^1" toml = "0.5.0" -tui-realm-stdlib = "1.1.6" -tuirealm = "1.6.0" -unicode-width = "0.1.8" -whoami = "1.2.1" -wildmatch = "2.1.0" +tui-realm-stdlib = "1.1.7" +tuirealm = "1.8.0" +unicode-width = "0.1.10" +version-compare = "0.1.0" +whoami = "1.2.3" +wildmatch = "2.1.1" [dev-dependencies] -pretty_assertions = "1.2.1" -serial_test = "^0.7.0" +pretty_assertions = "^1.3" +serial_test = "^0.9" [features] default = [ "with-keyring" ] github-actions = [ ] with-keyring = [ "keyring" ] +[target."cfg(target_family = \"windows\")"] +[target."cfg(target_family = \"windows\")".dependencies] +remotefs-ftp = { version = "^0.1.2", features = [ "native-tls" ] } +remotefs-ssh = "^0.1.2" + [target."cfg(target_family = \"unix\")"] [target."cfg(target_family = \"unix\")".dependencies] +remotefs-ftp = { version = "^0.1.2", features = [ "vendored", "native-tls" ] } +remotefs-ssh = { version = "^0.1.2", features = [ "ssh2-vendored" ] } users = "0.11.0" [profile.dev] diff --git a/LICENSE b/LICENSE index af590f2..5178fdb 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2021 Christian Visintin +Copyright (c) 2020-2022 Christian Visintin Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 230f1cf..e126a9e 100644 --- a/README.md +++ b/README.md @@ -63,7 +63,7 @@

Developed by @veeso

-

Current version: 0.9.0 (18/06/2022)

+

Current version: 0.10.0 (15/10/2022)

/tmp/rust.sh && \ chmod +x /tmp/rust.sh && \ @@ -20,10 +21,10 @@ RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > /tmp/rust.sh && RUN git clone --branch $branch https://github.com/veeso/termscp.git # Set workdir to termscp WORKDIR /usr/src/termscp/ -# Install cargo arxch -RUN source $HOME/.cargo/env && cargo install cargo-rpm # Build for x86_64 RUN source $HOME/.cargo/env && cargo build --release +# Install cargo rpm +RUN source $HOME/.cargo/env && cargo install cargo-rpm # Build pkgs -RUN source $HOME/.cargo/env && yum -y install rpm-build && cargo rpm init && cargo rpm build +RUN source $HOME/.cargo/env && cargo rpm init && cargo rpm build CMD ["sh"] diff --git a/dist/build/x86_64_debian8/Dockerfile b/dist/build/x86_64_debian8/Dockerfile index e3971e2..533aa52 100644 --- a/dist/build/x86_64_debian8/Dockerfile +++ b/dist/build/x86_64_debian8/Dockerfile @@ -6,8 +6,6 @@ RUN apt update && apt install -y \ git \ gcc \ pkg-config \ - libssl-dev \ - libssh2-1-dev \ libdbus-1-dev \ curl diff --git a/dist/build/x86_64_debian9/Dockerfile b/dist/build/x86_64_debian9/Dockerfile index 3aad393..fd4b0cf 100644 --- a/dist/build/x86_64_debian9/Dockerfile +++ b/dist/build/x86_64_debian9/Dockerfile @@ -8,9 +8,8 @@ RUN apt update && apt install -y \ git \ gcc \ pkg-config \ - libssl-dev \ - libssh2-1-dev \ libdbus-1-dev \ + build-essential \ bash \ curl diff --git a/docs/de/README.md b/docs/de/README.md index ac3f97d..5b5c618 100644 --- a/docs/de/README.md +++ b/docs/de/README.md @@ -63,7 +63,7 @@

Entwickelt von @veeso

-

Aktuelle Version: 0.9.0 (18/06/2022)

+

Aktuelle Version: 0.10.0 (09/06/2022)

` to move the remote explorer p | `` | Select a file | Mark | | `` | Create new file with provided name | New | | `` | Edit file; see Text editor | Open | +| `

` | Open log panel | Panel | | `` | Quit termscp | Quit | | `` | Rename file | Rename | | `` | Save file as... | Save | diff --git a/docs/es/README.md b/docs/es/README.md index 66b1470..a695ec5 100644 --- a/docs/es/README.md +++ b/docs/es/README.md @@ -63,7 +63,7 @@

Desarrollado por @veeso

-

Versión actual: 0.9.0 (18/06/2022)

+

Versión actual: 0.10.0 (09/06/2022)

` para mover el panel del explorador | `` | Seleccione un archivo | Mark | | `` | Crear un nuevo archivo con el nombre proporcionado | New | | `` | Editar archivo | Open | +| `

` | Open log panel | Panel | | `` | Salir de termscp | Quit | | `` | Renombrar archivo | Rename | | `` | Guardar archivo como... | Save | diff --git a/docs/fr/README.md b/docs/fr/README.md index 07b4d5e..2322ce8 100644 --- a/docs/fr/README.md +++ b/docs/fr/README.md @@ -63,7 +63,7 @@

Développé par @veeso

-

Version actuelle: 0.9.0 (18/06/2022)

+

Version actuelle: 0.10.0 (09/06/2022)

` pour déplacer le panneau de | `` | Sélectionner un fichier | Mark | | `` | Créer un nouveau fichier avec le nom fourni | New | | `` | Modifier le fichier | Open | +| `

` | Ouvre le panel de journals | Panel | | `` | Quitter termscp | Quit | | `` | Renommer le fichier | Rename | | `` | Enregistrer le fichier sous... | Save | diff --git a/docs/it/README.md b/docs/it/README.md index 1313283..ed1c3b3 100644 --- a/docs/it/README.md +++ b/docs/it/README.md @@ -63,7 +63,7 @@

Sviluppato da @veeso

-

Versione corrente: 0.9.0 (18/06/2022)

+

Versione corrente: 0.10.0 (09/06/2022)

` per andare sul pan | `` | Seleziona file | Mark | | `` | Crea nuovo file con il nome fornito | New | | `` | Modifica file; Vedi text editor | Open | +| `

` | Apri pannello log | Panel | | `` | Termina termscp | Quit | | `` | Rinomina file | Rename | | `` | Salva file con nome | Save | diff --git a/docs/man.md b/docs/man.md index 1712b14..84f2b16 100644 --- a/docs/man.md +++ b/docs/man.md @@ -202,6 +202,7 @@ In order to change panel you need to type `` to move the remote explorer p | `` | Select a file | Mark | | `` | Create new file with provided name | New | | `` | Edit file; see Text editor | Open | +| `

` | Open log panel | Panel | | `` | Quit termscp | Quit | | `` | Rename file | Rename | | `` | Save file as... | Save | diff --git a/docs/zh-CN/README.md b/docs/zh-CN/README.md index 96fe220..c67053c 100644 --- a/docs/zh-CN/README.md +++ b/docs/zh-CN/README.md @@ -63,7 +63,7 @@

@veeso 开发

-

当前版本: 0.9.0 (18/06/2022)

+

当前版本: 0.10.0 (09/06/2022)

` | 选中文件 | Mark | | `` | 使用键入的名称新建文件 | New | | `` | 编辑文件;参考文本编辑器文档 | Open | +| `

` | 打开日志面板 | Panel | | `` | 退出termscp | Quit | | `` | 重命名文件 | Rename | | `` | 另存为... | Save | diff --git a/install.sh b/install.sh index 69b6ef3..6a68bb2 100755 --- a/install.sh +++ b/install.sh @@ -8,7 +8,7 @@ # -f, -y, --force, --yes # Skip the confirmation prompt during installation -TERMSCP_VERSION="0.9.0" +TERMSCP_VERSION="0.10.0" GITHUB_URL="https://github.com/veeso/termscp/releases/download/v${TERMSCP_VERSION}" DEB_URL="${GITHUB_URL}/termscp_${TERMSCP_VERSION}_amd64.deb" RPM_URL="${GITHUB_URL}/termscp-${TERMSCP_VERSION}-1.x86_64.rpm" @@ -296,7 +296,7 @@ install_bsd_cargo_deps() { } install_linux_cargo_deps() { - local debian_deps="gcc pkg-config libssl-dev libssh2-1-dev libdbus-1-dev" + local debian_deps="gcc pkg-config libdbus-1-dev" local rpm_deps="gcc openssl pkgconfig libdbus-devel openssl-devel" local arch_deps="gcc openssl pkg-config dbus" local deps_cmd="" diff --git a/src/config/bookmarks.rs b/src/config/bookmarks.rs index 5e1dc0d..46d148d 100644 --- a/src/config/bookmarks.rs +++ b/src/config/bookmarks.rs @@ -19,7 +19,7 @@ pub struct UserHosts { } /// Bookmark describes a single bookmark entry in the user hosts storage -#[derive(Clone, Deserialize, Serialize, Debug, PartialEq)] +#[derive(Clone, Deserialize, Serialize, Debug, PartialEq, Eq)] pub struct Bookmark { #[serde( deserialize_with = "deserialize_protocol", @@ -41,7 +41,7 @@ pub struct Bookmark { } /// Connection parameters for Aws s3 protocol -#[derive(Clone, Deserialize, Serialize, Debug, PartialEq, Default)] +#[derive(Clone, Deserialize, Serialize, Debug, PartialEq, Eq, Default)] pub struct S3Params { pub bucket: String, pub region: Option, diff --git a/src/config/params.rs b/src/config/params.rs index 3594c4e..e99df84 100644 --- a/src/config/params.rs +++ b/src/config/params.rs @@ -106,7 +106,7 @@ mod tests { assert_eq!(ui.file_fmt, Some(String::from("{NAME}"))); let cfg: UserConfig = UserConfig { user_interface: ui, - remote: remote, + remote, }; assert_eq!( *cfg.remote diff --git a/src/config/themes.rs b/src/config/themes.rs index b86d096..472a8ba 100644 --- a/src/config/themes.rs +++ b/src/config/themes.rs @@ -12,7 +12,7 @@ use tuirealm::tui::style::Color; /// ### Theme /// /// Theme contains all the colors lookup table for termscp -#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)] +#[derive(Clone, Debug, Deserialize, PartialEq, Eq, Serialize)] pub struct Theme { // -- auth #[serde( diff --git a/src/explorer/formatter.rs b/src/explorer/formatter.rs index d030979..1f3e8df 100644 --- a/src/explorer/formatter.rs +++ b/src/explorer/formatter.rs @@ -8,7 +8,7 @@ use crate::utils::path::diff_paths; use crate::utils::string::secure_substring; // Ext use bytesize::ByteSize; -use regex::Regex; +use lazy_regex::{Lazy, Regex}; use remotefs::File; use std::path::PathBuf; use std::time::UNIX_EPOCH; @@ -32,17 +32,14 @@ const FMT_KEY_SYMLINK: &str = "SYMLINK"; const FMT_KEY_USER: &str = "USER"; // Default const FMT_DEFAULT_STX: &str = "{NAME} {PEX} {USER} {SIZE} {MTIME}"; -// Regex -lazy_static! { - /** - * Regex matches: - * - group 0: KEY NAME - * - group 1?: LENGTH - * - group 2?: EXTRA - */ - static ref FMT_KEY_REGEX: Regex = Regex::new(r"\{(.*?)\}").ok().unwrap(); - static ref FMT_ATTR_REGEX: Regex = Regex::new(r"(?:([A-Z]+))(:?([0-9]+))?(:?(.+))?").ok().unwrap(); -} +/** + * Regex matches: + * - group 0: KEY NAME + * - group 1?: LENGTH + * - group 2?: EXTRA + */ +static FMT_KEY_REGEX: Lazy = lazy_regex!(r"\{(.*?)\}"); +static FMT_ATTR_REGEX: Lazy = lazy_regex!(r"(?:([A-Z]+))(:?([0-9]+))?(:?(.+))?"); /// Call Chain block is a block in a chain of functions which are called in order to format the File. /// A callChain is instantiated starting from the Formatter syntax and the regex, once the groups are found diff --git a/src/explorer/mod.rs b/src/explorer/mod.rs index 40298fa..84adb57 100644 --- a/src/explorer/mod.rs +++ b/src/explorer/mod.rs @@ -25,7 +25,7 @@ bitflags! { } /// FileSorting defines the criteria for sorting files -#[derive(Copy, Clone, PartialEq, std::fmt::Debug)] +#[derive(Copy, Clone, PartialEq, Eq, std::fmt::Debug)] pub enum FileSorting { Name, ModifyTime, @@ -34,7 +34,7 @@ pub enum FileSorting { } /// GroupDirs defines how directories should be grouped in sorting files -#[derive(PartialEq, std::fmt::Debug)] +#[derive(PartialEq, Eq, std::fmt::Debug)] pub enum GroupDirs { First, Last, @@ -318,8 +318,8 @@ mod tests { explorer.stack_size = 2; explorer.dirstack = VecDeque::with_capacity(2); // Push dir - explorer.pushd(&Path::new("/tmp")); - explorer.pushd(&Path::new("/home/omar")); + explorer.pushd(Path::new("/tmp")); + explorer.pushd(Path::new("/home/omar")); // Pop assert_eq!(explorer.popd().unwrap(), PathBuf::from("/home/omar")); assert_eq!(explorer.dirstack.len(), 1); @@ -328,9 +328,9 @@ mod tests { // Dirstack is empty now assert!(explorer.popd().is_none()); // Exceed limit - explorer.pushd(&Path::new("/tmp")); - explorer.pushd(&Path::new("/home/omar")); - explorer.pushd(&Path::new("/dev")); + explorer.pushd(Path::new("/tmp")); + explorer.pushd(Path::new("/home/omar")); + explorer.pushd(Path::new("/dev")); assert_eq!(explorer.dirstack.len(), 2); assert_eq!(*explorer.dirstack.get(1).unwrap(), PathBuf::from("/dev")); assert_eq!( diff --git a/src/filetransfer/mod.rs b/src/filetransfer/mod.rs index 8a2138a..a5c9501 100644 --- a/src/filetransfer/mod.rs +++ b/src/filetransfer/mod.rs @@ -11,7 +11,7 @@ pub use params::{FileTransferParams, ProtocolParams}; /// This enum defines the different transfer protocol available in termscp -#[derive(PartialEq, Debug, Clone, Copy)] +#[derive(PartialEq, Eq, Debug, Clone, Copy)] pub enum FileTransferProtocol { Sftp, Scp, diff --git a/src/host/mod.rs b/src/host/mod.rs index 75e1a57..a64c0f0 100644 --- a/src/host/mod.rs +++ b/src/host/mod.rs @@ -654,7 +654,7 @@ mod tests { let entries = std::fs::read_dir(PathBuf::from("/dev").as_path()).unwrap(); let mut counter: usize = 0; for _ in entries { - counter = counter + 1; + counter += 1; } assert_eq!(host.files.len(), counter); } @@ -696,7 +696,7 @@ mod tests { let entries = std::fs::read_dir(PathBuf::from("/dev").as_path()).unwrap(); let mut counter: usize = 0; for _ in entries { - counter = counter + 1; + counter += 1; } assert_eq!(host.list_dir().len(), counter); } @@ -709,10 +709,10 @@ mod tests { assert!(host.change_wrkdir(new_dir.as_path()).is_ok()); // Verify new files // Scan dir - let entries = std::fs::read_dir(PathBuf::from(new_dir).as_path()).unwrap(); + let entries = std::fs::read_dir(new_dir.as_path()).unwrap(); let mut counter: usize = 0; for _ in entries { - counter = counter + 1; + counter += 1; } assert_eq!(host.files.len(), counter); } @@ -793,7 +793,7 @@ mod tests { let files: Vec = host.list_dir(); // Verify files let file_0: &File = files.get(0).unwrap(); - if file_0.name() == String::from("foo.txt") { + if file_0.name() == *"foo.txt" { assert!(file_0.metadata.symlink.is_none()); } else { assert_eq!( @@ -803,7 +803,7 @@ mod tests { } // Verify simlink let file_1: &File = files.get(1).unwrap(); - if file_1.name() == String::from("bar.txt") { + if file_1.name() == *"bar.txt" { assert_eq!( file_1.metadata.symlink.as_ref().unwrap(), &PathBuf::from(format!("{}/foo.txt", tmpdir.path().display())) diff --git a/src/main.rs b/src/main.rs index 5e05eeb..51d8fe9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,6 +5,8 @@ const TERMSCP_AUTHORS: &str = env!("CARGO_PKG_AUTHORS"); #[macro_use] extern crate bitflags; #[macro_use] +extern crate lazy_regex; +#[macro_use] extern crate lazy_static; #[macro_use] extern crate log; diff --git a/src/system/auto_update.rs b/src/system/auto_update.rs index 172ef41..12eab46 100644 --- a/src/system/auto_update.rs +++ b/src/system/auto_update.rs @@ -96,7 +96,7 @@ impl Update { new_version, cargo_crate_version!() ); - if new_version.as_str() > cargo_crate_version!() { + if Self::is_new_version_higher(new_version.as_str(), cargo_crate_version!()) { Some(r) // New version is available } else { None // No new version @@ -105,6 +105,12 @@ impl Update { None => None, } } + + /// Check wether new version is higher than new version + fn is_new_version_higher(new_version: &str, current_version: &str) -> bool { + version_compare::compare(new_version, current_version).unwrap_or(version_compare::Cmp::Lt) + == version_compare::Cmp::Gt + } } impl From for UpdateStatus { fn from(s: Status) -> Self { @@ -193,4 +199,13 @@ mod test { assert_eq!(release.body.as_str(), "fixed everything"); assert_eq!(release.version.as_str(), "0.7.0"); } + + #[test] + fn should_tell_that_version_is_higher() { + assert!(Update::is_new_version_higher("0.10.0", "0.9.0")); + assert!(Update::is_new_version_higher("0.20.0", "0.19.0")); + assert!(!Update::is_new_version_higher("0.9.0", "0.10.0")); + assert!(!Update::is_new_version_higher("0.9.9", "0.10.1")); + assert!(!Update::is_new_version_higher("0.10.9", "0.11.0")); + } } diff --git a/src/system/config_client.rs b/src/system/config_client.rs index 42052c3..6ac81f4 100644 --- a/src/system/config_client.rs +++ b/src/system/config_client.rs @@ -491,7 +491,7 @@ mod tests { // Verify client has updated parameters assert_eq!(client.get_default_protocol(), FileTransferProtocol::Scp); assert_eq!(client.get_text_editor(), PathBuf::from("/usr/bin/vim")); - let mut expected_key_path: PathBuf = key_path.clone(); + let mut expected_key_path: PathBuf = key_path; expected_key_path.push("pi@192.168.1.31.key"); assert_eq!( client.get_ssh_key("pi@192.168.1.31").unwrap().unwrap(), diff --git a/src/system/environment.rs b/src/system/environment.rs index 1914412..7839bf1 100644 --- a/src/system/environment.rs +++ b/src/system/environment.rs @@ -126,7 +126,7 @@ mod tests { #[serial] fn test_system_environment_get_bookmarks_paths() { assert_eq!( - get_bookmarks_paths(&Path::new("/home/omar/.config/termscp/")), + get_bookmarks_paths(Path::new("/home/omar/.config/termscp/")), PathBuf::from("/home/omar/.config/termscp/bookmarks.toml"), ); } @@ -135,7 +135,7 @@ mod tests { #[serial] fn test_system_environment_get_config_paths() { assert_eq!( - get_config_paths(&Path::new("/home/omar/.config/termscp/")), + get_config_paths(Path::new("/home/omar/.config/termscp/")), ( PathBuf::from("/home/omar/.config/termscp/config.toml"), PathBuf::from("/home/omar/.config/termscp/.ssh/") @@ -147,7 +147,7 @@ mod tests { #[serial] fn test_system_environment_get_log_paths() { assert_eq!( - get_log_paths(&Path::new("/home/omar/.config/termscp/")), + get_log_paths(Path::new("/home/omar/.config/termscp/")), PathBuf::from("/home/omar/.config/termscp/termscp.log"), ); } @@ -156,7 +156,7 @@ mod tests { #[serial] fn test_system_environment_get_theme_path() { assert_eq!( - get_theme_path(&Path::new("/home/omar/.config/termscp/")), + get_theme_path(Path::new("/home/omar/.config/termscp/")), PathBuf::from("/home/omar/.config/termscp/theme.toml"), ); } diff --git a/src/system/keys/filestorage.rs b/src/system/keys/filestorage.rs index ee6a7d3..7d2b318 100644 --- a/src/system/keys/filestorage.rs +++ b/src/system/keys/filestorage.rs @@ -96,7 +96,7 @@ mod tests { #[test] fn test_system_keys_filestorage_make_dir() { - let storage: FileStorage = FileStorage::new(&Path::new("/tmp/")); + let storage: FileStorage = FileStorage::new(Path::new("/tmp/")); assert_eq!( storage.make_file_path("bookmarks").as_path(), Path::new("/tmp/.bookmarks.key") diff --git a/src/system/keys/mod.rs b/src/system/keys/mod.rs index a2186ba..10f3597 100644 --- a/src/system/keys/mod.rs +++ b/src/system/keys/mod.rs @@ -10,7 +10,7 @@ pub mod keyringstorage; use thiserror::Error; /// defines the error type for the `KeyStorage` -#[derive(Debug, Error, PartialEq)] +#[derive(Debug, Error, PartialEq, Eq)] pub enum KeyStorageError { #[cfg(feature = "with-keyring")] #[error("Key has a bad syntax")] diff --git a/src/system/sshkey_storage.rs b/src/system/sshkey_storage.rs index c16f190..b607b8a 100644 --- a/src/system/sshkey_storage.rs +++ b/src/system/sshkey_storage.rs @@ -5,12 +5,16 @@ // Locals use super::config_client::ConfigClient; // Ext -use remotefs_ssh::SshKeyStorage as SshKeyStorageT; +use remotefs_ssh::SshKeyStorage as SshKeyStorageTrait; +use ssh2_config::SshConfig; use std::collections::HashMap; use std::path::{Path, PathBuf}; pub struct SshKeyStorage { - hosts: HashMap, // Association between {user}@{host} and RSA key path + /// Association between {user}@{host} and RSA key path + hosts: HashMap, + /// Ssh2 configuration + ssh_config: Option, } impl SshKeyStorage { @@ -19,6 +23,7 @@ impl SshKeyStorage { pub fn empty() -> Self { SshKeyStorage { hosts: HashMap::new(), + ssh_config: None, } } @@ -34,21 +39,67 @@ impl SshKeyStorage { let key: String = Self::make_mapkey(host, username); self.hosts.insert(key, p); } -} -impl SshKeyStorageT for SshKeyStorage { - fn resolve(&self, host: &str, username: &str) -> Option<&Path> { + /// Parse ssh2 config + fn parse_ssh2_config(path: &str) -> Result { + use std::fs::File; + use std::io::BufReader; + + let mut reader = File::open(path) + .map_err(|e| format!("failed to open {}: {}", path, e)) + .map(BufReader::new)?; + SshConfig::default() + .parse(&mut reader) + .map_err(|e| format!("Failed to parse ssh2 config: {}", e)) + } + + /// Resolve host via termscp ssh keys storage + fn resolve_host_in_termscp_storage(&self, host: &str, username: &str) -> Option<&Path> { let key: String = Self::make_mapkey(host, username); self.hosts.get(&key).map(|x| x.as_path()) } + + /// Resolve host via ssh2 configuration + fn resolve_host_in_ssh2_configuration(&self, host: &str) -> Option { + if let Some(config) = self.ssh_config.as_ref() { + let params = config.query(host); + params + .identity_file + .as_ref() + .and_then(|x| x.get(0).cloned()) + } else { + debug!("ssh2 config is not available; no key has been found"); + None + } + } +} + +impl SshKeyStorageTrait for SshKeyStorage { + fn resolve(&self, host: &str, username: &str) -> Option { + // search in termscp keys + if let Some(path) = self.resolve_host_in_termscp_storage(host, username) { + return Some(path.to_path_buf()); + } + debug!( + "couldn't find any ssh key associated to {} at {}. Trying with ssh2 config", + username, host + ); + // otherwise search in configuration + self.resolve_host_in_ssh2_configuration(host) + } } impl From<&ConfigClient> for SshKeyStorage { fn from(cfg_client: &ConfigClient) -> Self { + // read ssh2 config + let ssh_config = cfg_client.get_ssh_config().and_then(|x| { + debug!("reading ssh config at {}", x); + Self::parse_ssh2_config(x).ok() + }); let mut hosts: HashMap = HashMap::with_capacity(cfg_client.iter_ssh_keys().count()); debug!("Setting up SSH key storage"); - // Iterate over keys + // Iterate over keys in storage for key in cfg_client.iter_ssh_keys() { match cfg_client.get_ssh_key(key) { Ok(host) => match host { @@ -66,7 +117,7 @@ impl From<&ConfigClient> for SshKeyStorage { info!("Got SSH key for {}", key); } // Return storage - SshKeyStorage { hosts } + SshKeyStorage { hosts, ssh_config } } } @@ -75,6 +126,7 @@ mod tests { use super::*; use crate::system::config_client::ConfigClient; + use crate::utils::test_helpers; use pretty_assertions::assert_eq; use std::path::Path; @@ -93,7 +145,7 @@ mod tests { // Create ssh key storage let storage: SshKeyStorage = SshKeyStorage::from(&client); // Verify key exists - let mut exp_key_path: PathBuf = key_path.clone(); + let mut exp_key_path: PathBuf = key_path; exp_key_path.push("pi@192.168.1.31.key"); assert_eq!( *storage.resolve("192.168.1.31", "pi").unwrap(), @@ -103,6 +155,35 @@ mod tests { assert!(storage.resolve("deskichup", "veeso").is_none()); } + #[test] + fn sould_resolve_key_from_ssh2_config() { + let rsa_key = test_helpers::create_sample_file_with_content("ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDErJhQxEI0+VvhlXVUyh+vMCm7aXfCA/g633AG8ezD/5EylwchtAr2JCoBWnxn4zV8nI9dMqOgm0jO4IsXpKOjQojv+0VOH7I+cDlBg0tk4hFlvyyS6YviDAfDDln3jYUM+5QNDfQLaZlH2WvcJ3mkDxLVlI9MBX1BAeSmChLxwAvxALp2ncImNQLzDO9eHcig3dtMrEKkzXQowRW5Y7eUzg2+vvVq4H2DOjWwUndvB5sJkhEfTUVE7ID8ZdGJo60kUb/02dZYj+IbkAnMCsqktk0cg/4XFX82hEfRYFeb1arkysFisPU1DOb6QielL/axeTebVplaouYcXY0pFdJt root@8c50fd4c345a"); + let ssh_config_file = test_helpers::create_sample_file_with_content(format!( + r#" +Host test + HostName 127.0.0.1 + Port 2222 + User test + IdentityFile {} + StrictHostKeyChecking no + UserKnownHostsFile /dev/null +"#, + rsa_key.path().display() + )); + // make storage + let tmp_dir: tempfile::TempDir = tempfile::TempDir::new().ok().unwrap(); + let (cfg_path, key_path): (PathBuf, PathBuf) = get_paths(tmp_dir.path()); + let mut client: ConfigClient = ConfigClient::new(cfg_path.as_path(), key_path.as_path()) + .ok() + .unwrap(); + client.set_ssh_config(Some(ssh_config_file.path().to_string_lossy().to_string())); + let storage: SshKeyStorage = SshKeyStorage::from(&client); + assert_eq!( + storage.resolve("test", "pi").unwrap().as_path(), + rsa_key.path() + ); + } + #[test] fn test_system_sshkey_storage_empty() { let storage: SshKeyStorage = SshKeyStorage::empty(); diff --git a/src/ui/activities/auth/components/bookmarks.rs b/src/ui/activities/auth/components/bookmarks.rs index 764cf1e..a854694 100644 --- a/src/ui/activities/auth/components/bookmarks.rs +++ b/src/ui/activities/auth/components/bookmarks.rs @@ -6,7 +6,7 @@ use super::{FormMsg, Msg, UiMsg}; use tui_realm_stdlib::{Input, List, Radio}; use tuirealm::command::{Cmd, CmdResult, Direction, Position}; -use tuirealm::event::{Key, KeyEvent}; +use tuirealm::event::{Key, KeyEvent, KeyModifiers}; use tuirealm::props::{Alignment, BorderSides, BorderType, Borders, Color, InputType, TextSpan}; use tuirealm::{Component, Event, MockComponent, NoUserEvent, State, StateValue}; @@ -223,6 +223,14 @@ impl Component for DeleteBookmarkPopup { self.perform(Cmd::Move(Direction::Right)); Some(Msg::None) } + Event::Keyboard(KeyEvent { + code: Key::Char('y'), + modifiers: KeyModifiers::NONE, + }) => Some(Msg::Form(FormMsg::DeleteBookmark)), + Event::Keyboard(KeyEvent { + code: Key::Char('n'), + modifiers: KeyModifiers::NONE, + }) => Some(Msg::Ui(UiMsg::CloseDeleteBookmark)), Event::Keyboard(KeyEvent { code: Key::Enter, .. }) => { @@ -283,6 +291,14 @@ impl Component for DeleteRecentPopup { self.perform(Cmd::Move(Direction::Right)); Some(Msg::None) } + Event::Keyboard(KeyEvent { + code: Key::Char('y'), + modifiers: KeyModifiers::NONE, + }) => Some(Msg::Form(FormMsg::DeleteRecent)), + Event::Keyboard(KeyEvent { + code: Key::Char('n'), + modifiers: KeyModifiers::NONE, + }) => Some(Msg::Ui(UiMsg::CloseDeleteRecent)), Event::Keyboard(KeyEvent { code: Key::Enter, .. }) => { diff --git a/src/ui/activities/auth/components/popup.rs b/src/ui/activities/auth/components/popup.rs index 772d16c..b5e282b 100644 --- a/src/ui/activities/auth/components/popup.rs +++ b/src/ui/activities/auth/components/popup.rs @@ -6,7 +6,7 @@ use super::{FormMsg, Msg, UiMsg}; use tui_realm_stdlib::{List, Paragraph, Radio, Textarea}; use tuirealm::command::{Cmd, CmdResult, Direction, Position}; -use tuirealm::event::{Key, KeyEvent}; +use tuirealm::event::{Key, KeyEvent, KeyModifiers}; use tuirealm::props::{Alignment, BorderType, Borders, Color, TableBuilder, TextSpan}; use tuirealm::{Component, Event, MockComponent, NoUserEvent, State, StateValue}; @@ -186,6 +186,14 @@ impl Component for QuitPopup { self.perform(Cmd::Move(Direction::Right)); Some(Msg::None) } + Event::Keyboard(KeyEvent { + code: Key::Char('y'), + modifiers: KeyModifiers::NONE, + }) => Some(Msg::Form(FormMsg::Quit)), + Event::Keyboard(KeyEvent { + code: Key::Char('n'), + modifiers: KeyModifiers::NONE, + }) => Some(Msg::Ui(UiMsg::CloseQuitPopup)), Event::Keyboard(KeyEvent { code: Key::Enter, .. }) => { @@ -245,6 +253,14 @@ impl Component for InstallUpdatePopup { self.perform(Cmd::Move(Direction::Right)); Some(Msg::None) } + Event::Keyboard(KeyEvent { + code: Key::Char('y'), + modifiers: KeyModifiers::NONE, + }) => Some(Msg::Form(FormMsg::InstallUpdate)), + Event::Keyboard(KeyEvent { + code: Key::Char('n'), + modifiers: KeyModifiers::NONE, + }) => Some(Msg::Ui(UiMsg::CloseInstallUpdatePopup)), Event::Keyboard(KeyEvent { code: Key::Enter, .. }) => { diff --git a/src/ui/activities/auth/mod.rs b/src/ui/activities/auth/mod.rs index 07620a8..c32295b 100644 --- a/src/ui/activities/auth/mod.rs +++ b/src/ui/activities/auth/mod.rs @@ -60,14 +60,14 @@ pub enum Id { WindowSizeError, } -#[derive(Debug, PartialEq)] +#[derive(Debug, Eq, PartialEq)] pub enum Msg { Form(FormMsg), Ui(UiMsg), None, } -#[derive(Debug, PartialEq)] +#[derive(Debug, PartialEq, Eq)] pub enum FormMsg { Connect, DeleteBookmark, @@ -81,7 +81,7 @@ pub enum FormMsg { SaveBookmark, } -#[derive(Debug, PartialEq)] +#[derive(Debug, PartialEq, Eq)] pub enum UiMsg { AddressBlurDown, AddressBlurUp, diff --git a/src/ui/activities/filetransfer/actions/edit.rs b/src/ui/activities/filetransfer/actions/edit.rs index 59d5138..2902455 100644 --- a/src/ui/activities/filetransfer/actions/edit.rs +++ b/src/ui/activities/filetransfer/actions/edit.rs @@ -148,9 +148,7 @@ impl FileTransferActivity { } }; // Edit file - if let Err(err) = self.edit_local_file(tmpfile.as_path()) { - return Err(err); - } + self.edit_local_file(tmpfile.as_path())?; // Get local fs entry let tmpfile_entry: File = match self.host.stat(tmpfile.as_path()) { Ok(e) => e, diff --git a/src/ui/activities/filetransfer/components/log.rs b/src/ui/activities/filetransfer/components/log.rs index f21d5a2..4bf1b33 100644 --- a/src/ui/activities/filetransfer/components/log.rs +++ b/src/ui/activities/filetransfer/components/log.rs @@ -192,7 +192,8 @@ impl Component for Log { } // -- comp msg Event::Keyboard(KeyEvent { - code: Key::BackTab, .. + code: Key::BackTab | Key::Tab | Key::Char('p'), + .. }) => Some(Msg::Ui(UiMsg::LogBackTabbed)), _ => None, } diff --git a/src/ui/activities/filetransfer/components/popups.rs b/src/ui/activities/filetransfer/components/popups.rs index bd1817c..6d92799 100644 --- a/src/ui/activities/filetransfer/components/popups.rs +++ b/src/ui/activities/filetransfer/components/popups.rs @@ -147,6 +147,14 @@ impl Component for DeletePopup { Event::Keyboard(KeyEvent { code: Key::Esc, .. }) => { Some(Msg::Ui(UiMsg::CloseDeletePopup)) } + Event::Keyboard(KeyEvent { + code: Key::Char('y'), + modifiers: KeyModifiers::NONE, + }) => Some(Msg::Transfer(TransferMsg::DeleteFile)), + Event::Keyboard(KeyEvent { + code: Key::Char('n'), + modifiers: KeyModifiers::NONE, + }) => Some(Msg::Ui(UiMsg::CloseDeletePopup)), Event::Keyboard(KeyEvent { code: Key::Enter, .. }) => { @@ -203,6 +211,14 @@ impl Component for DisconnectPopup { Event::Keyboard(KeyEvent { code: Key::Esc, .. }) => { Some(Msg::Ui(UiMsg::CloseDisconnectPopup)) } + Event::Keyboard(KeyEvent { + code: Key::Char('y'), + modifiers: KeyModifiers::NONE, + }) => Some(Msg::Ui(UiMsg::Disconnect)), + Event::Keyboard(KeyEvent { + code: Key::Char('n'), + modifiers: KeyModifiers::NONE, + }) => Some(Msg::Ui(UiMsg::CloseDisconnectPopup)), Event::Keyboard(KeyEvent { code: Key::Enter, .. }) => { @@ -1195,6 +1211,14 @@ impl Component for QuitPopup { Event::Keyboard(KeyEvent { code: Key::Esc, .. }) => { Some(Msg::Ui(UiMsg::CloseQuitPopup)) } + Event::Keyboard(KeyEvent { + code: Key::Char('y'), + modifiers: KeyModifiers::NONE, + }) => Some(Msg::Ui(UiMsg::Quit)), + Event::Keyboard(KeyEvent { + code: Key::Char('n'), + modifiers: KeyModifiers::NONE, + }) => Some(Msg::Ui(UiMsg::CloseQuitPopup)), Event::Keyboard(KeyEvent { code: Key::Enter, .. }) => { @@ -1344,6 +1368,14 @@ impl Component for ReplacePopup { Event::Keyboard(KeyEvent { code: Key::Esc, .. }) => { Some(Msg::PendingAction(PendingActionMsg::CloseReplacePopups)) } + Event::Keyboard(KeyEvent { + code: Key::Char('y'), + modifiers: KeyModifiers::NONE, + }) => Some(Msg::PendingAction(PendingActionMsg::TransferPendingFile)), + Event::Keyboard(KeyEvent { + code: Key::Char('n'), + modifiers: KeyModifiers::NONE, + }) => Some(Msg::PendingAction(PendingActionMsg::CloseReplacePopups)), Event::Keyboard(KeyEvent { code: Key::Enter, .. }) => { @@ -1790,6 +1822,16 @@ impl Component for SyncBrowsingMkdirPopup { Event::Keyboard(KeyEvent { code: Key::Esc, .. }) => Some(Msg::PendingAction( PendingActionMsg::CloseSyncBrowsingMkdirPopup, )), + Event::Keyboard(KeyEvent { + code: Key::Char('y'), + modifiers: KeyModifiers::NONE, + }) => Some(Msg::PendingAction(PendingActionMsg::MakePendingDirectory)), + Event::Keyboard(KeyEvent { + code: Key::Char('n'), + modifiers: KeyModifiers::NONE, + }) => Some(Msg::PendingAction( + PendingActionMsg::CloseSyncBrowsingMkdirPopup, + )), Event::Keyboard(KeyEvent { code: Key::Enter, .. }) => { @@ -1967,6 +2009,14 @@ impl Component for WatcherPopup { Event::Keyboard(KeyEvent { code: Key::Esc, .. }) => { Some(Msg::Ui(UiMsg::CloseWatcherPopup)) } + Event::Keyboard(KeyEvent { + code: Key::Char('y'), + modifiers: KeyModifiers::NONE, + }) => Some(Msg::Transfer(TransferMsg::ToggleWatch)), + Event::Keyboard(KeyEvent { + code: Key::Char('n'), + modifiers: KeyModifiers::NONE, + }) => Some(Msg::Ui(UiMsg::CloseWatcherPopup)), Event::Keyboard(KeyEvent { code: Key::Enter, .. }) => { diff --git a/src/ui/activities/filetransfer/components/transfer/mod.rs b/src/ui/activities/filetransfer/components/transfer/mod.rs index 3db96ec..3231084 100644 --- a/src/ui/activities/filetransfer/components/transfer/mod.rs +++ b/src/ui/activities/filetransfer/components/transfer/mod.rs @@ -82,14 +82,11 @@ impl Component for ExplorerFind { Some(Msg::None) } // -- comp msg - Event::Keyboard(KeyEvent { - code: Key::BackTab, .. - }) => Some(Msg::Ui(UiMsg::ExplorerBackTabbed)), Event::Keyboard(KeyEvent { code: Key::Esc, .. }) => { Some(Msg::Ui(UiMsg::CloseFindExplorer)) } Event::Keyboard(KeyEvent { - code: Key::Left | Key::Right | Key::Tab, + code: Key::Left | Key::Right | Key::Tab | Key::BackTab, .. }) => Some(Msg::Ui(UiMsg::ChangeTransferWindow)), Event::Keyboard(KeyEvent { @@ -206,14 +203,11 @@ impl Component for ExplorerLocal { Some(Msg::None) } // -- comp msg - Event::Keyboard(KeyEvent { - code: Key::BackTab, .. - }) => Some(Msg::Ui(UiMsg::ExplorerBackTabbed)), Event::Keyboard(KeyEvent { code: Key::Esc, .. }) => { Some(Msg::Ui(UiMsg::ShowDisconnectPopup)) } Event::Keyboard(KeyEvent { - code: Key::Right | Key::Tab, + code: Key::Right | Key::Tab | Key::BackTab, .. }) => Some(Msg::Ui(UiMsg::ChangeTransferWindow)), Event::Keyboard(KeyEvent { @@ -275,6 +269,10 @@ impl Component for ExplorerLocal { code: Key::Char('o') | Key::Function(4), modifiers: KeyModifiers::NONE, }) => Some(Msg::Transfer(TransferMsg::OpenTextFile)), + Event::Keyboard(KeyEvent { + code: Key::Char('p'), + modifiers: KeyModifiers::NONE, + }) => Some(Msg::Ui(UiMsg::ShowLogPanel)), Event::Keyboard(KeyEvent { code: Key::Char('r') | Key::Function(6), modifiers: KeyModifiers::NONE, @@ -386,14 +384,11 @@ impl Component for ExplorerRemote { Some(Msg::None) } // -- comp msg - Event::Keyboard(KeyEvent { - code: Key::BackTab, .. - }) => Some(Msg::Ui(UiMsg::ExplorerBackTabbed)), Event::Keyboard(KeyEvent { code: Key::Esc, .. }) => { Some(Msg::Ui(UiMsg::ShowDisconnectPopup)) } Event::Keyboard(KeyEvent { - code: Key::Left | Key::Tab, + code: Key::Left | Key::Tab | Key::BackTab, .. }) => Some(Msg::Ui(UiMsg::ChangeTransferWindow)), Event::Keyboard(KeyEvent { @@ -455,6 +450,10 @@ impl Component for ExplorerRemote { code: Key::Char('o') | Key::Function(4), modifiers: KeyModifiers::NONE, }) => Some(Msg::Transfer(TransferMsg::OpenTextFile)), + Event::Keyboard(KeyEvent { + code: Key::Char('p'), + modifiers: KeyModifiers::NONE, + }) => Some(Msg::Ui(UiMsg::ShowLogPanel)), Event::Keyboard(KeyEvent { code: Key::Char('r') | Key::Function(6), modifiers: KeyModifiers::NONE, diff --git a/src/ui/activities/filetransfer/misc.rs b/src/ui/activities/filetransfer/misc.rs index f16e9c1..fc78a78 100644 --- a/src/ui/activities/filetransfer/misc.rs +++ b/src/ui/activities/filetransfer/misc.rs @@ -208,7 +208,7 @@ impl FileTransferActivity { Ok(h) => { let hostname: String = h.as_os_str().to_string_lossy().to_string(); let tokens: Vec<&str> = hostname.split('.').collect(); - String::from(*tokens.get(0).unwrap_or(&"localhost")) + String::from(*tokens.first().unwrap_or(&"localhost")) } Err(_) => String::from("localhost"), }; diff --git a/src/ui/activities/filetransfer/mod.rs b/src/ui/activities/filetransfer/mod.rs index 3bc338d..460e24c 100644 --- a/src/ui/activities/filetransfer/mod.rs +++ b/src/ui/activities/filetransfer/mod.rs @@ -140,7 +140,6 @@ enum UiMsg { CloseWatchedPathsList, CloseWatcherPopup, Disconnect, - ExplorerBackTabbed, LogBackTabbed, Quit, ReplacePopupTabbed, @@ -153,6 +152,7 @@ enum UiMsg { ShowFindPopup, ShowGotoPopup, ShowKeybindingsPopup, + ShowLogPanel, ShowMkdirPopup, ShowNewFilePopup, ShowOpenWithPopup, diff --git a/src/ui/activities/filetransfer/session.rs b/src/ui/activities/filetransfer/session.rs index 23bb38a..4237fa4 100644 --- a/src/ui/activities/filetransfer/session.rs +++ b/src/ui/activities/filetransfer/session.rs @@ -326,11 +326,7 @@ impl FileTransferActivity { break; } // Send entry; name is always None after first call - if let Err(err) = - self.filetransfer_send_recurse(entry, remote_path.as_path(), None) - { - return Err(err); - } + self.filetransfer_send_recurse(entry, remote_path.as_path(), None)? } Ok(()) } @@ -717,13 +713,11 @@ impl FileTransferActivity { } // Receive entry; name is always None after first call // Local path becomes local_dir_path - if let Err(err) = self.filetransfer_recv_recurse( + self.filetransfer_recv_recurse( entry, local_dir_path.as_path(), None, - ) { - return Err(err); - } + )? } Ok(()) } diff --git a/src/ui/activities/filetransfer/update.rs b/src/ui/activities/filetransfer/update.rs index 103085e..3111dce 100644 --- a/src/ui/activities/filetransfer/update.rs +++ b/src/ui/activities/filetransfer/update.rs @@ -102,7 +102,7 @@ impl FileTransferActivity { self.action_submit_local(entry); // Update file list if sync if self.browser.sync_browsing && self.browser.found().is_none() { - let _ = self.update_remote_filelist(); + self.update_remote_filelist(); } self.update_local_filelist(); } @@ -112,7 +112,7 @@ impl FileTransferActivity { self.action_submit_remote(entry); // Update file list if sync if self.browser.sync_browsing && self.browser.found().is_none() { - let _ = self.update_local_filelist(); + self.update_local_filelist(); } self.update_remote_filelist(); } @@ -161,7 +161,7 @@ impl FileTransferActivity { FileExplorerTab::Local => { self.action_go_to_local_upper_dir(); if self.browser.sync_browsing && self.browser.found().is_none() { - let _ = self.update_remote_filelist(); + self.update_remote_filelist(); } // Reload file list component self.update_local_filelist() @@ -169,7 +169,7 @@ impl FileTransferActivity { FileExplorerTab::Remote => { self.action_go_to_remote_upper_dir(); if self.browser.sync_browsing && self.browser.found().is_none() { - let _ = self.update_local_filelist(); + self.update_local_filelist(); } // Reload file list component self.update_remote_filelist() @@ -182,7 +182,7 @@ impl FileTransferActivity { FileExplorerTab::Local => { self.action_go_to_previous_local_dir(); if self.browser.sync_browsing && self.browser.found().is_none() { - let _ = self.update_remote_filelist(); + self.update_remote_filelist(); } // Reload file list component self.update_local_filelist() @@ -190,7 +190,7 @@ impl FileTransferActivity { FileExplorerTab::Remote => { self.action_go_to_previous_remote_dir(); if self.browser.sync_browsing && self.browser.found().is_none() { - let _ = self.update_local_filelist(); + self.update_local_filelist(); } // Reload file list component self.update_remote_filelist() @@ -406,7 +406,7 @@ impl FileTransferActivity { self.disconnect(); self.umount_disconnect(); } - UiMsg::ExplorerBackTabbed => { + UiMsg::ShowLogPanel => { assert!(self.app.active(&Id::Log).is_ok()); } UiMsg::LogBackTabbed => { diff --git a/src/ui/activities/filetransfer/view.rs b/src/ui/activities/filetransfer/view.rs index f104b2b..c69d973 100644 --- a/src/ui/activities/filetransfer/view.rs +++ b/src/ui/activities/filetransfer/view.rs @@ -80,8 +80,8 @@ impl FileTransferActivity { self.refresh_local_status_bar(); self.refresh_remote_status_bar(); // Update components - let _ = self.update_local_filelist(); - let _ = self.update_remote_filelist(); + self.update_local_filelist(); + self.update_remote_filelist(); // Global listener self.mount_global_listener(); // Give focus to local explorer diff --git a/src/ui/activities/setup/components/commons.rs b/src/ui/activities/setup/components/commons.rs index d1500ae..5f9ac7d 100644 --- a/src/ui/activities/setup/components/commons.rs +++ b/src/ui/activities/setup/components/commons.rs @@ -6,7 +6,7 @@ use super::{CommonMsg, Msg, ViewLayout}; use tui_realm_stdlib::{List, Paragraph, Radio, Span}; use tuirealm::command::{Cmd, CmdResult, Direction, Position}; -use tuirealm::event::{Key, KeyEvent}; +use tuirealm::event::{Key, KeyEvent, KeyModifiers}; use tuirealm::props::{Alignment, BorderSides, BorderType, Borders, Color, TableBuilder, TextSpan}; use tuirealm::{Component, Event, MockComponent, NoUserEvent, State, StateValue}; @@ -296,6 +296,14 @@ impl Component for SavePopup { self.perform(Cmd::Move(Direction::Right)); Some(Msg::None) } + Event::Keyboard(KeyEvent { + code: Key::Char('y'), + modifiers: KeyModifiers::NONE, + }) => Some(Msg::Common(CommonMsg::SaveConfig)), + Event::Keyboard(KeyEvent { + code: Key::Char('n'), + modifiers: KeyModifiers::NONE, + }) => Some(Msg::Common(CommonMsg::CloseSavePopup)), Event::Keyboard(KeyEvent { code: Key::Enter, .. }) => { diff --git a/src/ui/activities/setup/components/config.rs b/src/ui/activities/setup/components/config.rs index 3f75557..ed41f05 100644 --- a/src/ui/activities/setup/components/config.rs +++ b/src/ui/activities/setup/components/config.rs @@ -278,7 +278,7 @@ impl NotificationsThreshold { parse_bytesize(bytes).is_some() } fn char_valid(_input: &str, incoming: char) -> bool { - incoming.is_digit(10) || ['B', 'K', 'M', 'G', 'T', 'P'].contains(&incoming) + incoming.is_ascii_digit() || ['B', 'K', 'M', 'G', 'T', 'P'].contains(&incoming) } Self { component: Input::default() diff --git a/src/ui/activities/setup/components/ssh.rs b/src/ui/activities/setup/components/ssh.rs index b817d3f..2acf0a8 100644 --- a/src/ui/activities/setup/components/ssh.rs +++ b/src/ui/activities/setup/components/ssh.rs @@ -58,6 +58,14 @@ impl Component for DelSshKeyPopup { self.perform(Cmd::Move(Direction::Right)); Some(Msg::None) } + Event::Keyboard(KeyEvent { + code: Key::Char('y'), + modifiers: KeyModifiers::NONE, + }) => Some(Msg::Ssh(SshMsg::DeleteSshKey)), + Event::Keyboard(KeyEvent { + code: Key::Char('n'), + modifiers: KeyModifiers::NONE, + }) => Some(Msg::Ssh(SshMsg::CloseDelSshKeyPopup)), Event::Keyboard(KeyEvent { code: Key::Enter, .. }) => { @@ -143,7 +151,8 @@ impl Component for SshKeys { _ => Some(Msg::None), }, Event::Keyboard(KeyEvent { - code: Key::Delete, .. + code: Key::Delete | Key::Char('e'), + .. }) => Some(Msg::Ssh(SshMsg::ShowDelSshKeyPopup)), Event::Keyboard(KeyEvent { code: Key::Char('n'), diff --git a/src/ui/activities/setup/mod.rs b/src/ui/activities/setup/mod.rs index 2b7c5b9..e0b9940 100644 --- a/src/ui/activities/setup/mod.rs +++ b/src/ui/activities/setup/mod.rs @@ -99,7 +99,7 @@ pub enum IdTheme { TransferTitle2, } -#[derive(Debug, Clone, PartialEq)] +#[derive(Debug, Clone, PartialEq, Eq)] pub enum Msg { Common(CommonMsg), Config(ConfigMsg), @@ -108,7 +108,7 @@ pub enum Msg { None, } -#[derive(Debug, Clone, PartialEq)] +#[derive(Debug, Clone, PartialEq, Eq)] pub enum CommonMsg { ChangeLayout, CloseErrorPopup, @@ -125,7 +125,7 @@ pub enum CommonMsg { WindowResized, } -#[derive(Debug, Clone, PartialEq)] +#[derive(Debug, Clone, PartialEq, Eq)] pub enum ConfigMsg { CheckUpdatesBlurDown, CheckUpdatesBlurUp, @@ -152,7 +152,7 @@ pub enum ConfigMsg { TextEditorBlurUp, } -#[derive(Debug, Clone, PartialEq)] +#[derive(Debug, Clone, PartialEq, Eq)] pub enum SshMsg { CloseDelSshKeyPopup, CloseNewSshKeyPopup, @@ -165,7 +165,7 @@ pub enum SshMsg { SshUsernameBlur, } -#[derive(Debug, Clone, PartialEq)] +#[derive(Debug, Clone, PartialEq, Eq)] pub enum ThemeMsg { AuthAddressBlurDown, AuthAddressBlurUp, @@ -230,7 +230,7 @@ const STORE_CONFIG_CHANGED: &str = "SETUP_CONFIG_CHANGED"; /// ### ViewLayout /// /// Current view layout -#[derive(PartialEq)] +#[derive(PartialEq, Eq)] pub enum ViewLayout { SetupForm, SshKeys, diff --git a/src/ui/activities/setup/view/ssh_keys.rs b/src/ui/activities/setup/view/ssh_keys.rs index 6d64648..647c848 100644 --- a/src/ui/activities/setup/view/ssh_keys.rs +++ b/src/ui/activities/setup/view/ssh_keys.rs @@ -20,8 +20,6 @@ impl SetupActivity { self.new_app(ViewLayout::SshKeys); // Load keys self.reload_ssh_keys(); - // Give focus - assert!(self.app.active(&Id::Ssh(IdSsh::SshKeys)).is_ok()); } pub(crate) fn view_ssh_keys(&mut self) { @@ -137,5 +135,6 @@ impl SetupActivity { vec![] ) .is_ok()); + assert!(self.app.active(&Id::Ssh(IdSsh::SshKeys)).is_ok()); } } diff --git a/src/utils/crypto.rs b/src/utils/crypto.rs index 62eaee5..6cc8b13 100644 --- a/src/utils/crypto.rs +++ b/src/utils/crypto.rs @@ -32,7 +32,7 @@ mod tests { fn test_utils_crypto_aes128() { let key: &str = "MYSUPERSECRETKEY"; let input: &str = "Hello world!"; - let secret: String = aes128_b64_crypt(&key, input); + let secret: String = aes128_b64_crypt(key, input); assert_eq!(secret.as_str(), "z4Z6LpcpYqBW4+bkIok+5A=="); assert_eq!( aes128_b64_decrypt(key, secret.as_str()) diff --git a/src/utils/fmt.rs b/src/utils/fmt.rs index 3822102..044bc64 100644 --- a/src/utils/fmt.rs +++ b/src/utils/fmt.rs @@ -300,7 +300,7 @@ mod tests { #[test] fn test_utils_fmt_time() { - let system_time: SystemTime = SystemTime::from(SystemTime::UNIX_EPOCH); + let system_time: SystemTime = SystemTime::UNIX_EPOCH; assert_eq!( fmt_time(system_time, "%Y-%m-%d"), String::from("1970-01-01") @@ -326,12 +326,12 @@ mod tests { #[test] #[cfg(target_family = "unix")] fn test_utils_fmt_path_elide() { - let p: &Path = &Path::new("/develop/pippo"); + let p: &Path = Path::new("/develop/pippo"); // Under max size assert_eq!(fmt_path_elide(p, 16), String::from("/develop/pippo")); // Above max size, only one ancestor assert_eq!(fmt_path_elide(p, 8), String::from("/develop/pippo")); - let p: &Path = &Path::new("/develop/pippo/foo/bar"); + let p: &Path = Path::new("/develop/pippo/foo/bar"); assert_eq!(fmt_path_elide(p, 16), String::from("/develop/…/foo/bar")); } diff --git a/src/utils/parser.rs b/src/utils/parser.rs index ce80601..d879b64 100644 --- a/src/utils/parser.rs +++ b/src/utils/parser.rs @@ -14,56 +14,57 @@ use crate::system::environment; // Ext use bytesize::ByteSize; -use regex::Regex; +use lazy_regex::{Lazy, Regex}; use std::path::PathBuf; use std::str::FromStr; use tuirealm::tui::style::Color; use tuirealm::utils::parser as tuirealm_parser; // Regex -lazy_static! { - /** - * This regex matches the protocol used as option - * Regex matches: - * - group 1: Some(protocol) | None - * - group 2: Some(other args) - */ - static ref REMOTE_OPT_PROTOCOL_REGEX: Regex = Regex::new(r"(?:([a-z0-9]+)://)?(?:(.+))").unwrap(); +/** + * This regex matches the protocol used as option + * Regex matches: + * - group 1: Some(protocol) | None + * - group 2: Some(other args) + */ +static REMOTE_OPT_PROTOCOL_REGEX: Lazy = lazy_regex!(r"(?:([a-z0-9]+)://)?(?:(.+))"); - /** - * Regex matches: - * - group 1: Some(user) | None - * - group 2: Address - * - group 3: Some(port) | None - * - group 4: Some(path) | None - */ - static ref REMOTE_GENERIC_OPT_REGEX: Regex = Regex::new(r"(?:([^@]+)@)?(?:([^:]+))(?::((?:[0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])(?:[0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])))?(?::([^:]+))?").ok().unwrap(); +/** + * Regex matches: + * - group 1: Some(user) | None + * - group 2: Address + * - group 3: Some(port) | None + * - group 4: Some(path) | None + */ +static REMOTE_GENERIC_OPT_REGEX: Lazy = lazy_regex!( + r"(?:([^@]+)@)?(?:([^:]+))(?::((?:[0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])(?:[0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])))?(?::([^:]+))?" +); - /** - * Regex matches: - * - group 1: Bucket - * - group 2: Region - * - group 3: Some(profile) | None - * - group 4: Some(path) | None - */ - static ref REMOTE_S3_OPT_REGEX: Regex = Regex::new(r"(?:([^@]+)@)(?:([^:]+))(?::([a-zA-Z0-9][^:]+))?(?::([^:]+))?").unwrap(); +/** + * Regex matches: + * - group 1: Bucket + * - group 2: Region + * - group 3: Some(profile) | None + * - group 4: Some(path) | None + */ +static REMOTE_S3_OPT_REGEX: Lazy = + lazy_regex!(r"(?:([^@]+)@)(?:([^:]+))(?::([a-zA-Z0-9][^:]+))?(?::([^:]+))?"); - /** - * Regex matches: - * - group 1: Version - * E.g. termscp-0.3.2 => 0.3.2 - * v0.4.0 => 0.4.0 - */ - static ref SEMVER_REGEX: Regex = Regex::new(r".*(:?[0-9]\.[0-9]\.[0-9])").unwrap(); +/** + * Regex matches: + * - group 1: Version + * E.g. termscp-0.3.2 => 0.3.2 + * v0.4.0 => 0.4.0 + */ +static SEMVER_REGEX: Lazy = lazy_regex!(r".*(:?[0-9]\.[0-9]\.[0-9])"); - /** - * Regex matches: - * - group 1: amount (number) - * - group 4: unit (K, M, G, T, P) - */ - static ref BYTESIZE_REGEX: Regex = Regex::new(r"(:?([0-9])+)( )*(:?[KMGTP])?B$").unwrap(); -} +/** + * Regex matches: + * - group 1: amount (number) + * - group 4: unit (K, M, G, T, P) + */ +static BYTESIZE_REGEX: Lazy = lazy_regex!(r"(:?([0-9])+)( )*(:?[KMGTP])?B$"); // -- remote opts diff --git a/src/utils/path.rs b/src/utils/path.rs index db6f36e..5c162be 100644 --- a/src/utils/path.rs +++ b/src/utils/path.rs @@ -94,11 +94,11 @@ mod test { #[test] fn absolutize_path() { assert_eq!( - absolutize(&Path::new("/home/omar"), &Path::new("readme.txt")).as_path(), + absolutize(Path::new("/home/omar"), Path::new("readme.txt")).as_path(), Path::new("/home/omar/readme.txt") ); assert_eq!( - absolutize(&Path::new("/home/omar"), &Path::new("/tmp/readme.txt")).as_path(), + absolutize(Path::new("/home/omar"), Path::new("/tmp/readme.txt")).as_path(), Path::new("/tmp/readme.txt") ); } diff --git a/src/utils/test_helpers.rs b/src/utils/test_helpers.rs index fe21f02..2aa39c8 100644 --- a/src/utils/test_helpers.rs +++ b/src/utils/test_helpers.rs @@ -21,14 +21,15 @@ pub fn create_sample_file_entry() -> (File, NamedTempFile) { ) } +/// Create sample file with default lorem ipsum content pub fn create_sample_file() -> NamedTempFile { - // Write + create_sample_file_with_content("Lorem ipsum dolor sit amet, consectetur adipiscing elit.Mauris ultricies consequat eros,nec scelerisque magna imperdiet metus.") +} + +/// Create sample file with provided content +pub fn create_sample_file_with_content(content: impl std::fmt::Display) -> NamedTempFile { let mut tmpfile: tempfile::NamedTempFile = tempfile::NamedTempFile::new().unwrap(); - writeln!( - tmpfile, - "Lorem ipsum dolor sit amet, consectetur adipiscing elit.Mauris ultricies consequat eros,nec scelerisque magna imperdiet metus." - ) - .unwrap(); + writeln!(tmpfile, "{}", content).unwrap(); tmpfile }