From 928470610e2569edab08e5ff7b201be077c3df2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Igor=20Gali=C4=87?= Date: Tue, 21 Jan 2020 17:36:47 +0100 Subject: [PATCH 01/46] remove csrf for now, so we can update the rest --- Cargo.lock | 26 ++++++-------------------- Cargo.toml | 4 ---- src/main.rs | 21 +-------------------- 3 files changed, 7 insertions(+), 44 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 57b685e6..d65453e7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2160,9 +2160,8 @@ dependencies = [ "plume-api 0.4.0", "plume-common 0.4.0", "plume-models 0.4.0", - "rocket 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", - "rocket_contrib 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", - "rocket_csrf 0.1.0 (git+https://github.com/fdb-hiroshima/rocket_csrf?rev=29910f2829e7e590a540da3804336577b48c7b31)", + "rocket 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "rocket_contrib 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "rocket_i18n 0.4.0 (git+https://github.com/Plume-org/rocket_i18n?rev=e922afa7c366038b3433278c03b1456b346074f2)", "rpassword 4.0.5 (registry+https://github.com/rust-lang/crates.io-index)", "rsass 0.9.8 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2724,18 +2723,6 @@ dependencies = [ "serde_json 1.0.51 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "rocket_csrf" -version = "0.1.0" -source = "git+https://github.com/fdb-hiroshima/rocket_csrf?rev=29910f2829e7e590a540da3804336577b48c7b31#29910f2829e7e590a540da3804336577b48c7b31" -dependencies = [ - "data-encoding 2.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "ring 0.13.5 (registry+https://github.com/rust-lang/crates.io-index)", - "rocket 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "rocket_http" version = "0.4.4" @@ -4214,11 +4201,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4a83fa3702a688b9359eccba92d153ac33fd2e8462f9e0e3fdf155239ea7792e" "checksum reqwest 0.9.24 (registry+https://github.com/rust-lang/crates.io-index)" = "f88643aea3c1343c804950d7bf983bd2067f5ab59db6d613a08e05572f2714ab" "checksum ring 0.13.5 (registry+https://github.com/rust-lang/crates.io-index)" = "2c4db68a2e35f3497146b7e4563df7d4773a2433230c5e4b448328e31740458a" -"checksum rocket 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "e20afbad214b001cabbe31dd270b48b3be980a7153ee2ed8392e241f856d651b" -"checksum rocket_codegen 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "2108b35e2c3a35759d3f16cc3002ece05523191d884d3ad6523693fd43324dde" -"checksum rocket_contrib 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "a10e7471279bc2d4a21b6fddd9589016bb119e6fbb547b216dd54ef237f28341" -"checksum rocket_csrf 0.1.0 (git+https://github.com/fdb-hiroshima/rocket_csrf?rev=29910f2829e7e590a540da3804336577b48c7b31)" = "" -"checksum rocket_http 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "6ce8ca76247376ea21cf271af0f95e3f2014596e3e4c7cc04e44ee6242a40ff2" +"checksum rocket 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "42c1e9deb3ef4fa430d307bfccd4231434b707ca1328fae339c43ad1201cc6f7" +"checksum rocket_codegen 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "79aa1366f9b2eccddc05971e17c5de7bb75a5431eb12c2b5c66545fd348647f4" +"checksum rocket_contrib 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e0fa5c1392135adc0f96a02ba150ac4c765e27c58dbfd32aa40678e948f6e56f" +"checksum rocket_http 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b1391457ee4e80b40d4b57fa5765c0f2836b20d73bcbee4e3f35d93cf3b80817" "checksum rocket_i18n 0.4.0 (git+https://github.com/Plume-org/rocket_i18n?rev=e922afa7c366038b3433278c03b1456b346074f2)" = "" "checksum rpassword 4.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "99371657d3c8e4d816fb6221db98fa408242b0b53bac08f8676a41f8554fe99f" "checksum rsass 0.9.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7f4534cc03040beacd2668621815f26fe57e5b7cfe085790f98e5e87c1612316" diff --git a/Cargo.toml b/Cargo.toml index 27994771..72d1e6fc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -65,10 +65,6 @@ path = "plume-common" [dependencies.plume-models] path = "plume-models" -[dependencies.rocket_csrf] -git = "https://github.com/fdb-hiroshima/rocket_csrf" -rev = "29910f2829e7e590a540da3804336577b48c7b31" - [build-dependencies] ructe = "0.9.0" rsass = "0.9" diff --git a/src/main.rs b/src/main.rs index ed203049..4d2f3d52 100644 --- a/src/main.rs +++ b/src/main.rs @@ -21,7 +21,6 @@ use plume_models::{ search::{Searcher as UnmanagedSearcher, SearcherError}, Connection, Error, CONFIG, }; -use rocket_csrf::CsrfFairingBuilder; use scheduled_thread_pool::ScheduledThreadPool; use std::process::exit; use std::sync::{Arc, Mutex}; @@ -275,25 +274,7 @@ Then try to restart Plume .manage(dbpool) .manage(Arc::new(workpool)) .manage(searcher) - .manage(include_i18n!()) - .attach( - CsrfFairingBuilder::new() - .set_default_target( - "/csrf-violation?target=".to_owned(), - rocket::http::Method::Post, - ) - .add_exceptions(vec![ - ("/inbox".to_owned(), "/inbox".to_owned(), None), - ( - "/@//inbox".to_owned(), - "/@//inbox".to_owned(), - None, - ), - ("/api/".to_owned(), "/api/".to_owned(), None), - ]) - .finalize() - .expect("main: csrf fairing creation error"), - ); + .manage(include_i18n!()); #[cfg(feature = "test")] let rocket = rocket.mount("/test", routes![test_routes::health,]); -- 2.38.5 From e52944e477fac701eb35d7c51bccfee5c8267b48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Igor=20Gali=C4=87?= Date: Wed, 22 Jan 2020 12:51:25 +0100 Subject: [PATCH 02/46] update rocket*; which gets us stuck in dependency conflicts --- Cargo.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 72d1e6fc..84402f71 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,9 +20,9 @@ heck = "0.3.0" lettre = "0.9.2" lettre_email = "0.9.2" num_cpus = "1.10" -rocket = "0.4.2" -rocket_contrib = { version = "0.4.2", features = ["json"] } -rocket_i18n = { git = "https://github.com/Plume-org/rocket_i18n", rev = "e922afa7c366038b3433278c03b1456b346074f2" } +rocket = { git = "https://github.com/SergioBenitez/Rocket", rev = "async" } +rocket_contrib = { git = "https://github.com/SergioBenitez/Rocket", rev = "async" , features = ["json"] } +rocket_i18n = { git = "https://github.com/Plume-org/rocket_i18n", rev = "go-async" } rpassword = "4.0" runtime-fmt = "0.4.0" scheduled-thread-pool = "0.2.2" -- 2.38.5 From bb5c2b69a7ecaad1ff6229a96e89fb18d86ac47a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Igor=20Gali=C4=87?= Date: Wed, 22 Jan 2020 13:12:16 +0100 Subject: [PATCH 03/46] update rocket* everywhere! and run cargo update --- Cargo.lock | 3609 +++++++++++++++++++++------------------ Cargo.toml | 7 +- plume-common/Cargo.toml | 2 +- plume-models/Cargo.toml | 9 +- 4 files changed, 1949 insertions(+), 1678 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d65453e7..238d8215 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,1106 +4,1328 @@ name = "activitypub" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5bfd311e7b4102971757a2a6f143a93b1a8e6b5afc2c46936af827fd9eab403f" dependencies = [ - "activitystreams-derive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "activitystreams-traits 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "activitystreams-types 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.51 (registry+https://github.com/rust-lang/crates.io-index)", + "activitystreams-derive", + "activitystreams-traits", + "activitystreams-types", + "serde", + "serde_derive", + "serde_json", ] [[package]] name = "activitystreams-derive" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "176bdecfca82b1980e4769e3d54b6a392284b724083e0bff68272e290f17458f" dependencies = [ - "proc-macro2 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.13.11 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.3.8", + "quote 0.5.2", + "syn 0.13.11", ] [[package]] name = "activitystreams-traits" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "670ef03168e704b0cae242e7a5d8b40506772b339687e01a3496fc4afe2e8542" dependencies = [ - "failure 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.51 (registry+https://github.com/rust-lang/crates.io-index)", + "failure", + "serde", + "serde_json", ] [[package]] name = "activitystreams-types" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff74c5765278614a009f97b9ec12f9a7c732bbcc5e0337fcfcab619b784860ec" dependencies = [ - "activitystreams-derive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "activitystreams-traits 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "chrono 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", - "mime 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.51 (registry+https://github.com/rust-lang/crates.io-index)", + "activitystreams-derive", + "activitystreams-traits", + "chrono", + "mime 0.3.16", + "serde", + "serde_derive", + "serde_json", ] [[package]] name = "adler32" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d2e7343e7fc9de883d1b0341e0b13970f764c14101234857d2ddafa1cb1cac2" [[package]] name = "ahash" -version = "0.3.2" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "const-random 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", -] +checksum = "9c251dce3391a07b43218ca070203ecb8f9f520d35ab71312296a59dbceab154" [[package]] name = "aho-corasick" version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8716408b8bc624ed7f65d223ddb9ac2d044c0547b6fa4b0d554f3a9540496ada" dependencies = [ - "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr", ] [[package]] name = "ammonia" version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "384d704f242a0a9faf793fff775a0be6ab9aa27edabffa097331d73779142520" dependencies = [ - "html5ever 0.23.0 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "maplit 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", - "tendril 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)", + "html5ever", + "lazy_static", + "maplit", + "matches", + "tendril", + "url 1.7.2", ] [[package]] name = "ansi_term" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" dependencies = [ - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.8", ] +[[package]] +name = "arc-swap" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b585a98a234c46fc563103e9278c9391fde1f4e6850334da895d27edb9580f62" + [[package]] name = "array_tool" version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f8cb5d814eb646a863c4f24978cff2880c4be96ad8cde2c0f0678732902e271" [[package]] name = "arrayvec" version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd9fd44efafa8690358b7408d253adf110036b88f55672a933f01d616ad9b1b9" dependencies = [ - "nodrop 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", + "nodrop", ] [[package]] name = "ascii" version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eab1c04a571841102f5345a8fc0f6bb3d31c315dec879b5c6e42e40ce7ffa34e" [[package]] name = "ascii_utils" version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71938f30533e4d95a6d17aa530939da3842c2ab6f4f84b9dae68447e4129f74a" [[package]] name = "askama_escape" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "719b48039ffac1564f67d70162109ba9341125cee0096a540e478355b3c724a7" + +[[package]] +name = "async-trait" +version = "0.1.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da71fef07bc806586090247e971229289f64c210a278ee5ae419314eb386b31d" +dependencies = [ + "proc-macro2 1.0.12", + "quote 1.0.4", + "syn 1.0.18", +] [[package]] name = "atom_syndication" version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a9a7ab83635ff7a3b04856f4ad95324dccc9b947ab1e790fc5c769ee6d6f60c" dependencies = [ - "derive_builder 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", - "failure 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "quick-xml 0.12.4 (registry+https://github.com/rust-lang/crates.io-index)", + "derive_builder", + "failure", + "quick-xml", ] [[package]] name = "atomicwrites" version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a2baf2feb820299c53c7ad1cc4f5914a220a1cb76d7ce321d2522a94b54651f" dependencies = [ - "nix 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "nix 0.14.1", + "tempdir", + "winapi 0.3.8", ] [[package]] name = "atty" version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" dependencies = [ - "hermit-abi 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "hermit-abi", + "libc", + "winapi 0.3.8", ] [[package]] name = "autocfg" version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d49d90015b3c36167a20fe2810c5cd875ad504b39cff3d4eae7977e6b7c1cb2" [[package]] name = "autocfg" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d" [[package]] name = "backtrace" version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "150ae7828afa7afb6d474f909d64072d21de1f3365b6e8ad8029bf7b1c6350a0" dependencies = [ - "backtrace-sys 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "dbghelp-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "debug-builders 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "backtrace-sys", + "cfg-if", + "dbghelp-sys", + "debug-builders", + "kernel32-sys", + "libc", + "winapi 0.2.8", ] [[package]] name = "backtrace" version = "0.3.46" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1e692897359247cc6bb902933361652380af0f1b7651ae5c5013407f30e109e" dependencies = [ - "backtrace-sys 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", + "backtrace-sys", + "cfg-if", + "libc", + "rustc-demangle", ] [[package]] name = "backtrace-sys" -version = "0.1.35" +version = "0.1.37" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18fbebbe1c9d1f383a9cc7e8ccdb471b91c8d024ee9c2ca5b5346121fe8b4399" dependencies = [ - "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", + "cc", + "libc", ] [[package]] name = "base-x" version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b20b618342cf9891c292c4f5ac2cde7287cc5c87e87e9c769d617793607dec1" + +[[package]] +name = "base16" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d27c3610c36aee21ce8ac510e6224498de4228ad772a171ed65643a24693a5a8" [[package]] name = "base64" version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "489d6c0ed21b11d038c31b6ceccca973e65d73ba3bd8ecb9a2babf5546164643" dependencies = [ - "byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "safemem 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.3.4", + "safemem", ] [[package]] name = "base64" version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e" dependencies = [ - "byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.3.4", ] [[package]] name = "base64" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7" [[package]] name = "bcrypt" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b4fd6a91ff640809cfab4ea74312a892238a7bbae53adbf717b71122deb0c85" dependencies = [ - "base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)", - "blowfish 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", + "base64 0.10.1", + "blowfish", + "byteorder 1.3.4", + "lazy_static", + "rand 0.7.3", ] [[package]] name = "bincode" version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5753e2a71534719bf3f4e57006c3a4f0d2c672a4b676eec84161f763eca87dbf" dependencies = [ - "byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.3.4", + "serde", ] [[package]] name = "bindgen" version = "0.50.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb0e5a5f74b2bafe0b39379f616b5975e08bcaca4e779c078d5c31324147e9ba" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "cexpr 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "clang-sys 0.28.1 (registry+https://github.com/rust-lang/crates.io-index)", - "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)", - "env_logger 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", - "fxhash 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "peeking_take_while 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 1.3.7 (registry+https://github.com/rust-lang/crates.io-index)", - "shlex 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "which 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 1.2.1", + "cexpr", + "cfg-if", + "clang-sys", + "clap", + "env_logger", + "fxhash", + "lazy_static", + "log 0.4.8", + "peeking_take_while", + "proc-macro2 0.4.30", + "quote 0.6.13", + "regex", + "shlex", + "which", ] [[package]] name = "bit-set" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e11e16035ea35e4e5997b393eacbf6f63983188f7a2ad25bfb13465f5ad59de" dependencies = [ - "bit-vec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "bit-vec", ] [[package]] name = "bit-vec" -version = "0.5.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f0dc55f2d8a1a85650ac47858bb001b4c0dd73d79e3c455a842925e68d29cd3" [[package]] name = "bitflags" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aad18937a628ec6abcd26d1489012cc0e18c21798210f491af69ded9b881106d" [[package]] name = "bitflags" version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" [[package]] name = "bitpacking" version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3744aff20a3437a99ebc0bb7733e9e60c7bf590478c9b897e95b38d57e5acb68" dependencies = [ - "crunchy 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "crunchy", ] [[package]] name = "block-cipher-trait" version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c924d49bd09e7c06003acda26cd9742e796e34282ec6c1189404dee0c1f4774" dependencies = [ - "generic-array 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)", + "generic-array", ] [[package]] name = "blowfish" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6aeb80d00f2688459b8542068abd974cfb101e7a82182414a99b5026c0d85cc3" dependencies = [ - "block-cipher-trait 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", - "byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "opaque-debug 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "block-cipher-trait", + "byteorder 1.3.4", + "opaque-debug", ] [[package]] name = "buf_redux" version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b953a6887648bb07a535631f2bc00fbdb2a2216f135552cb3f534ed136b9c07f" dependencies = [ - "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "safemem 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr", + "safemem", ] [[package]] name = "bufstream" version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40e38929add23cdf8a366df9b0e088953150724bcbe5fc330b0d8eb3b328eec8" [[package]] name = "bumpalo" version = "3.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12ae9db68ad7fac5fe51304d20f016c911539251075a214f8e663babefa35187" [[package]] name = "bytecount" version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0017894339f586ccb943b01b9555de56770c11cda818e7e3d8bd93f4ed7f46e" [[package]] name = "byteorder" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96c8b41881888cc08af32d47ac4edd52bc7fa27fef774be47a92443756451304" [[package]] name = "byteorder" version = "1.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de" [[package]] name = "bytes" version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c" dependencies = [ - "byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)", - "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.3.4", + "either 1.5.3", + "iovec", ] +[[package]] +name = "bytes" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "130aac562c0dd69c56b3b1cc8ffd2e17be31d0b6c25b61c96b76231aa23e39e1" + [[package]] name = "cc" -version = "1.0.50" +version = "1.0.52" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d87b23d6a92cd03af510a5ade527033f6aa6fa92161e2d5863a907d4c5e31d" [[package]] name = "census" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "641317709904ba3c1ad137cb5d88ec9d8c03c07de087b2cff5e84ec565c7e299" [[package]] name = "cexpr" version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fce5b5fb86b0c57c20c834c1b412fd09c77c8a59b9473f86272709e78874cd1d" dependencies = [ - "nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "nom 4.2.3", ] [[package]] name = "cfg-if" version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" [[package]] name = "chomp" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f74ad218e66339b11fd23f693fb8f1d621e80ba6ac218297be26073365d163d" dependencies = [ - "bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "conv 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "debugtrace 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "either 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 0.7.0", + "conv", + "debugtrace", + "either 0.1.7", ] [[package]] name = "chrono" version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80094f509cf8b5ae86a4966a39b3ff66cd7e2a3e594accec3743ff3fabeab5b2" dependencies = [ - "num-integer 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", + "num-integer", + "num-traits", + "serde", + "time", ] [[package]] name = "clang-sys" version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81de550971c976f176130da4b2978d3b524eaa0fd9ac31f3ceb5ae1231fb4853" dependencies = [ - "glob 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", - "libloading 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", + "glob", + "libc", + "libloading", ] [[package]] name = "clap" version = "2.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9" dependencies = [ - "ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", - "atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)", - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", + "ansi_term", + "atty", + "bitflags 1.2.1", + "strsim", + "textwrap", + "unicode-width", + "vec_map", ] [[package]] name = "cloudabi" version = "0.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 1.2.1", ] [[package]] name = "colored" version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4ffc801dacf156c5854b9df4f425a626539c3a6ef7893cc0c5084a23f0b6c59" dependencies = [ - "atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "atty", + "lazy_static", + "winapi 0.3.8", ] [[package]] name = "combine" version = "3.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da3da6baa321ec19e1cc41d31bf599f00c783d0517095cdaf0332e3fe8d20680" dependencies = [ - "ascii 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)", - "byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)", - "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "const-random" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "const-random-macro 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro-hack 0.5.15 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "const-random-macro" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "getrandom 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro-hack 0.5.15 (registry+https://github.com/rust-lang/crates.io-index)", + "ascii", + "byteorder 1.3.4", + "either 1.5.3", + "memchr", + "unreachable", ] [[package]] name = "conv" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ff10625fd0ac447827aa30ea8b861fead473bb60aeb73af6c1c58caf0d1299" dependencies = [ - "custom_derive 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "custom_derive", ] [[package]] name = "cookie" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" +version = "0.12.0" +source = "git+https://github.com/SergioBenitez/cookie-rs?rev=e0f3e6c#e0f3e6c4daea108d55838c56da777b36898bd223" dependencies = [ - "base64 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)", - "ring 0.13.5 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)", + "base64 0.10.1", + "percent-encoding 2.1.0", + "ring", + "time", ] [[package]] name = "cookie" version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "888604f00b3db336d2af898ec3c1d5d0ddf5e6d462220f2ededc33a87ac4bbd5" dependencies = [ - "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)", + "time", + "url 1.7.2", ] [[package]] name = "cookie_store" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46750b3f362965f197996c4448e4a0935e791bf7d6631bfce9ee0af3d24c919c" dependencies = [ "cookie 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", - "failure 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "publicsuffix 1.5.4 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.51 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", - "try_from 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)", + "failure", + "idna 0.1.5", + "log 0.4.8", + "publicsuffix", + "serde", + "serde_json", + "time", + "try_from", + "url 1.7.2", ] [[package]] name = "core-foundation" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57d24c7a13c43e870e37c1556b74555437870a04514f7685f5b354e090567171" dependencies = [ - "core-foundation-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", + "core-foundation-sys", + "libc", ] [[package]] name = "core-foundation-sys" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac" [[package]] name = "crc32fast" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba125de2af0df55319f41944744ad91c71113bf74a4646efff39afe1f6842db1" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if", ] [[package]] name = "crossbeam" version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd66663db5a988098a89599d4857919b3acf7f61402e61365acfd3919857b9be" [[package]] name = "crossbeam" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1c92ff2d7a202d592f5a412d75cf421495c913817781c1cb383bf12a77e185f" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-channel 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-deque 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-epoch 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.13.0 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if", + "crossbeam-channel", + "crossbeam-deque 0.6.3", + "crossbeam-epoch 0.6.1", + "crossbeam-utils 0.6.6", + "lazy_static", + "num_cpus", + "parking_lot 0.6.4", ] [[package]] name = "crossbeam-channel" version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8ec7fcd21571dc78f96cc96243cab8d8f035247c3efd16c687be154c3fa9efa" dependencies = [ - "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.6.6", ] [[package]] name = "crossbeam-deque" version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05e44b8cf3e1a625844d1750e1f7820da46044ff6d28f4d43e455ba3e5bb2c13" dependencies = [ - "crossbeam-epoch 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-epoch 0.7.2", + "crossbeam-utils 0.6.6", ] [[package]] name = "crossbeam-deque" version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f02af974daeee82218205558e51ec8768b48cf524bd01d550abe5573a608285" dependencies = [ - "crossbeam-epoch 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", - "maybe-uninit 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-epoch 0.8.2", + "crossbeam-utils 0.7.2", + "maybe-uninit", ] [[package]] name = "crossbeam-epoch" version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2449aaa4ec7ef96e5fb24db16024b935df718e9ae1cec0a1e68feeca2efca7b8" dependencies = [ - "arrayvec 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "arrayvec", + "cfg-if", + "crossbeam-utils 0.6.6", + "lazy_static", + "memoffset 0.2.1", + "scopeguard 0.3.3", ] [[package]] name = "crossbeam-epoch" version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fedcd6772e37f3da2a9af9bf12ebe046c0dfe657992377b4df982a2b54cd37a9" dependencies = [ - "arrayvec 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "memoffset 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", - "scopeguard 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "arrayvec", + "cfg-if", + "crossbeam-utils 0.6.6", + "lazy_static", + "memoffset 0.5.4", + "scopeguard 1.1.0", ] [[package]] name = "crossbeam-epoch" version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "058ed274caafc1f60c4997b5fc07bf7dc7cca454af7c6e81edffe5f33f70dace" dependencies = [ - "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "maybe-uninit 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "memoffset 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", - "scopeguard 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg 1.0.0", + "cfg-if", + "crossbeam-utils 0.7.2", + "lazy_static", + "maybe-uninit", + "memoffset 0.5.4", + "scopeguard 1.1.0", ] [[package]] name = "crossbeam-queue" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c695eeca1e7173472a32221542ae469b3e9aac3a4fc81f7696bcad82029493db" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if", + "crossbeam-utils 0.7.2", ] [[package]] name = "crossbeam-utils" version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04973fa96e96579258a5091af6003abde64af786b860f18622b82e026cca60e6" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if", + "lazy_static", ] [[package]] name = "crossbeam-utils" version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8" dependencies = [ - "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg 1.0.0", + "cfg-if", + "lazy_static", ] [[package]] name = "crunchy" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" [[package]] name = "ctrlc" version = "3.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a4ba686dff9fa4c1c9636ce1010b0cf98ceb421361b0bb3d6faeec43bd217a7" dependencies = [ - "nix 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "nix 0.17.0", + "winapi 0.3.8", ] [[package]] name = "custom_derive" version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef8ae57c4978a2acd8b869ce6b9ca1dfe817bff704c220209fdef2c0b75a01b9" [[package]] name = "data-encoding" -version = "2.1.2" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11c0346158a19b3627234e15596f5e465c360fcdb97d817bcb255e0510f5a788" [[package]] name = "dbghelp-sys" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97590ba53bcb8ac28279161ca943a924d1fd4a8fb3fa63302591647c4fc5b850" dependencies = [ - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8", + "winapi-build", ] [[package]] name = "debug-builders" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f5d8e3d14cabcb2a8a59d7147289173c6ada77a0bc526f6b85078f941c0cf12" [[package]] name = "debugtrace" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62e432bd83c5d70317f6ebd8a50ed4afb32907c64d6e2e1e65e339b06dc553f3" dependencies = [ - "backtrace 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", + "backtrace 0.1.8", ] [[package]] name = "derive_builder" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c998e6ab02a828dd9735c18f154e14100e674ed08cb4e1938f0e4177543f439" dependencies = [ - "derive_builder_core 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)", + "derive_builder_core", + "quote 0.3.15", + "syn 0.11.11", ] [[package]] name = "derive_builder_core" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "735e24ee9e5fa8e16b86da5007856e97d592e11867e45d76e0c0d0a164a0b757" dependencies = [ - "quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.3.15", + "syn 0.11.11", ] [[package]] name = "devise" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" +version = "0.3.0" +source = "git+https://github.com/SergioBenitez/Devise.git?rev=e58b3ac9a#e58b3ac9afc3b6ff10a8aaf02a3e768a8f530089" dependencies = [ - "devise_codegen 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "devise_core 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "devise_codegen", + "devise_core", ] [[package]] name = "devise_codegen" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" +version = "0.3.0" +source = "git+https://github.com/SergioBenitez/Devise.git?rev=e58b3ac9a#e58b3ac9afc3b6ff10a8aaf02a3e768a8f530089" dependencies = [ - "devise_core 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", + "devise_core", + "quote 1.0.4", ] [[package]] name = "devise_core" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" +version = "0.3.0" +source = "git+https://github.com/SergioBenitez/Devise.git?rev=e58b3ac9a#e58b3ac9afc3b6ff10a8aaf02a3e768a8f530089" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 1.2.1", + "proc-macro2 1.0.12", + "quote 1.0.4", + "syn 1.0.18", ] [[package]] name = "diesel" version = "1.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33d7ca63eb2efea87a7f56a283acc49e2ce4b2bd54adf7465dc1d81fef13d8fc" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "chrono 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", - "diesel_derives 1.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libsqlite3-sys 0.17.3 (registry+https://github.com/rust-lang/crates.io-index)", - "pq-sys 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "r2d2 0.8.8 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 1.2.1", + "byteorder 1.3.4", + "chrono", + "diesel_derives", + "libsqlite3-sys", + "pq-sys", + "r2d2", ] [[package]] name = "diesel-derive-newtype" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e844e8e6f65dcf27aa0b97d4234f974d93dfbf56816033d71b5e0c7eb701709f" dependencies = [ - "diesel 1.4.4 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.14.9 (registry+https://github.com/rust-lang/crates.io-index)", + "diesel", + "proc-macro2 0.4.30", + "quote 0.6.13", + "syn 0.14.9", ] [[package]] name = "diesel_derives" version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45f5098f628d02a7a0f68ddba586fb61e80edec3bdc1be3b921f4ceec60858d3" dependencies = [ - "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.12", + "quote 1.0.4", + "syn 1.0.18", ] [[package]] name = "diesel_migrations" version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf3cde8413353dc7f5d72fa8ce0b99a560a359d2c5ef1e5817ca731cd9008f4c" dependencies = [ - "migrations_internals 1.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "migrations_macros 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "migrations_internals", + "migrations_macros", ] [[package]] name = "discard" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "212d0f5754cb6769937f4501cc0e67f4f4483c8d2c3e1e922ee9edbe4ab4c7c0" [[package]] name = "dotenv" version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4424bad868b0ffe6ae351ee463526ba625bbca817978293bbe6bb7dc1804a175" dependencies = [ - "failure 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 1.3.7 (registry+https://github.com/rust-lang/crates.io-index)", + "failure", + "lazy_static", + "regex", ] [[package]] name = "downcast-rs" version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52ba6eb47c2131e784a38b726eb54c1e1484904f013e576a25354d0124161af6" [[package]] name = "dtoa" version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4358a9e11b9a09cf52383b451b49a169e8d797b68aa02301ff586d70d9661ea3" [[package]] name = "either" version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a39bffec1e2015c5d8a6773cb0cf48d0d758c842398f624c34969071f5499ea7" [[package]] name = "either" version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3" [[package]] name = "email" version = "0.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91549a51bb0241165f13d57fc4c72cef063b4088fb078b019ecbf464a45f22e4" dependencies = [ - "base64 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)", - "chrono 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", - "encoding 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", - "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "base64 0.9.3", + "chrono", + "encoding", + "lazy_static", + "rand 0.4.6", + "time", + "version_check 0.1.5", ] [[package]] name = "encoding" version = "0.2.33" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b0d943856b990d12d3b55b359144ff341533e516d94098b1d3fc1ac666d36ec" dependencies = [ - "encoding-index-japanese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)", - "encoding-index-korean 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)", - "encoding-index-simpchinese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)", - "encoding-index-singlebyte 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)", - "encoding-index-tradchinese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)", + "encoding-index-japanese", + "encoding-index-korean", + "encoding-index-simpchinese", + "encoding-index-singlebyte", + "encoding-index-tradchinese", ] [[package]] name = "encoding-index-japanese" version = "1.20141219.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04e8b2ff42e9a05335dbf8b5c6f7567e5591d0d916ccef4e0b1710d32a0d0c91" dependencies = [ - "encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "encoding_index_tests", ] [[package]] name = "encoding-index-korean" version = "1.20141219.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4dc33fb8e6bcba213fe2f14275f0963fd16f0a02c878e3095ecfdf5bee529d81" dependencies = [ - "encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "encoding_index_tests", ] [[package]] name = "encoding-index-simpchinese" version = "1.20141219.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d87a7194909b9118fc707194baa434a4e3b0fb6a5a757c73c3adb07aa25031f7" dependencies = [ - "encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "encoding_index_tests", ] [[package]] name = "encoding-index-singlebyte" version = "1.20141219.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3351d5acffb224af9ca265f435b859c7c01537c0849754d3db3fdf2bfe2ae84a" dependencies = [ - "encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "encoding_index_tests", ] [[package]] name = "encoding-index-tradchinese" version = "1.20141219.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd0e20d5688ce3cab59eb3ef3a2083a5c77bf496cb798dc6fcdb75f323890c18" dependencies = [ - "encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "encoding_index_tests", ] [[package]] name = "encoding_index_tests" version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a246d82be1c9d791c5dfde9a2bd045fc3cbba3fa2b11ad558f27d01712f00569" [[package]] name = "encoding_rs" version = "0.8.22" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd8d03faa7fe0c1431609dfad7bbe827af30f82e1e2ae6f7ee4fca6bd764bc28" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if", ] [[package]] name = "env_logger" version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aafcde04e90a5226a6443b7aabdb016ba2f8307c847d524724bd9b346dd1a2d3" dependencies = [ - "atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)", - "humantime 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 1.3.7 (registry+https://github.com/rust-lang/crates.io-index)", - "termcolor 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "atty", + "humantime", + "log 0.4.8", + "regex", + "termcolor", ] [[package]] name = "error-chain" version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d371106cc88ffdfb1eabd7111e432da544f16f3e2d7bf1dfe8bf575f1df045cd" dependencies = [ - "backtrace 0.3.46 (registry+https://github.com/rust-lang/crates.io-index)", - "version_check 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "backtrace 0.3.46", + "version_check 0.9.1", ] [[package]] name = "fail" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f63eec71a3013ee912a0ecb339ff0c5fa5ed9660df04bfefa10c250b885d018c" dependencies = [ - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static", + "log 0.4.8", + "rand 0.6.5", ] [[package]] name = "failure" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d32e9bd16cc02eae7db7ef620b392808b89f6a5e16bb3497d159c6b92a0f4f86" dependencies = [ - "backtrace 0.3.46 (registry+https://github.com/rust-lang/crates.io-index)", - "failure_derive 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "backtrace 0.3.46", + "failure_derive", ] [[package]] name = "failure_derive" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4" dependencies = [ - "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", - "synstructure 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.12", + "quote 1.0.4", + "syn 1.0.18", + "synstructure", ] [[package]] name = "fast_chemail" version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "495a39d30d624c2caabe6312bfead73e7717692b44e0b32df168c275a2e8e9e4" dependencies = [ - "ascii_utils 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)", + "ascii_utils", ] [[package]] name = "filetime" version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f59efc38004c988e4201d11d263b8171f49a2e7ec0bdbb71773433f271504a5e" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", - "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if", + "libc", + "redox_syscall", + "winapi 0.3.8", ] [[package]] name = "flate2" version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2cfff41391129e0a856d6d822600b8d71179d46879e310417eb9c762eb178b42" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", - "miniz_oxide 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if", + "crc32fast", + "libc", + "miniz_oxide", ] [[package]] name = "fnv" version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" [[package]] name = "foreign-types" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" dependencies = [ - "foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "foreign-types-shared", ] [[package]] name = "foreign-types-shared" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "fs2" version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213" dependencies = [ - "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "libc", + "winapi 0.3.8", ] [[package]] name = "fsevent" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ab7d1bd1bd33cc98b0889831b72da23c0aa4df9cec7e0702f46ecea04b35db6" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "fsevent-sys 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 1.2.1", + "fsevent-sys", ] [[package]] name = "fsevent-sys" version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f41b048a94555da0f42f1d632e2e19510084fb8e303b0daa2816e733fb3644a0" dependencies = [ - "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", + "libc", ] [[package]] name = "fst" version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "927fb434ff9f0115b215dc0efd2e4fbdd7448522a92a1aa37c77d6a2f8f1ebd6" dependencies = [ - "byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.3.4", ] [[package]] name = "fuchsia-cprng" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" [[package]] name = "fuchsia-zircon" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 1.2.1", + "fuchsia-zircon-sys", ] [[package]] name = "fuchsia-zircon-sys" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" [[package]] name = "futf" version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c9c1ce3fa9336301af935ab852c437817d14cd33690446569392e65170aac3b" dependencies = [ - "mac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "new_debug_unreachable 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "mac", + "new_debug_unreachable", ] [[package]] name = "futures" version = "0.1.29" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b980f2816d6ee8673b6517b52cb0e808a180efc92e5c19d02cdda79066703ef" + +[[package]] +name = "futures" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c329ae8753502fb44ae4fc2b622fa2a94652c41e795143765ba0927f92ab780" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0c77d04ce8edd9cb903932b608268b3fffec4163dc053b3b402bf47eac1f1a8" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f25592f769825e89b92358db00d26f965761e094951ac44d3663ef25b7ac464a" [[package]] name = "futures-cpupool" version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab90cde24b3319636588d0c35fe03b1333857621051837ed769faefb4c2162e4" +dependencies = [ + "futures 0.1.29", + "num_cpus", +] + +[[package]] +name = "futures-executor" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f674f3e1bcb15b37284a90cedf55afdba482ab061c407a9c0ebbd0f3109741ba" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a638959aa96152c7a4cddf50fcb1e3fede0583b27157c26e67d6f99904090dc6" + +[[package]] +name = "futures-macro" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a5081aa3de1f7542a794a397cde100ed903b0630152d0973479018fd85423a7" +dependencies = [ + "proc-macro-hack 0.5.15", + "proc-macro2 1.0.12", + "quote 1.0.4", + "syn 1.0.18", +] + +[[package]] +name = "futures-sink" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3466821b4bc114d95b087b850a724c6f83115e929bc88f1fa98a3304a944c8a6" + +[[package]] +name = "futures-task" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b0a34e53cf6cdcd0178aa573aed466b646eb3db769570841fda0c7ede375a27" + +[[package]] +name = "futures-util" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22766cf25d64306bedf0384da004d05c9974ab104fcc4528f1236181c18004c5" dependencies = [ - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.13.0 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-utils", + "proc-macro-hack 0.5.15", + "proc-macro-nested", + "slab", ] [[package]] name = "fxhash" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" dependencies = [ - "byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.3.4", ] [[package]] name = "generic-array" version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c68f0274ae0e023facc3c97b2e00f076be70e254bc851d972503b328db79b2ec" dependencies = [ - "typenum 1.12.0 (registry+https://github.com/rust-lang/crates.io-index)", + "typenum", ] [[package]] name = "getrandom" version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7abc8dd8451921606d809ba32e95b6111925cd2906060d2dcc29c070220503eb" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", - "wasi 0.9.0+wasi-snapshot-preview1 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if", + "libc", + "wasi", ] [[package]] @@ -1111,8 +1333,18 @@ name = "gettext" version = "0.3.0" source = "git+https://github.com/Plume-org/gettext/?rev=294c54d74c699fbc66502b480a37cc66c1daa7f3#294c54d74c699fbc66502b480a37cc66c1daa7f3" dependencies = [ - "byteorder 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "encoding 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 0.4.2", + "encoding", +] + +[[package]] +name = "gettext" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ebb594e753d5997e4be036e5a8cf048ab9414352870fb45c779557bbc9ba971" +dependencies = [ + "byteorder 1.3.4", + "encoding", ] [[package]] @@ -1120,8 +1352,8 @@ name = "gettext-macros" version = "0.4.0" source = "git+https://github.com/Plume-org/gettext-macros/?rev=a7c605f7edd6bfbfbfe7778026bfefd88d82db10#a7c605f7edd6bfbfbfe7778026bfefd88d82db10" dependencies = [ - "gettext 0.3.0 (git+https://github.com/Plume-org/gettext/?rev=294c54d74c699fbc66502b480a37cc66c1daa7f3)", - "gettext-utils 0.1.0 (git+https://github.com/Plume-org/gettext-macros/?rev=a7c605f7edd6bfbfbfe7778026bfefd88d82db10)", + "gettext 0.3.0", + "gettext-utils", ] [[package]] @@ -1133,3208 +1365,3237 @@ source = "git+https://github.com/Plume-org/gettext-macros/?rev=a7c605f7edd6bfbfb name = "glob" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" [[package]] name = "guid" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e691c64d9b226c7597e29aeb46be753beb8c9eeef96d8c78dfd4d306338a38da" dependencies = [ - "chomp 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "failure 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "failure_derive 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "guid-macro-impl 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "guid-parser 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro-hack 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "chomp", + "failure", + "failure_derive", + "guid-macro-impl", + "guid-parser", + "proc-macro-hack 0.4.2", + "winapi 0.2.8", ] [[package]] name = "guid-create" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcea207bf7a6092166ab590f98fe5dde5a7deed1f1920d98dcac31f80814c40d" dependencies = [ - "byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "chomp 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "guid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "guid-parser 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.3.4", + "chomp", + "guid", + "guid-parser", + "rand 0.5.6", + "winapi 0.3.8", ] [[package]] name = "guid-macro-impl" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d50f7c496073b5a5dec0f6f1c149113a50960ce25dd2a559987a5a71190816" dependencies = [ - "chomp 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "guid-parser 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro-hack 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.12.15 (registry+https://github.com/rust-lang/crates.io-index)", + "chomp", + "guid-parser", + "proc-macro-hack 0.4.2", + "quote 0.4.2", + "syn 0.12.15", ] [[package]] name = "guid-parser" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abc7adb441828023999e6cff9eb1ea63156f7ec37ab5bf690005e8fc6c1148ad" dependencies = [ - "chomp 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "chomp", + "winapi 0.2.8", ] [[package]] name = "h2" version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5b34c246847f938a410a03c5458c7fee2274436675e76d8b903c08efc29c462" dependencies = [ - "byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "http 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", - "indexmap 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "string 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.3.4", + "bytes 0.4.12", + "fnv", + "futures 0.1.29", + "http 0.1.21", + "indexmap", + "log 0.4.8", + "slab", + "string", + "tokio-io", +] + +[[package]] +name = "h2" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "377038bf3c89d18d6ca1431e7a5027194fbd724ca10592b9487ede5e8e144f42" +dependencies = [ + "bytes 0.5.4", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http 0.2.1", + "indexmap", + "log 0.4.8", + "slab", + "tokio 0.2.20", + "tokio-util", ] [[package]] name = "hashbrown" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96282e96bfcd3da0d3aa9938bedf1e50df3269b6db08b4876d2da0bb1a0841cf" dependencies = [ - "ahash 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "ahash", + "autocfg 1.0.0", ] [[package]] name = "heck" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205" dependencies = [ - "unicode-segmentation 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-segmentation", ] [[package]] name = "hermit-abi" -version = "0.1.11" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61565ff7aaace3525556587bd2dc31d4a07071957be715e63ce7b1eccf51a8f4" dependencies = [ - "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", + "libc", ] [[package]] name = "hex" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "805026a5d0141ffc30abb3be3173848ad46a1b1664fe632428479619a3644d77" [[package]] name = "hostname" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21ceb46a83a85e824ef93669c8b390009623863b5c195d1ba747292c0c72f94e" dependencies = [ - "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", - "winutil 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "libc", + "winutil", ] [[package]] name = "html5ever" version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ce65ac8028cf5a287a7dbf6c4e0a6cf2dcf022ed5b167a81bae66ebf599a8b7" dependencies = [ - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "mac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "markup5ever 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.8", + "mac", + "markup5ever", + "proc-macro2 0.4.30", + "quote 0.6.13", + "syn 0.15.44", ] [[package]] name = "htmlescape" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9025058dae765dee5070ec375f591e2ba14638c63feff74f13805a72e523163" [[package]] name = "http" version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6ccf5ede3a895d8856620237b2f02972c1bbc78d2965ad7fe8838d4a0ed41f0" +dependencies = [ + "bytes 0.4.12", + "fnv", + "itoa", +] + +[[package]] +name = "http" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d569972648b2c512421b5f2a405ad6ac9666547189d0c5477a3f200f3e02f9" dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "itoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.5.4", + "fnv", + "itoa", ] [[package]] name = "http-body" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6741c859c1b2463a423a1dbce98d418e6c3c3fc720fb0d45528657320920292d" dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "http 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-buf 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.12", + "futures 0.1.29", + "http 0.1.21", + "tokio-buf", +] + +[[package]] +name = "http-body" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13d5ff830006f7646652e057693569bfe0d51760c0085a071769d142a205111b" +dependencies = [ + "bytes 0.5.4", + "http 0.2.1", ] [[package]] name = "httparse" version = "1.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd179ae861f0c2e53da70d892f5f3029f9594be0c41dc5269cd371691b1dc2f9" [[package]] name = "humantime" version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f" dependencies = [ - "quick-error 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "quick-error", ] [[package]] name = "hyper" -version = "0.10.16" +version = "0.12.35" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "base64 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)", - "httparse 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "language-tags 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "mime 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.13.0 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", - "traitobject 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "typeable 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)", +checksum = "9dbe6ed1438e1f8ad955a4701e9a944938e9519f6888d12d8558b645e247d5f6" +dependencies = [ + "bytes 0.4.12", + "futures 0.1.29", + "futures-cpupool", + "h2 0.1.26", + "http 0.1.21", + "http-body 0.1.0", + "httparse", + "iovec", + "itoa", + "log 0.4.8", + "net2", + "rustc_version", + "time", + "tokio 0.1.22", + "tokio-buf", + "tokio-executor", + "tokio-io", + "tokio-reactor", + "tokio-tcp", + "tokio-threadpool", + "tokio-timer", + "want 0.2.0", ] [[package]] name = "hyper" -version = "0.12.35" +version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96816e1d921eca64d208a85aab4f7798455a8e34229ee5a88c935bdee1b78b14" dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-cpupool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", - "h2 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)", - "http 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", - "http-body 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "httparse 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "itoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-buf 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-tcp 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-threadpool 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-timer 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", - "want 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.5.4", + "futures-channel", + "futures-core", + "futures-util", + "h2 0.2.4", + "http 0.2.1", + "http-body 0.3.1", + "httparse", + "itoa", + "log 0.4.8", + "pin-project", + "time", + "tokio 0.2.20", + "tower-service", + "want 0.3.0", ] [[package]] name = "hyper-tls" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a800d6aa50af4b5850b2b0f659625ce9504df908e9733b635720483be26174f" dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper 0.12.35 (registry+https://github.com/rust-lang/crates.io-index)", - "native-tls 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.12", + "futures 0.1.29", + "hyper 0.12.35", + "native-tls", + "tokio-io", ] [[package]] name = "idna" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e" dependencies = [ - "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-normalization 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "matches", + "unicode-bidi", + "unicode-normalization", ] [[package]] name = "idna" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02e2673c30ee86b5b96a9cb52ad15718aa1f966f5ab9ad54a8b95d5ca33120a9" dependencies = [ - "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-normalization 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "matches", + "unicode-bidi", + "unicode-normalization", ] [[package]] name = "if_chain" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bac95d9aa0624e7b78187d6fb8ab012b41d9f6f54b1bcb61e61c4845f8357ec" [[package]] name = "indexmap" version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "076f042c5b7b98f31d205f1249267e12a6518c1481e9dae9764af19b707d2292" dependencies = [ - "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg 1.0.0", ] [[package]] name = "inotify" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24e40d6fd5d64e2082e0c796495c8ef5ad667a96d03e5aaa0becfd9d47bcbfb8" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "inotify-sys 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 1.2.1", + "inotify-sys", + "libc", ] [[package]] name = "inotify-sys" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e74a1aa87c59aeff6ef2cc2fa62d41bc43f54952f55652656b18a02fd5e356c0" dependencies = [ - "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", + "libc", ] [[package]] name = "iovec" version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e" dependencies = [ - "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", + "libc", ] [[package]] name = "itertools" version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f56a2d0bc861f9165be4eb3442afd3c236d8a98afd426f65d92324ae1091a484" dependencies = [ - "either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)", + "either 1.5.3", ] [[package]] name = "itoa" version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8b7a7c0c47db5545ed3fef7468ee7bb5b74691498139e4b3f6a20685dc6dd8e" [[package]] -name = "kernel32-sys" -version = "0.2.2" +name = "js-sys" +version = "0.3.39" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa5a448de267e7358beaf4a5d849518fe9a0c13fce7afd44b06e68550e5562a7" dependencies = [ - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "wasm-bindgen", ] [[package]] -name = "language-tags" +name = "kernel32-sys" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +dependencies = [ + "winapi 0.2.8", + "winapi-build", +] [[package]] name = "lazy_static" version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "lazycell" version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b294d6fa9ee409a054354afc4352b0b9ef7ca222c69b8812cbea9e7d2bf3783f" [[package]] name = "lettre" -version = "0.9.2" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf43f3202a879fbdab4ecafec3349b0139f81d31c626246d53bcbb546253ffaa" dependencies = [ - "base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)", - "bufstream 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "fast_chemail 0.9.6 (registry+https://github.com/rust-lang/crates.io-index)", - "hostname 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "native-tls 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.51 (registry+https://github.com/rust-lang/crates.io-index)", + "base64 0.10.1", + "bufstream", + "fast_chemail", + "hostname", + "log 0.4.8", + "native-tls", + "nom 4.2.3", + "serde", + "serde_derive", + "serde_json", ] [[package]] name = "lettre_email" -version = "0.9.2" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd02480f8dcf48798e62113974d6ccca2129a51d241fa20f1ea349c8a42559d5" dependencies = [ - "base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)", - "email 0.0.20 (registry+https://github.com/rust-lang/crates.io-index)", - "lettre 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)", - "mime 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", - "uuid 0.7.4 (registry+https://github.com/rust-lang/crates.io-index)", + "base64 0.10.1", + "email", + "lettre", + "mime 0.3.16", + "time", + "uuid", ] [[package]] name = "levenshtein_automata" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73a004f877f468548d8d0ac4977456a249d8fabbdb8416c36db163dfc8f2e8ca" dependencies = [ - "fst 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "fst", ] [[package]] name = "lexical-core" version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7043aa5c05dd34fb73b47acb8c3708eac428de4545ea3682ed2f11293ebd890" dependencies = [ - "arrayvec 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "ryu 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "static_assertions 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "arrayvec", + "cfg-if", + "rustc_version", + "ryu", + "static_assertions", ] [[package]] name = "libc" version = "0.2.69" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99e85c08494b21a9054e7fe1374a732aeadaff3980b6990b94bfd3a70f690005" [[package]] name = "libloading" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2b111a074963af1d37a139918ac6d49ad1d0d5e47f72fd55388619691a7d753" dependencies = [ - "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "cc", + "winapi 0.3.8", ] [[package]] name = "libsqlite3-sys" version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56d90181c2904c287e5390186be820e5ef311a3c62edebb7d6ca3d6a48ce041d" dependencies = [ - "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", - "vcpkg 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "pkg-config", + "vcpkg", ] [[package]] name = "line-wrap" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f30344350a2a51da54c1d53be93fade8a237e545dbcc4bdbe635413f2117cab9" dependencies = [ - "safemem 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "safemem", ] [[package]] name = "linked-hash-map" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8dd5a6d5999d9907cda8ed67bbd137d3af8085216c2ac62de5be860bd41f304a" [[package]] name = "lock_api" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62ebf1391f6acad60e5c8b43706dde4582df75c06698ab44511d15016bc2442c" dependencies = [ - "owning_ref 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "owning_ref", + "scopeguard 0.3.3", ] [[package]] name = "lock_api" version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4da24a77a3d8a6d4862d95f72e6fdb9c09a643ecdb402d754004a557f2bec75" dependencies = [ - "scopeguard 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "scopeguard 1.1.0", ] [[package]] name = "log" version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b" dependencies = [ - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.8", ] [[package]] name = "log" version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if", ] [[package]] name = "mac" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" [[package]] name = "maplit" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" [[package]] name = "markup5ever" version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1af46a727284117e09780d05038b1ce6fc9c76cc6df183c3dae5a8955a25e21" dependencies = [ - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "phf 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)", - "phf_codegen 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.51 (registry+https://github.com/rust-lang/crates.io-index)", - "string_cache 0.7.5 (registry+https://github.com/rust-lang/crates.io-index)", - "string_cache_codegen 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", - "tendril 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.8", + "phf", + "phf_codegen", + "serde", + "serde_derive", + "serde_json", + "string_cache", + "string_cache_codegen", + "tendril", ] [[package]] name = "matches" version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" [[package]] name = "maybe-uninit" version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" [[package]] name = "md5" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771" [[package]] name = "memchr" version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3728d817d99e5ac407411fa471ff9800a778d88a24685968b36824eaf4bee400" [[package]] name = "memmap" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6585fd95e7bb50d6cc31e20d4cf9afb4e2ba16c5846fc76793f11218da9c475b" dependencies = [ - "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "libc", + "winapi 0.3.8", ] [[package]] name = "memoffset" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f9dc261e2b62d7a622bf416ea3c5245cdd5d9a7fcc428c0d06804dfce1775b3" [[package]] name = "memoffset" version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4fc2c02a7e374099d4ee95a193111f72d2110197fe200272371758f6c3643d8" dependencies = [ - "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg 1.0.0", ] [[package]] name = "migrations_internals" version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b4fc84e4af020b837029e017966f86a1c2d5e83e64b589963d5047525995860" dependencies = [ - "diesel 1.4.4 (registry+https://github.com/rust-lang/crates.io-index)", + "diesel", ] [[package]] name = "migrations_macros" version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9753f12909fd8d923f75ae5c3258cae1ed3c8ec052e1b38c93c21a6d157f789c" dependencies = [ - "migrations_internals 1.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", + "migrations_internals", + "proc-macro2 1.0.12", + "quote 1.0.4", + "syn 1.0.18", ] [[package]] name = "mime" version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba626b8a6de5da682e1caa06bdb42a335aee5a84db8e5046a3e8ab17ba0a3ae0" dependencies = [ - "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.9", ] [[package]] name = "mime" version = "0.3.16" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" [[package]] name = "mime_guess" version = "1.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "216929a5ee4dd316b1702eedf5e74548c123d370f47841ceaac38ca154690ca3" dependencies = [ - "mime 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", - "phf 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)", - "phf_codegen 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)", - "unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "mime 0.2.6", + "phf", + "phf_codegen", + "unicase 1.4.2", ] [[package]] name = "mime_guess" version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2684d4c2e97d99848d30b324b00c8fcc7e5c897b7cbb5819b09e7c90e8baf212" dependencies = [ - "mime 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", - "unicase 2.6.0 (registry+https://github.com/rust-lang/crates.io-index)", + "mime 0.3.16", + "unicase 2.6.0", ] [[package]] name = "miniz_oxide" version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa679ff6578b1cddee93d7e82e263b94a575e0bfced07284eb0c037c1d2416a5" dependencies = [ - "adler32 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "adler32", ] [[package]] name = "mio" -version = "0.6.21" +version = "0.6.22" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fce347092656428bc8eaf6201042cb551b8d67855af7374542a92a0fbfcac430" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if", + "fuchsia-zircon", + "fuchsia-zircon-sys", + "iovec", + "kernel32-sys", + "libc", + "log 0.4.8", + "miow", + "net2", + "slab", + "winapi 0.2.8", ] [[package]] name = "mio-extras" version = "2.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52403fe290012ce777c4626790c8951324a2b9e3316b3143779c72b029742f19" dependencies = [ - "lazycell 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "lazycell", + "log 0.4.8", + "mio", + "slab", ] [[package]] name = "mio-uds" -version = "0.6.7" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afcb699eb26d4332647cc848492bbc15eafb26f08d0304550d5aa1f612e066f0" dependencies = [ - "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)", + "iovec", + "libc", + "mio", ] [[package]] name = "miow" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919" dependencies = [ - "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "kernel32-sys", + "net2", + "winapi 0.2.8", + "ws2_32-sys", ] [[package]] name = "multipart" version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "136eed74cadb9edd2651ffba732b19a450316b680e4f48d6c79e905799e19d01" dependencies = [ - "buf_redux 0.8.4 (registry+https://github.com/rust-lang/crates.io-index)", - "httparse 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "mime 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", - "mime_guess 1.8.8 (registry+https://github.com/rust-lang/crates.io-index)", - "quick-error 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", - "safemem 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "twoway 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", + "buf_redux", + "httparse", + "log 0.4.8", + "mime 0.2.6", + "mime_guess 1.8.8", + "quick-error", + "rand 0.6.5", + "safemem", + "tempfile", + "twoway", ] [[package]] name = "murmurhash32" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d736ff882f0e85fe9689fb23db229616c4c00aee2b3ac282f666d8f20eb25d4a" dependencies = [ - "byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.3.4", ] [[package]] name = "native-tls" version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b0d88c06fe90d5ee94048ba40409ef1d9315d86f6f38c2efdaad4fb50c58b2d" dependencies = [ - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "openssl 0.10.29 (registry+https://github.com/rust-lang/crates.io-index)", - "openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "openssl-sys 0.9.55 (registry+https://github.com/rust-lang/crates.io-index)", - "schannel 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)", - "security-framework 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "security-framework-sys 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static", + "libc", + "log 0.4.8", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", ] [[package]] name = "net2" -version = "0.2.33" +version = "0.2.34" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ba7c918ac76704fb42afcbbb43891e72731f3dcca3bef2a19786297baf14af7" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if", + "libc", + "winapi 0.3.8", ] [[package]] name = "new_debug_unreachable" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" [[package]] name = "nix" version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c722bee1037d430d0f8e687bbdbf222f27cc6e4e68d5caf630857bb2b6dbdce" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", - "void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 1.2.1", + "cc", + "cfg-if", + "libc", + "void", ] [[package]] name = "nix" version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50e4785f2c3b7589a0d0c1dd60285e1188adac4006e8abd6dd578e1567027363" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", - "void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 1.2.1", + "cc", + "cfg-if", + "libc", + "void", ] [[package]] name = "nodrop" version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" [[package]] name = "nom" version = "4.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ad2a91a8e869eeb30b9cb3119ae87773a8f4ae617f41b1eb9c154b2905f7bd6" dependencies = [ - "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr", + "version_check 0.1.5", ] [[package]] name = "nom" version = "5.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b471253da97532da4b61552249c521e01e736071f71c1a4f7ebbfbf0a06aad6" dependencies = [ - "lexical-core 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", - "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "version_check 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "lexical-core", + "memchr", + "version_check 0.9.1", ] [[package]] name = "notify" version = "4.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80ae4a7688d1fab81c5bf19c64fc8db920be8d519ce6336ed4e7efe024724dbd" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "filetime 0.2.9 (registry+https://github.com/rust-lang/crates.io-index)", - "fsevent 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "fsevent-sys 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "inotify 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)", - "mio-extras 2.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "walkdir 2.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 1.2.1", + "filetime", + "fsevent", + "fsevent-sys", + "inotify", + "libc", + "mio", + "mio-extras", + "walkdir", + "winapi 0.3.8", ] [[package]] name = "num-integer" version = "0.1.42" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f6ea62e9d81a77cd3ee9a2a5b9b609447857f3d358704331e4ef39eb247fcba" dependencies = [ - "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg 1.0.0", + "num-traits", ] [[package]] name = "num-rational" version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c000134b5dbf44adc5cb772486d335293351644b801551abe8f75c84cfa4aef" dependencies = [ - "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "num-integer 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg 1.0.0", + "num-integer", + "num-traits", ] [[package]] name = "num-traits" version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c62be47e61d1842b9170f0fdeec8eba98e60e90e5446449a0545e5152acd7096" dependencies = [ - "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg 1.0.0", ] [[package]] name = "num_cpus" version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3" dependencies = [ - "hermit-abi 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", + "hermit-abi", + "libc", ] [[package]] name = "once_cell" version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d584f08c2d717d5c23a6414fc2822b71c651560713e54fa7eace675f758a355e" dependencies = [ - "parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.9.0", ] +[[package]] +name = "once_cell" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1c601810575c99596d4afc46f78a678c80105117c379eb3650cf99b8a21ce5b" + [[package]] name = "onig" version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4e723fc996fff1aeab8f62205f3e8528bf498bdd5eadb2784d2d31f30077947" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", - "onig_sys 69.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 1.2.1", + "lazy_static", + "libc", + "onig_sys", ] [[package]] name = "onig_sys" version = "69.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a8d4efbf5f59cece01f539305191485b651acb3785b9d5eef05749f0496514e" dependencies = [ - "bindgen 0.50.1 (registry+https://github.com/rust-lang/crates.io-index)", - "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)", - "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", + "bindgen", + "cc", + "pkg-config", ] [[package]] name = "opaque-debug" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" [[package]] name = "openssl" version = "0.10.29" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cee6d85f4cb4c4f59a6a85d5b68a233d280c82e29e822913b9c8b129fbf20bdd" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", - "openssl-sys 0.9.55 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 1.2.1", + "cfg-if", + "foreign-types", + "lazy_static", + "libc", + "openssl-sys", ] [[package]] name = "openssl-probe" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de" [[package]] name = "openssl-sys" version = "0.9.55" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7717097d810a0f2e2323f9e5d11e71608355e24828410b55b9d4f18aa5f9a5d8" dependencies = [ - "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", - "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", - "vcpkg 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg 1.0.0", + "cc", + "libc", + "pkg-config", + "vcpkg", ] [[package]] name = "owned-read" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b66d1e235abcebc845cf93550b89b74f468c051496fafb433ede4104b9f71ba1" dependencies = [ - "stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "stable_deref_trait", ] [[package]] name = "owning_ref" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ff55baddef9e4ad00f88b6c743a2a8062d4c6ade126c2a528644b8e444d52ce" dependencies = [ - "stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "stable_deref_trait", ] [[package]] name = "parking_lot" version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0802bff09003b291ba756dc7e79313e51cc31667e94afbe847def490424cde5" dependencies = [ - "lock_api 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "lock_api 0.1.5", + "parking_lot_core 0.3.1", ] [[package]] name = "parking_lot" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f842b1982eb6c2fe34036a4fbfb06dd185a3f5c8edfaacdf7d1ea10b07de6252" dependencies = [ - "lock_api 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot_core 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "lock_api 0.3.4", + "parking_lot_core 0.6.2", + "rustc_version", ] [[package]] name = "parking_lot" version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3a704eb390aafdc107b0e392f56a82b668e3a71366993b5340f5833fd62505e" dependencies = [ - "lock_api 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot_core 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "lock_api 0.3.4", + "parking_lot_core 0.7.2", ] [[package]] name = "parking_lot_core" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad7f7e6ebdc79edff6fdcb87a55b620174f7a989e3eb31b65231f4af57f00b8c" dependencies = [ - "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "smallvec 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "libc", + "rand 0.5.6", + "rustc_version", + "smallvec 0.6.13", + "winapi 0.3.8", ] [[package]] name = "parking_lot_core" version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b876b1b9e7ac6e1a74a6da34d25c42e17e8862aa409cbbbdcfc8d86c6f3bc62b" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", - "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "smallvec 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if", + "cloudabi", + "libc", + "redox_syscall", + "rustc_version", + "smallvec 0.6.13", + "winapi 0.3.8", ] [[package]] name = "parking_lot_core" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d58c7c768d4ba344e3e8d72518ac13e259d7c7ade24167003b8488e10b6740a3" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", - "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)", - "smallvec 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if", + "cloudabi", + "libc", + "redox_syscall", + "smallvec 1.4.0", + "winapi 0.3.8", ] [[package]] name = "pear" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c26d2b92e47063ffce70d3e3b1bd097af121a9e0db07ca38a6cc1cf0cc85ff25" dependencies = [ - "pear_codegen 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "pear_codegen", ] [[package]] name = "pear_codegen" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "336db4a192cc7f54efeb0c4e11a9245394824cc3bcbd37ba3ff51240c35d7a6e" dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)", - "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "yansi 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.4.30", + "quote 0.6.13", + "syn 0.15.44", + "version_check 0.1.5", + "yansi 0.4.0", ] [[package]] name = "peeking_take_while" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" [[package]] name = "percent-encoding" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" [[package]] name = "percent-encoding" version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" [[package]] name = "phf" version = "0.7.24" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3da44b85f8e8dfaec21adae67f95d93244b2ecf6ad2a692320598dcc8e6dd18" dependencies = [ - "phf_shared 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)", + "phf_shared", ] [[package]] name = "phf_codegen" version = "0.7.24" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b03e85129e324ad4166b06b2c7491ae27fe3ec353af72e72cd1654c7225d517e" dependencies = [ - "phf_generator 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)", - "phf_shared 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)", + "phf_generator", + "phf_shared", ] [[package]] name = "phf_generator" version = "0.7.24" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09364cc93c159b8b06b1f4dd8a4398984503483891b0c26b867cf431fb132662" dependencies = [ - "phf_shared 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "phf_shared", + "rand 0.6.5", ] [[package]] name = "phf_shared" version = "0.7.24" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "234f71a15de2288bcb7e3b6515828d22af7ec8598ee6d24c3b526fa0a80b67a0" dependencies = [ - "siphasher 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "siphasher", + "unicase 1.4.2", ] +[[package]] +name = "pin-project" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36e3dcd42688c05a66f841d22c5d8390d9a5d4c9aaf57b9285eae4900a080063" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4d7346ac577ff1296e06a418e7618e22655bae834d4970cb6e39d6da8119969" +dependencies = [ + "proc-macro2 1.0.12", + "quote 1.0.4", + "syn 1.0.18", +] + +[[package]] +name = "pin-project-lite" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "237844750cfbb86f67afe27eee600dfbbcb6188d734139b534cbfbf4f96792ae" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + [[package]] name = "pkg-config" version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05da548ad6865900e60eaba7f589cc0783590a92e940c26953ff81ddbab2d677" [[package]] name = "plist" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f2a9f075f6394100e7c105ed1af73fb1859d6fd14e49d4290d578120beb167f" dependencies = [ - "base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)", - "byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "humantime 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "line-wrap 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "xml-rs 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", + "base64 0.10.1", + "byteorder 1.3.4", + "humantime", + "line-wrap", + "serde", + "xml-rs", ] [[package]] name = "plume" version = "0.4.0" dependencies = [ - "activitypub 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "askama_escape 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "atom_syndication 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "chrono 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", - "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)", - "colored 1.9.3 (registry+https://github.com/rust-lang/crates.io-index)", - "ctrlc 3.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "diesel 1.4.4 (registry+https://github.com/rust-lang/crates.io-index)", - "dotenv 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)", - "gettext 0.3.0 (git+https://github.com/Plume-org/gettext/?rev=294c54d74c699fbc66502b480a37cc66c1daa7f3)", - "gettext-macros 0.4.0 (git+https://github.com/Plume-org/gettext-macros/?rev=a7c605f7edd6bfbfbfe7778026bfefd88d82db10)", - "gettext-utils 0.1.0 (git+https://github.com/Plume-org/gettext-macros/?rev=a7c605f7edd6bfbfbfe7778026bfefd88d82db10)", - "guid-create 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "lettre 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)", - "lettre_email 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)", - "multipart 0.16.1 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.13.0 (registry+https://github.com/rust-lang/crates.io-index)", - "plume-api 0.4.0", - "plume-common 0.4.0", - "plume-models 0.4.0", - "rocket 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rocket_contrib 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rocket_i18n 0.4.0 (git+https://github.com/Plume-org/rocket_i18n?rev=e922afa7c366038b3433278c03b1456b346074f2)", - "rpassword 4.0.5 (registry+https://github.com/rust-lang/crates.io-index)", - "rsass 0.9.8 (registry+https://github.com/rust-lang/crates.io-index)", - "ructe 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)", - "runtime-fmt 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "scheduled-thread-pool 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.51 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_qs 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", - "shrinkwraprs 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "syntect 3.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "validator 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "validator_derive 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "webfinger 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "activitypub", + "askama_escape", + "atom_syndication", + "chrono", + "clap", + "colored", + "ctrlc", + "diesel", + "dotenv", + "gettext 0.3.0", + "gettext-macros", + "gettext-utils", + "guid-create", + "heck", + "lettre", + "lettre_email", + "multipart", + "num_cpus", + "plume-api", + "plume-common", + "plume-models", + "rocket", + "rocket_contrib", + "rocket_i18n", + "rpassword", + "rsass", + "ructe", + "runtime-fmt", + "scheduled-thread-pool", + "serde", + "serde_json", + "serde_qs", + "shrinkwraprs", + "syntect", + "validator", + "validator_derive", + "webfinger", ] [[package]] name = "plume-api" version = "0.4.0" dependencies = [ - "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", + "serde", + "serde_derive", ] [[package]] name = "plume-cli" version = "0.4.0" dependencies = [ - "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)", - "diesel 1.4.4 (registry+https://github.com/rust-lang/crates.io-index)", - "dotenv 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)", - "plume-models 0.4.0", - "rpassword 4.0.5 (registry+https://github.com/rust-lang/crates.io-index)", + "clap", + "diesel", + "dotenv", + "plume-models", + "rpassword", ] [[package]] name = "plume-common" version = "0.4.0" dependencies = [ - "activitypub 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "activitystreams-derive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "activitystreams-traits 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "array_tool 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)", - "chrono 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", - "heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "hex 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper 0.12.35 (registry+https://github.com/rust-lang/crates.io-index)", - "openssl 0.10.29 (registry+https://github.com/rust-lang/crates.io-index)", - "pulldown-cmark 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "regex-syntax 0.6.17 (registry+https://github.com/rust-lang/crates.io-index)", - "reqwest 0.9.24 (registry+https://github.com/rust-lang/crates.io-index)", - "rocket 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.51 (registry+https://github.com/rust-lang/crates.io-index)", - "shrinkwraprs 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "syntect 3.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)", + "activitypub", + "activitystreams-derive", + "activitystreams-traits", + "array_tool", + "base64 0.10.1", + "chrono", + "heck", + "hex", + "hyper 0.12.35", + "openssl", + "pulldown-cmark", + "regex-syntax 0.6.17", + "reqwest", + "rocket", + "serde", + "serde_derive", + "serde_json", + "shrinkwraprs", + "syntect", + "tokio 0.1.22", ] [[package]] name = "plume-front" version = "0.4.0" dependencies = [ - "gettext 0.3.0 (git+https://github.com/Plume-org/gettext/?rev=294c54d74c699fbc66502b480a37cc66c1daa7f3)", - "gettext-macros 0.4.0 (git+https://github.com/Plume-org/gettext-macros/?rev=a7c605f7edd6bfbfbfe7778026bfefd88d82db10)", - "gettext-utils 0.1.0 (git+https://github.com/Plume-org/gettext-macros/?rev=a7c605f7edd6bfbfbfe7778026bfefd88d82db10)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.51 (registry+https://github.com/rust-lang/crates.io-index)", - "stdweb 0.4.18 (registry+https://github.com/rust-lang/crates.io-index)", - "stdweb-internal-runtime 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "gettext 0.3.0", + "gettext-macros", + "gettext-utils", + "lazy_static", + "serde", + "serde_json", + "stdweb", + "stdweb-internal-runtime", ] [[package]] name = "plume-macro" version = "0.4.0" dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.4.30", + "quote 0.6.13", + "syn 0.15.44", ] [[package]] name = "plume-models" version = "0.4.0" dependencies = [ - "activitypub 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "ammonia 2.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "askama_escape 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "bcrypt 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", - "chrono 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", - "diesel 1.4.4 (registry+https://github.com/rust-lang/crates.io-index)", - "diesel-derive-newtype 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "diesel_migrations 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "glob 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "guid-create 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "itertools 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "migrations_internals 1.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "openssl 0.10.29 (registry+https://github.com/rust-lang/crates.io-index)", - "plume-api 0.4.0", - "plume-common 0.4.0", - "plume-macro 0.4.0", - "reqwest 0.9.24 (registry+https://github.com/rust-lang/crates.io-index)", - "rocket 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", - "rocket_i18n 0.4.0 (git+https://github.com/Plume-org/rocket_i18n?rev=e922afa7c366038b3433278c03b1456b346074f2)", - "scheduled-thread-pool 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.51 (registry+https://github.com/rust-lang/crates.io-index)", - "shrinkwraprs 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "tantivy 0.10.3 (registry+https://github.com/rust-lang/crates.io-index)", - "url 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "walkdir 2.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "webfinger 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "whatlang 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", + "activitypub", + "ammonia", + "askama_escape", + "bcrypt", + "chrono", + "diesel", + "diesel-derive-newtype", + "diesel_migrations", + "glob", + "guid-create", + "heck", + "itertools", + "lazy_static", + "migrations_internals", + "openssl", + "plume-api", + "plume-common", + "plume-macro", + "reqwest", + "rocket", + "rocket_i18n", + "scheduled-thread-pool", + "serde", + "serde_derive", + "serde_json", + "shrinkwraprs", + "tantivy", + "url 2.1.1", + "walkdir", + "webfinger", + "whatlang", ] [[package]] name = "ppv-lite86" version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74490b50b9fbe561ac330df47c08f3f33073d2d00c150f719147d7c54522fa1b" [[package]] name = "pq-sys" version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ac25eee5a0582f45a67e837e350d784e7003bd29a5f460796772061ca49ffda" dependencies = [ - "vcpkg 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "vcpkg", ] [[package]] name = "precomputed-hash" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" [[package]] name = "proc-macro-hack" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "463bf29e7f11344e58c9e01f171470ab15c925c6822ad75028cc1c0e1d1eb63b" dependencies = [ - "proc-macro-hack-impl 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro-hack-impl", ] [[package]] name = "proc-macro-hack" version = "0.5.15" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d659fe7c6d27f25e9d80a1a094c223f5246f6a6596453e09d7229bf42750b63" [[package]] name = "proc-macro-hack-impl" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38c47dcb1594802de8c02f3b899e2018c78291168a22c281be21ea0fb4796842" + +[[package]] +name = "proc-macro-nested" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e946095f9d3ed29ec38de908c22f95d9ac008e424c7bcae54c75a79c527c694" [[package]] name = "proc-macro2" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd07deb3c6d1d9ff827999c7f9b04cdfd66b1b17ae508e14fe47b620f2282ae0" dependencies = [ - "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-xid 0.1.0", ] [[package]] name = "proc-macro2" version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b06e2f335f48d24442b35a19df506a835fb3547bc3c06ef27340da9acf5cae7" dependencies = [ - "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-xid 0.1.0", ] [[package]] name = "proc-macro2" version = "0.4.30" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" dependencies = [ - "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-xid 0.1.0", ] [[package]] name = "proc-macro2" -version = "1.0.10" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8872cf6f48eee44265156c111456a700ab3483686b3f96df4cf5481c89157319" dependencies = [ - "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-xid 0.2.0", ] [[package]] name = "publicsuffix" version = "1.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3bbaa49075179162b49acac1c6aa45fb4dafb5f13cf6794276d77bc7fd95757b" dependencies = [ - "error-chain 0.12.2 (registry+https://github.com/rust-lang/crates.io-index)", - "idna 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 1.3.7 (registry+https://github.com/rust-lang/crates.io-index)", - "url 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "error-chain", + "idna 0.2.0", + "lazy_static", + "regex", + "url 2.1.1", ] [[package]] name = "pulldown-cmark" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eef52fac62d0ea7b9b4dc7da092aa64ea7ec3d90af6679422d3d7e0e14b6ee15" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 1.2.1", ] [[package]] name = "quick-error" version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" [[package]] name = "quick-xml" version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d8065cbb01701c11cc195cde85cbf39d1c6a80705b67a157ebb3042e0e5777f" dependencies = [ - "encoding_rs 0.8.22 (registry+https://github.com/rust-lang/crates.io-index)", - "failure 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "encoding_rs", + "failure", + "log 0.4.8", + "memchr", ] [[package]] name = "quote" version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a6e920b65c65f10b2ae65c831a81a073a89edd28c7cce89475bff467ab4167a" [[package]] name = "quote" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1eca14c727ad12702eb4b6bfb5a232287dcf8385cb8ca83a3eeaf6519c44c408" dependencies = [ - "proc-macro2 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.2.3", ] [[package]] name = "quote" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9949cfe66888ffe1d53e6ec9d9f3b70714083854be20fd5e271b232a017401e8" dependencies = [ - "proc-macro2 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.3.8", ] [[package]] name = "quote" version = "0.6.13" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1" dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.4.30", ] [[package]] name = "quote" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c1f4b0efa5fc5e8ceb705136bfee52cfdb6a4e3509f770b478cd6ed434232a7" dependencies = [ - "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.12", ] [[package]] name = "r2d2" version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1497e40855348e4a8a40767d8e55174bce1e445a3ac9254ad44ad468ee0485af" dependencies = [ - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)", - "scheduled-thread-pool 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.8", + "parking_lot 0.10.2", + "scheduled-thread-pool", ] [[package]] name = "rand" version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293" dependencies = [ - "fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "fuchsia-cprng", + "libc", + "rand_core 0.3.1", + "rdrand", + "winapi 0.3.8", ] [[package]] name = "rand" version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c618c47cd3ebd209790115ab837de41425723956ad3ce2e6a7f09890947cacb9" dependencies = [ - "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "cloudabi", + "fuchsia-cprng", + "libc", + "rand_core 0.3.1", + "winapi 0.3.8", ] [[package]] name = "rand" version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" dependencies = [ - "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_jitter 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_pcg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg 0.1.7", + "libc", + "rand_chacha 0.1.1", + "rand_core 0.4.2", + "rand_hc 0.1.0", + "rand_isaac", + "rand_jitter", + "rand_os", + "rand_pcg", + "rand_xorshift", + "winapi 0.3.8", ] [[package]] name = "rand" version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" dependencies = [ - "getrandom 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_chacha 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_hc 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "getrandom", + "libc", + "rand_chacha 0.2.2", + "rand_core 0.5.1", + "rand_hc 0.2.0", ] [[package]] name = "rand_chacha" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" dependencies = [ - "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg 0.1.7", + "rand_core 0.3.1", ] [[package]] name = "rand_chacha" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" dependencies = [ - "ppv-lite86 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "ppv-lite86", + "rand_core 0.5.1", ] [[package]] name = "rand_core" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" dependencies = [ - "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.4.2", ] [[package]] name = "rand_core" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" [[package]] name = "rand_core" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" dependencies = [ - "getrandom 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", + "getrandom", ] [[package]] name = "rand_hc" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" dependencies = [ - "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.3.1", ] [[package]] name = "rand_hc" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" dependencies = [ - "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.5.1", ] [[package]] name = "rand_isaac" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08" dependencies = [ - "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.3.1", ] [[package]] name = "rand_jitter" version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b" dependencies = [ - "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "libc", + "rand_core 0.4.2", + "winapi 0.3.8", ] [[package]] name = "rand_os" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" dependencies = [ - "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "cloudabi", + "fuchsia-cprng", + "libc", + "rand_core 0.4.2", + "rdrand", + "winapi 0.3.8", ] [[package]] name = "rand_pcg" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44" dependencies = [ - "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg 0.1.7", + "rand_core 0.4.2", ] [[package]] name = "rand_xorshift" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c" dependencies = [ - "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.3.1", ] [[package]] name = "rdrand" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" dependencies = [ - "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.3.1", ] [[package]] name = "redox_syscall" version = "0.1.56" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84" [[package]] name = "regex" version = "1.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6020f034922e3194c711b82a627453881bc4682166cabb07134a10c26ba7692" dependencies = [ - "aho-corasick 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)", - "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "regex-syntax 0.6.17 (registry+https://github.com/rust-lang/crates.io-index)", - "thread_local 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "aho-corasick", + "memchr", + "regex-syntax 0.6.17", + "thread_local", ] [[package]] name = "regex-syntax" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e931c58b93d86f080c734bfd2bce7dd0079ae2331235818133c8be7f422e20e" [[package]] name = "regex-syntax" version = "0.6.17" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fe5bd57d1d7414c6b5ed48563a2c855d995ff777729dcd91c369ec7fea395ae" [[package]] name = "remove_dir_all" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a83fa3702a688b9359eccba92d153ac33fd2e8462f9e0e3fdf155239ea7792e" dependencies = [ - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.8", ] [[package]] name = "reqwest" version = "0.9.24" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f88643aea3c1343c804950d7bf983bd2067f5ab59db6d613a08e05572f2714ab" dependencies = [ - "base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)", - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", + "base64 0.10.1", + "bytes 0.4.12", "cookie 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", - "cookie_store 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "encoding_rs 0.8.22 (registry+https://github.com/rust-lang/crates.io-index)", - "flate2 1.0.14 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "http 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper 0.12.35 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper-tls 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "mime 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", - "mime_guess 2.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "native-tls 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.51 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_urlencoded 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-threadpool 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-timer 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)", - "uuid 0.7.4 (registry+https://github.com/rust-lang/crates.io-index)", - "winreg 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", + "cookie_store", + "encoding_rs", + "flate2", + "futures 0.1.29", + "http 0.1.21", + "hyper 0.12.35", + "hyper-tls", + "log 0.4.8", + "mime 0.3.16", + "mime_guess 2.0.3", + "native-tls", + "serde", + "serde_json", + "serde_urlencoded", + "time", + "tokio 0.1.22", + "tokio-executor", + "tokio-io", + "tokio-threadpool", + "tokio-timer", + "url 1.7.2", + "uuid", + "winreg", ] [[package]] name = "ring" -version = "0.13.5" +version = "0.16.13" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "703516ae74571f24b465b4a1431e81e2ad51336cb0ded733a55a1aa3eccac196" dependencies = [ - "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", - "untrusted 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", + "cc", + "libc", + "once_cell 1.3.1", + "spin", + "untrusted", + "web-sys", + "winapi 0.3.8", ] [[package]] name = "rocket" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)", - "base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.13.0 (registry+https://github.com/rust-lang/crates.io-index)", - "pear 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rocket_codegen 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", - "rocket_http 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", - "state 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", - "toml 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", - "version_check 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", - "yansi 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", +version = "0.5.0-dev" +source = "git+https://github.com/SergioBenitez/Rocket?rev=async#78c8ac8ccdbe85abb9508fb9657e70eb2b8d08c0" +dependencies = [ + "async-trait", + "atty", + "base16", + "base64 0.11.0", + "futures 0.3.4", + "futures-util", + "log 0.4.8", + "memchr", + "num_cpus", + "pear", + "rocket_codegen", + "rocket_http", + "state", + "time", + "tokio 0.2.20", + "toml", + "version_check 0.9.1", + "yansi 0.5.0", ] [[package]] name = "rocket_codegen" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" +version = "0.5.0-dev" +source = "git+https://github.com/SergioBenitez/Rocket?rev=async#78c8ac8ccdbe85abb9508fb9657e70eb2b8d08c0" dependencies = [ - "devise 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "glob 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "indexmap 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", - "rocket_http 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", - "version_check 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", - "yansi 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", + "devise", + "indexmap", + "quote 1.0.4", + "rocket_http", + "version_check 0.9.1", + "yansi 0.5.0", ] [[package]] name = "rocket_contrib" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" +version = "0.5.0-dev" +source = "git+https://github.com/SergioBenitez/Rocket?rev=async#78c8ac8ccdbe85abb9508fb9657e70eb2b8d08c0" dependencies = [ - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "notify 4.0.15 (registry+https://github.com/rust-lang/crates.io-index)", - "rocket 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.51 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.8", + "notify", + "rocket", + "serde", + "serde_json", + "tokio 0.2.20", ] [[package]] name = "rocket_http" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" +version = "0.5.0-dev" +source = "git+https://github.com/SergioBenitez/Rocket?rev=async#78c8ac8ccdbe85abb9508fb9657e70eb2b8d08c0" dependencies = [ - "cookie 0.11.2 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper 0.10.16 (registry+https://github.com/rust-lang/crates.io-index)", - "indexmap 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "pear 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "smallvec 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "state 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "cookie 0.12.0 (git+https://github.com/SergioBenitez/cookie-rs?rev=e0f3e6c)", + "http 0.2.1", + "hyper 0.13.5", + "indexmap", + "log 0.4.8", + "mime 0.3.16", + "pear", + "percent-encoding 1.0.1", + "smallvec 1.4.0", + "state", + "time", + "tokio 0.2.20", + "unicode-xid 0.2.0", ] [[package]] name = "rocket_i18n" -version = "0.4.0" -source = "git+https://github.com/Plume-org/rocket_i18n?rev=e922afa7c366038b3433278c03b1456b346074f2#e922afa7c366038b3433278c03b1456b346074f2" +version = "0.5.0" +source = "git+https://github.com/Plume-org/rocket_i18n?branch=go-async#a6c8cfb3c516d857493d938ec0c89e7bd0c29cad" dependencies = [ - "gettext 0.3.0 (git+https://github.com/Plume-org/gettext/?rev=294c54d74c699fbc66502b480a37cc66c1daa7f3)", - "rocket 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", + "gettext 0.4.0", + "rocket", ] [[package]] name = "rpassword" version = "4.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99371657d3c8e4d816fb6221db98fa408242b0b53bac08f8676a41f8554fe99f" dependencies = [ - "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "libc", + "winapi 0.3.8", ] [[package]] name = "rsass" version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4534cc03040beacd2668621815f26fe57e5b7cfe085790f98e5e87c1612316" dependencies = [ - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "num-rational 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static", + "nom 4.2.3", + "num-rational", + "num-traits", + "rand 0.6.5", ] [[package]] name = "ructe" version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c85620b8046f88a870d93d90fa56904dec76cc79139bfcc22e71e87f0cd2169f" dependencies = [ - "base64 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", - "bytecount 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "itertools 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", - "md5 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "nom 5.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "base64 0.11.0", + "bytecount", + "itertools", + "md5", + "nom 5.1.1", ] [[package]] name = "runtime-fmt" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "703425f78450961e590726ac24d823e6dc2340dc18282cf0cb6a417b26ca2ce8" dependencies = [ - "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-xid 0.2.0", ] [[package]] name = "rust-stemmers" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e46a2036019fdb888131db7a4c847a1063a7493f971ed94ea82c67eada63ca54" dependencies = [ - "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", + "serde", + "serde_derive", ] [[package]] name = "rustc-demangle" version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783" [[package]] name = "rustc_version" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" dependencies = [ - "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", + "semver", ] [[package]] name = "ryu" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed3d612bc64430efeb3f7ee6ef26d590dce0c43249217bddc62112540c7941e1" [[package]] name = "safemem" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" [[package]] name = "same-file" version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" dependencies = [ - "winapi-util 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-util", ] [[package]] name = "schannel" version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "039c25b130bd8c1321ee2d7de7fde2659fa9c2744e4bb29711cfc852ea53cd19" dependencies = [ - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static", + "winapi 0.3.8", ] [[package]] name = "scheduled-thread-pool" version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0988d7fdf88d5e5fcf5923a0f1e8ab345f3e98ab4bc6bc45a2d5ff7f7458fbf6" dependencies = [ - "parking_lot 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.10.2", ] [[package]] name = "scoped-pool" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "817a3a15e704545ce59ed2b5c60a5d32bda4d7869befb8b36667b658a6c00b43" dependencies = [ - "crossbeam 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", - "scopeguard 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "variance 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam 0.2.12", + "scopeguard 0.1.2", + "variance", ] [[package]] name = "scopeguard" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59a076157c1e2dc561d8de585151ee6965d910dd4dcb5dabb7ae3e83981a6c57" [[package]] name = "scopeguard" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27" [[package]] name = "scopeguard" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" [[package]] name = "security-framework" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f331b9025654145cd425b9ded0caf8f5ae0df80d418b326e2dc1c3dc5eb0620" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "core-foundation 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "core-foundation-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", - "security-framework-sys 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 1.2.1", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", ] [[package]] name = "security-framework-sys" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17bf11d99252f512695eb468de5516e5cf75455521e69dfe343f3b74e4748405" dependencies = [ - "core-foundation-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", + "core-foundation-sys", + "libc", ] [[package]] name = "semver" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" dependencies = [ - "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "semver-parser", ] [[package]] name = "semver-parser" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" version = "1.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36df6ac6412072f67cf767ebbde4133a5b2e88e76dc6187fa7104cd16f783399" dependencies = [ - "serde_derive 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive", ] [[package]] name = "serde_derive" version = "1.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e549e3abf4fb8621bd1609f11dfc9f5e50320802273b12f3811a67e6716ea6c" dependencies = [ - "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.12", + "quote 1.0.4", + "syn 1.0.18", ] [[package]] name = "serde_json" -version = "1.0.51" +version = "1.0.52" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7894c8ed05b7a3a279aeb79025fdec1d3158080b75b98a08faf2806bb799edd" dependencies = [ - "itoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", - "ryu 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", + "itoa", + "ryu", + "serde", ] [[package]] name = "serde_qs" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d43eef44996bbe16e99ac720e1577eefa16f7b76b5172165c98ced20ae9903e1" dependencies = [ - "data-encoding 2.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "error-chain 0.12.2 (registry+https://github.com/rust-lang/crates.io-index)", - "percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", + "data-encoding", + "error-chain", + "percent-encoding 1.0.1", + "serde", ] [[package]] name = "serde_urlencoded" version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "642dd69105886af2efd227f75a520ec9b44a820d65bc133a9131f7d229fd165a" dependencies = [ - "dtoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", - "itoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)", + "dtoa", + "itoa", + "serde", + "url 1.7.2", ] [[package]] name = "sha1" version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d" [[package]] name = "shlex" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fdf1b9db47230893d76faad238fd6097fd6d6a9245cd7a4d90dbd639536bbd2" [[package]] name = "shrinkwraprs" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83695fde96cbe9e08f0e4eb96b1b56fdbd44f2098ee27462dda964c7745fddc7" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "itertools 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 1.2.1", + "itertools", + "proc-macro2 1.0.12", + "quote 1.0.4", + "syn 1.0.18", +] + +[[package]] +name = "signal-hook-registry" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94f478ede9f64724c5d173d7bb56099ec3e2d9fc2774aac65d34b8b890405f41" +dependencies = [ + "arc-swap", + "libc", ] [[package]] name = "siphasher" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b8de496cf83d4ed58b6be86c3a275b8602f6ffe98d3024a869e124147a9a3ac" [[package]] name = "slab" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" [[package]] name = "smallvec" version = "0.6.13" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7b0758c52e15a8b5e3691eae6cc559f08eee9406e548a4477ba4e67770a82b6" dependencies = [ - "maybe-uninit 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "maybe-uninit", ] [[package]] name = "smallvec" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7cb5678e1615754284ec264d9bb5b4c27d2018577fd90ac0ceb578591ed5ee4" [[package]] name = "snap" version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95d697d63d44ad8b78b8d235bf85b34022a78af292c8918527c5f0cffdde7f43" dependencies = [ - "byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.3.4", + "lazy_static", ] +[[package]] +name = "spin" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" + [[package]] name = "stable_deref_trait" version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dba1a27d3efae4351c8051072d619e3ade2820635c3958d826bfea39d59b54c8" [[package]] name = "state" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7345c971d1ef21ffdbd103a75990a15eb03604fc8b8852ca8cb418ee1a099028" [[package]] name = "static_assertions" version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f3eb36b47e512f8f1c9e3d10c2c1965bc992bd9cdb024fa581e2194501c83d3" [[package]] name = "stdweb" version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a68c0ce28cf7400ed022e18da3c4591e14e1df02c70e93573cc59921b3923aeb" dependencies = [ - "discard 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.51 (registry+https://github.com/rust-lang/crates.io-index)", - "stdweb-derive 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", - "stdweb-internal-macros 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", - "stdweb-internal-runtime 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "wasm-bindgen 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)", + "discard", + "rustc_version", + "serde", + "serde_json", + "stdweb-derive", + "stdweb-internal-macros", + "stdweb-internal-runtime", + "wasm-bindgen", ] [[package]] name = "stdweb-derive" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e21ebd9179de08f2300a65454268a17ea3de204627458588c84319c4def3930" dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.4.30", + "quote 0.6.13", + "serde", + "serde_derive", + "syn 0.15.44", ] [[package]] name = "stdweb-internal-macros" version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e68f7d08b76979a43e93fe043b66d2626e35d41d68b0b85519202c6dd8ac59fa" dependencies = [ - "base-x 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.51 (registry+https://github.com/rust-lang/crates.io-index)", - "sha1 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)", + "base-x", + "proc-macro2 0.4.30", + "quote 0.6.13", + "serde", + "serde_derive", + "serde_json", + "sha1", + "syn 0.15.44", ] [[package]] name = "stdweb-internal-runtime" version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d52317523542cc0af5b7e31017ad0f7d1e78da50455e38d5657cd17754f617da" [[package]] name = "string" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d24114bfcceb867ca7f71a0d3fe45d45619ec47a6fbfa98cb14e14250bfa5d6d" dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.12", ] [[package]] name = "string_cache" version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89c058a82f9fd69b1becf8c274f412281038877c553182f1d02eb027045a2d67" dependencies = [ - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "new_debug_unreachable 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", - "phf_shared 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)", - "precomputed-hash 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "string_cache_codegen 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", - "string_cache_shared 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static", + "new_debug_unreachable", + "phf_shared", + "precomputed-hash", + "serde", + "string_cache_codegen", + "string_cache_shared", ] [[package]] name = "string_cache_codegen" version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f45ed1b65bf9a4bf2f7b7dc59212d1926e9eaf00fa998988e420fd124467c6" dependencies = [ - "phf_generator 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)", - "phf_shared 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "string_cache_shared 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "phf_generator", + "phf_shared", + "proc-macro2 1.0.12", + "quote 1.0.4", + "string_cache_shared", ] [[package]] name = "string_cache_shared" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1884d1bc09741d466d9b14e6d37ac89d6909cbcac41dd9ae982d4d063bbedfc" [[package]] name = "strsim" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" [[package]] name = "syn" version = "0.11.11" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3b891b9015c88c576343b9b3e41c2c11a51c219ef067b264bd9c8aa9b441dad" dependencies = [ - "quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", - "synom 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-xid 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.3.15", + "synom", + "unicode-xid 0.0.4", ] [[package]] name = "syn" version = "0.12.15" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c97c05b8ebc34ddd6b967994d5c6e9852fa92f8b82b3858c39451f97346dcce5" dependencies = [ - "proc-macro2 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.2.3", + "quote 0.4.2", + "unicode-xid 0.1.0", ] [[package]] name = "syn" version = "0.13.11" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14f9bf6292f3a61d2c716723fdb789a41bbe104168e6f496dc6497e531ea1b9b" dependencies = [ - "proc-macro2 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.3.8", + "quote 0.5.2", + "unicode-xid 0.1.0", ] [[package]] name = "syn" version = "0.14.9" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "261ae9ecaa397c42b960649561949d69311f08eeaea86a65696e6e46517cf741" dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.4.30", + "quote 0.6.13", + "unicode-xid 0.1.0", ] [[package]] name = "syn" version = "0.15.44" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5" dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.4.30", + "quote 0.6.13", + "unicode-xid 0.1.0", ] [[package]] name = "syn" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "410a7488c0a728c7ceb4ad59b9567eb4053d02e8cc7f5c0e0eeeb39518369213" dependencies = [ - "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.12", + "quote 1.0.4", + "unicode-xid 0.2.0", ] [[package]] name = "synom" version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a393066ed9010ebaed60b9eafa373d4b1baac186dd7e008555b0f702b51945b6" dependencies = [ - "unicode-xid 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-xid 0.0.4", ] [[package]] name = "synstructure" version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67656ea1dc1b41b1451851562ea232ec2e5a80242139f7e679ceccfb5d61f545" dependencies = [ - "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.12", + "quote 1.0.4", + "syn 1.0.18", + "unicode-xid 0.2.0", ] [[package]] name = "syntect" version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "955e9da2455eea5635f7032fc3a229908e6af18c39600313866095e07db0d8b8" dependencies = [ - "bincode 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "flate2 1.0.14 (registry+https://github.com/rust-lang/crates.io-index)", - "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "lazycell 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "onig 5.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "plist 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "regex-syntax 0.6.17 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.51 (registry+https://github.com/rust-lang/crates.io-index)", - "walkdir 2.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "yaml-rust 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "bincode", + "bitflags 1.2.1", + "flate2", + "fnv", + "lazy_static", + "lazycell", + "onig", + "plist", + "regex-syntax 0.6.17", + "serde", + "serde_derive", + "serde_json", + "walkdir", + "yaml-rust", ] [[package]] name = "tantivy" version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "atomicwrites 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", - "base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)", - "bit-set 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", - "bitpacking 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", - "byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "census 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "chrono 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", - "combine 3.8.1 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", - "downcast-rs 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "fail 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "failure 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "fs2 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-cpupool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", - "htmlescape 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "itertools 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", - "levenshtein_automata 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "memmap 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "murmurhash32 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "notify 4.0.15 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.13.0 (registry+https://github.com/rust-lang/crates.io-index)", - "once_cell 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "owned-read 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "owning_ref 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 1.3.7 (registry+https://github.com/rust-lang/crates.io-index)", - "rust-stemmers 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "scoped-pool 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.51 (registry+https://github.com/rust-lang/crates.io-index)", - "smallvec 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", - "snap 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", - "stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tantivy-fst 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "uuid 0.7.4 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", +checksum = "4c5a174be9197eb9eb376b225bd2262810211609cd552dc6026505866ee74a75" +dependencies = [ + "atomicwrites", + "base64 0.10.1", + "bit-set", + "bitpacking", + "byteorder 1.3.4", + "census", + "chrono", + "combine", + "crossbeam 0.5.0", + "downcast-rs", + "fail", + "failure", + "fnv", + "fs2", + "futures 0.1.29", + "futures-cpupool", + "htmlescape", + "itertools", + "levenshtein_automata", + "log 0.4.8", + "memmap", + "murmurhash32", + "notify", + "num_cpus", + "once_cell 0.2.4", + "owned-read", + "owning_ref", + "regex", + "rust-stemmers", + "scoped-pool", + "serde", + "serde_derive", + "serde_json", + "smallvec 0.6.13", + "snap", + "stable_deref_trait", + "tantivy-fst", + "tempdir", + "tempfile", + "uuid", + "winapi 0.3.8", ] [[package]] name = "tantivy-fst" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16b22af5ff09b8897093287642a5aaee6f30eb496526ef83a8dd0f4c636ac367" dependencies = [ - "byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "levenshtein_automata 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "regex-syntax 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "utf8-ranges 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.3.4", + "levenshtein_automata", + "regex-syntax 0.4.2", + "utf8-ranges", ] [[package]] name = "tempdir" version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15f2b5fb00ccdf689e0149d1b1b3c03fead81c2b37735d812fa8bddbbf41b6d8" dependencies = [ - "rand 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.4.6", + "remove_dir_all", ] [[package]] name = "tempfile" version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a6e24d9338a0a5be79593e2fa15a648add6138caa803e2d5bc782c371732ca9" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", - "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)", - "remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if", + "libc", + "rand 0.7.3", + "redox_syscall", + "remove_dir_all", + "winapi 0.3.8", ] [[package]] name = "tendril" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "707feda9f2582d5d680d733e38755547a3e8fb471e7ba11452ecfd9ce93a5d3b" dependencies = [ - "futf 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "mac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "utf-8 0.7.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futf", + "mac", + "utf-8", ] [[package]] name = "termcolor" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb6bfa289a4d7c5766392812c0a1f4c1ba45afa1ad47803c11e1f407d846d75f" dependencies = [ - "winapi-util 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-util", ] [[package]] name = "textwrap" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" dependencies = [ - "unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-width", ] [[package]] name = "thread_local" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14" dependencies = [ - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static", ] [[package]] name = "time" -version = "0.1.42" +version = "0.1.43" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438" dependencies = [ - "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", - "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "libc", + "winapi 0.3.8", ] [[package]] name = "tokio" version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a09c0b5bb588872ab2f09afa13ee6e9dac11e10a0ec9e8e3ba39a5a5d530af6" dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.13.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-codec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-current-thread 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-fs 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-sync 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-tcp 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-threadpool 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-timer 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-udp 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-uds 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.12", + "futures 0.1.29", + "mio", + "num_cpus", + "tokio-codec", + "tokio-current-thread", + "tokio-executor", + "tokio-fs", + "tokio-io", + "tokio-reactor", + "tokio-sync", + "tokio-tcp", + "tokio-threadpool", + "tokio-timer", + "tokio-udp", + "tokio-uds", +] + +[[package]] +name = "tokio" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05c1d570eb1a36f0345a5ce9c6c6e665b70b73d11236912c0b477616aeec47b1" +dependencies = [ + "bytes 0.5.4", + "fnv", + "futures-core", + "iovec", + "lazy_static", + "libc", + "memchr", + "mio", + "mio-uds", + "num_cpus", + "pin-project-lite", + "signal-hook-registry", + "slab", + "winapi 0.3.8", ] [[package]] name = "tokio-buf" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fb220f46c53859a4b7ec083e41dec9778ff0b1851c0942b211edb89e0ccdc46" dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.12", + "either 1.5.3", + "futures 0.1.29", ] [[package]] name = "tokio-codec" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25b2998660ba0e70d18684de5d06b70b70a3a747469af9dea7618cc59e75976b" dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.12", + "futures 0.1.29", + "tokio-io", ] [[package]] name = "tokio-current-thread" version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1de0e32a83f131e002238d7ccde18211c0a5397f60cbfffcb112868c2e0e20e" dependencies = [ - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.29", + "tokio-executor", ] [[package]] name = "tokio-executor" version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb2d1b8f4548dbf5e1f7818512e9c406860678f29c300cdf0ebac72d1a3a1671" dependencies = [ - "crossbeam-utils 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.7.2", + "futures 0.1.29", ] [[package]] name = "tokio-fs" version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "297a1206e0ca6302a0eed35b700d292b275256f596e2f3fea7729d5e629b6ff4" dependencies = [ - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-threadpool 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.29", + "tokio-io", + "tokio-threadpool", ] [[package]] name = "tokio-io" version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57fc868aae093479e3131e3d165c93b1c7474109d13c90ec0dda2a1bbfff0674" dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.12", + "futures 0.1.29", + "log 0.4.8", ] [[package]] name = "tokio-reactor" version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09bc590ec4ba8ba87652da2068d150dcada2cfa2e07faae270a5e0409aa51351" dependencies = [ - "crossbeam-utils 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.13.0 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-sync 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.7.2", + "futures 0.1.29", + "lazy_static", + "log 0.4.8", + "mio", + "num_cpus", + "parking_lot 0.9.0", + "slab", + "tokio-executor", + "tokio-io", + "tokio-sync", ] [[package]] name = "tokio-sync" version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edfe50152bc8164fcc456dab7891fa9bf8beaf01c5ee7e1dd43a397c3cf87dee" dependencies = [ - "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", + "fnv", + "futures 0.1.29", ] [[package]] name = "tokio-tcp" version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98df18ed66e3b72e742f185882a9e201892407957e45fbff8da17ae7a7c51f72" dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.12", + "futures 0.1.29", + "iovec", + "mio", + "tokio-io", + "tokio-reactor", ] [[package]] name = "tokio-threadpool" version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df720b6581784c118f0eb4310796b12b1d242a7eb95f716a8367855325c25f89" dependencies = [ - "crossbeam-deque 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-queue 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.13.0 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-deque 0.7.3", + "crossbeam-queue", + "crossbeam-utils 0.7.2", + "futures 0.1.29", + "lazy_static", + "log 0.4.8", + "num_cpus", + "slab", + "tokio-executor", ] [[package]] name = "tokio-timer" version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93044f2d313c95ff1cb7809ce9a7a05735b012288a888b62d4434fd58c94f296" dependencies = [ - "crossbeam-utils 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.7.2", + "futures 0.1.29", + "slab", + "tokio-executor", ] [[package]] name = "tokio-udp" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2a0b10e610b39c38b031a2fcab08e4b82f16ece36504988dcbd81dbba650d82" dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-codec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.12", + "futures 0.1.29", + "log 0.4.8", + "mio", + "tokio-codec", + "tokio-io", + "tokio-reactor", ] [[package]] name = "tokio-uds" version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5076db410d6fdc6523df7595447629099a1fdc47b3d9f896220780fa48faf798" +dependencies = [ + "bytes 0.4.12", + "futures 0.1.29", + "iovec", + "libc", + "log 0.4.8", + "mio", + "mio-uds", + "tokio-codec", + "tokio-io", + "tokio-reactor", +] + +[[package]] +name = "tokio-util" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be8242891f2b6cbef26a2d7e8605133c2c554cd35b3e4948ea892d6d68436499" dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)", - "mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-codec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.5.4", + "futures-core", + "futures-sink", + "log 0.4.8", + "pin-project-lite", + "tokio 0.2.20", ] [[package]] name = "toml" version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "758664fc71a3a69038656bee8b6be6477d2a6c315a6b81f7081f591bffa4111f" dependencies = [ - "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", + "serde", ] [[package]] -name = "traitobject" -version = "0.1.0" +name = "tower-service" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e987b6bf443f4b5b3b6f38704195592cca41c5bb7aedd3c3693c7081f8289860" [[package]] name = "try-lock" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e604eb7b43c06650e854be16a2a03155743d3752dd1c943f6829e26b7a36e382" [[package]] name = "try_from" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "283d3b89e1368717881a9d51dad843cc435380d8109c9e47d38780a324698d8b" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if", ] [[package]] name = "twoway" version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59b11b2b5241ba34be09c3cc85a36e56e48f9888862e19cedf23336d35316ed1" dependencies = [ - "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr", ] -[[package]] -name = "typeable" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "typenum" version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "373c8a200f9e67a0c95e62a4f52fbf80c23b4381c05a17845531982fa99e6b33" [[package]] name = "unicase" version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4765f83163b74f957c797ad9253caf97f103fb064d3999aea9568d09fc8a33" dependencies = [ - "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "version_check 0.1.5", ] [[package]] name = "unicase" version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" dependencies = [ - "version_check 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "version_check 0.9.1", ] [[package]] name = "unicode-bidi" version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" dependencies = [ - "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", + "matches", ] [[package]] name = "unicode-normalization" version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5479532badd04e128284890390c1e876ef7a993d0570b3597ae43dfa1d59afa4" dependencies = [ - "smallvec 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "smallvec 1.4.0", ] [[package]] name = "unicode-segmentation" version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e83e153d1053cbb5a118eeff7fd5be06ed99153f00dbcd8ae310c5fb2b22edc0" [[package]] name = "unicode-width" version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "caaa9d531767d1ff2150b9332433f32a24622147e5ebb1f26409d5da67afd479" [[package]] name = "unicode-xid" version = "0.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c1f860d7d29cf02cb2f3f359fd35991af3d30bac52c57d265a3c461074cb4dc" [[package]] name = "unicode-xid" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" [[package]] name = "unicode-xid" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c" [[package]] name = "unreachable" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "382810877fe448991dfc7f0dd6e3ae5d58088fd0ea5e35189655f84e6814fa56" dependencies = [ - "void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "void", ] [[package]] name = "untrusted" -version = "0.6.2" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" [[package]] name = "url" version = "1.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a" dependencies = [ - "idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", - "percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "idna 0.1.5", + "matches", + "percent-encoding 1.0.1", ] [[package]] name = "url" version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "829d4a8476c35c9bf0bbce5a3b23f4106f79728039b726d292bb93bc106787cb" dependencies = [ - "idna 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", - "percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "idna 0.2.0", + "matches", + "percent-encoding 2.1.0", ] [[package]] name = "utf-8" version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05e42f7c18b8f902290b009cde6d651262f956c98bc51bca4cd1d511c9cd85c7" [[package]] name = "utf8-ranges" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4ae116fef2b7fea257ed6440d3cfcff7f190865f170cdad00bb6465bf18ecba" [[package]] name = "uuid" version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90dbc611eb48397705a6b0f6e917da23ae517e4d127123d2cf7674206627d32a" dependencies = [ - "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.6.5", + "serde", ] [[package]] name = "validator" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "236a5eda3df2c877872e98dbc55d497d943792e6405d8fc65bd4f8a5e3b53c99" dependencies = [ - "idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 1.3.7 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.51 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)", + "idna 0.1.5", + "lazy_static", + "regex", + "serde", + "serde_derive", + "serde_json", + "url 1.7.2", ] [[package]] name = "validator_derive" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d360d6f5754972c0c1da14fb3d5580daa31aee566e1e45e2f8d3bf5950ecd3e9" dependencies = [ - "if_chain 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 1.3.7 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)", - "validator 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "if_chain", + "lazy_static", + "proc-macro2 0.4.30", + "quote 0.6.13", + "regex", + "syn 0.15.44", + "validator", ] [[package]] name = "variance" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3abfc2be1fb59663871379ea884fd81de80c496f2274e021c01d6fe56cd77b05" [[package]] name = "vcpkg" version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fc439f2794e98976c88a2a2dafce96b930fe8010b0a256b3c2199a773933168" [[package]] name = "vec_map" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" [[package]] name = "version_check" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd" [[package]] name = "version_check" version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "078775d0255232fb988e6fccf26ddc9d1ac274299aaedcedce21c6f72cc533ce" [[package]] name = "void" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" [[package]] name = "walkdir" version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "777182bc735b6424e1a57516d35ed72cb8019d85c8c9bf536dccb3445c1a2f7d" dependencies = [ - "same-file 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-util 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "same-file", + "winapi 0.3.8", + "winapi-util", ] [[package]] name = "want" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6395efa4784b027708f7451087e647ec73cc74f5d9bc2e418404248d679a230" dependencies = [ - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "try-lock 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.29", + "log 0.4.8", + "try-lock", +] + +[[package]] +name = "want" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" +dependencies = [ + "log 0.4.8", + "try-lock", ] [[package]] name = "wasi" version = "0.9.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" [[package]] name = "wasm-bindgen" -version = "0.2.60" +version = "0.2.62" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3c7d40d09cdbf0f4895ae58cf57d92e1e57a9dd8ed2e8390514b54a47cc5551" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "wasm-bindgen-macro 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if", + "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.60" +version = "0.2.62" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3972e137ebf830900db522d6c8fd74d1900dcfc733462e9a12e942b00b4ac94" dependencies = [ - "bumpalo 3.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", - "wasm-bindgen-shared 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)", + "bumpalo", + "lazy_static", + "log 0.4.8", + "proc-macro2 1.0.12", + "quote 1.0.4", + "syn 1.0.18", + "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.60" +version = "0.2.62" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2cd85aa2c579e8892442954685f0d801f9129de24fa2136b2c6a539c76b65776" dependencies = [ - "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "wasm-bindgen-macro-support 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.4", + "wasm-bindgen-macro-support", ] [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.60" +version = "0.2.62" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eb197bd3a47553334907ffd2f16507b4f4f01bbec3ac921a7719e0decdfe72a" dependencies = [ - "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", - "wasm-bindgen-backend 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)", - "wasm-bindgen-shared 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.12", + "quote 1.0.4", + "syn 1.0.18", + "wasm-bindgen-backend", + "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.60" +version = "0.2.62" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a91c2916119c17a8e316507afaaa2dd94b47646048014bbdf6bef098c1bb58ad" + +[[package]] +name = "web-sys" +version = "0.3.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bc359e5dd3b46cb9687a051d50a2fdd228e4ba7cf6fcf861a5365c3d671a642" +dependencies = [ + "js-sys", + "wasm-bindgen", +] [[package]] name = "webfinger" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec24b1b0700d4b466d280228ed0f62274eedeaa80206820f071fdc8ed787b664" dependencies = [ - "reqwest 0.9.24 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", + "reqwest", + "serde", + "serde_derive", ] [[package]] name = "whatlang" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5eb4694f7385e63fab02bb374e8ab39bffb5c25c2bce68a9b18c51cfd554e69a" dependencies = [ - "hashbrown 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "hashbrown", ] [[package]] name = "which" version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b57acb10231b9493c8472b20cb57317d0679a49e0bdbee44b3b803a6473af164" dependencies = [ - "failure 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", + "failure", + "libc", ] [[package]] name = "winapi" version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" [[package]] name = "winapi" version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6" dependencies = [ - "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", ] [[package]] name = "winapi-build" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" [[package]] name = "winapi-i686-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" dependencies = [ - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.8", ] [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "winreg" version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2986deb581c4fe11b621998a5e53361efe6b48a151178d0cd9eeffa4dc6acc9" dependencies = [ - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.8", ] [[package]] name = "winutil" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7daf138b6b14196e3830a588acf1e86966c694d3e8fb026fb105b8b5dca07e6e" dependencies = [ - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.8", ] [[package]] name = "ws2_32-sys" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" dependencies = [ - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8", + "winapi-build", ] [[package]] name = "xml-rs" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b07db065a5cf61a7e4ba64f29e67db906fb1787316516c4e6e5ff0fea1efcd8a" [[package]] name = "yaml-rust" version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65923dd1784f44da1d2c3dbbc5e822045628c590ba72123e1c73d3c230c4434d" dependencies = [ - "linked-hash-map 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", + "linked-hash-map", ] [[package]] name = "yansi" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d60c3b48c9cdec42fb06b3b84b5b087405e1fa1c644a1af3930e4dfafe93de48" [[package]] name = "yansi" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" - -[metadata] -"checksum activitypub 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "5bfd311e7b4102971757a2a6f143a93b1a8e6b5afc2c46936af827fd9eab403f" -"checksum activitystreams-derive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "176bdecfca82b1980e4769e3d54b6a392284b724083e0bff68272e290f17458f" -"checksum activitystreams-traits 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "670ef03168e704b0cae242e7a5d8b40506772b339687e01a3496fc4afe2e8542" -"checksum activitystreams-types 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ff74c5765278614a009f97b9ec12f9a7c732bbcc5e0337fcfcab619b784860ec" -"checksum adler32 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "5d2e7343e7fc9de883d1b0341e0b13970f764c14101234857d2ddafa1cb1cac2" -"checksum ahash 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0989268a37e128d4d7a8028f1c60099430113fdbc70419010601ce51a228e4fe" -"checksum aho-corasick 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)" = "8716408b8bc624ed7f65d223ddb9ac2d044c0547b6fa4b0d554f3a9540496ada" -"checksum ammonia 2.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "384d704f242a0a9faf793fff775a0be6ab9aa27edabffa097331d73779142520" -"checksum ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" -"checksum array_tool 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8f8cb5d814eb646a863c4f24978cff2880c4be96ad8cde2c0f0678732902e271" -"checksum arrayvec 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)" = "cd9fd44efafa8690358b7408d253adf110036b88f55672a933f01d616ad9b1b9" -"checksum ascii 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)" = "eab1c04a571841102f5345a8fc0f6bb3d31c315dec879b5c6e42e40ce7ffa34e" -"checksum ascii_utils 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)" = "71938f30533e4d95a6d17aa530939da3842c2ab6f4f84b9dae68447e4129f74a" -"checksum askama_escape 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "719b48039ffac1564f67d70162109ba9341125cee0096a540e478355b3c724a7" -"checksum atom_syndication 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0a9a7ab83635ff7a3b04856f4ad95324dccc9b947ab1e790fc5c769ee6d6f60c" -"checksum atomicwrites 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6a2baf2feb820299c53c7ad1cc4f5914a220a1cb76d7ce321d2522a94b54651f" -"checksum atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)" = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" -"checksum autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "1d49d90015b3c36167a20fe2810c5cd875ad504b39cff3d4eae7977e6b7c1cb2" -"checksum autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d" -"checksum backtrace 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "150ae7828afa7afb6d474f909d64072d21de1f3365b6e8ad8029bf7b1c6350a0" -"checksum backtrace 0.3.46 (registry+https://github.com/rust-lang/crates.io-index)" = "b1e692897359247cc6bb902933361652380af0f1b7651ae5c5013407f30e109e" -"checksum backtrace-sys 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)" = "7de8aba10a69c8e8d7622c5710229485ec32e9d55fdad160ea559c086fdcd118" -"checksum base-x 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "1b20b618342cf9891c292c4f5ac2cde7287cc5c87e87e9c769d617793607dec1" -"checksum base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e" -"checksum base64 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7" -"checksum base64 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)" = "489d6c0ed21b11d038c31b6ceccca973e65d73ba3bd8ecb9a2babf5546164643" -"checksum bcrypt 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7b4fd6a91ff640809cfab4ea74312a892238a7bbae53adbf717b71122deb0c85" -"checksum bincode 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5753e2a71534719bf3f4e57006c3a4f0d2c672a4b676eec84161f763eca87dbf" -"checksum bindgen 0.50.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cb0e5a5f74b2bafe0b39379f616b5975e08bcaca4e779c078d5c31324147e9ba" -"checksum bit-set 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e84c238982c4b1e1ee668d136c510c67a13465279c0cb367ea6baf6310620a80" -"checksum bit-vec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f59bbe95d4e52a6398ec21238d31577f2b28a9d86807f06ca59d191d8440d0bb" -"checksum bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "aad18937a628ec6abcd26d1489012cc0e18c21798210f491af69ded9b881106d" -"checksum bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" -"checksum bitpacking 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "3744aff20a3437a99ebc0bb7733e9e60c7bf590478c9b897e95b38d57e5acb68" -"checksum block-cipher-trait 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1c924d49bd09e7c06003acda26cd9742e796e34282ec6c1189404dee0c1f4774" -"checksum blowfish 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6aeb80d00f2688459b8542068abd974cfb101e7a82182414a99b5026c0d85cc3" -"checksum buf_redux 0.8.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b953a6887648bb07a535631f2bc00fbdb2a2216f135552cb3f534ed136b9c07f" -"checksum bufstream 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "40e38929add23cdf8a366df9b0e088953150724bcbe5fc330b0d8eb3b328eec8" -"checksum bumpalo 3.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "12ae9db68ad7fac5fe51304d20f016c911539251075a214f8e663babefa35187" -"checksum bytecount 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b0017894339f586ccb943b01b9555de56770c11cda818e7e3d8bd93f4ed7f46e" -"checksum byteorder 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "96c8b41881888cc08af32d47ac4edd52bc7fa27fef774be47a92443756451304" -"checksum byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de" -"checksum bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)" = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c" -"checksum cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)" = "95e28fa049fda1c330bcf9d723be7663a899c4679724b34c81e9f5a326aab8cd" -"checksum census 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "641317709904ba3c1ad137cb5d88ec9d8c03c07de087b2cff5e84ec565c7e299" -"checksum cexpr 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "fce5b5fb86b0c57c20c834c1b412fd09c77c8a59b9473f86272709e78874cd1d" -"checksum cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" -"checksum chomp 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9f74ad218e66339b11fd23f693fb8f1d621e80ba6ac218297be26073365d163d" -"checksum chrono 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)" = "80094f509cf8b5ae86a4966a39b3ff66cd7e2a3e594accec3743ff3fabeab5b2" -"checksum clang-sys 0.28.1 (registry+https://github.com/rust-lang/crates.io-index)" = "81de550971c976f176130da4b2978d3b524eaa0fd9ac31f3ceb5ae1231fb4853" -"checksum clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9" -"checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" -"checksum colored 1.9.3 (registry+https://github.com/rust-lang/crates.io-index)" = "f4ffc801dacf156c5854b9df4f425a626539c3a6ef7893cc0c5084a23f0b6c59" -"checksum combine 3.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "da3da6baa321ec19e1cc41d31bf599f00c783d0517095cdaf0332e3fe8d20680" -"checksum const-random 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "2f1af9ac737b2dd2d577701e59fd09ba34822f6f2ebdb30a7647405d9e55e16a" -"checksum const-random-macro 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "25e4c606eb459dd29f7c57b2e0879f2b6f14ee130918c2b78ccb58a9624e6c7a" -"checksum conv 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "78ff10625fd0ac447827aa30ea8b861fead473bb60aeb73af6c1c58caf0d1299" -"checksum cookie 0.11.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d9fac5e7bdefb6160fb181ee0eaa6f96704b625c70e6d61c465cb35750a4ea12" -"checksum cookie 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "888604f00b3db336d2af898ec3c1d5d0ddf5e6d462220f2ededc33a87ac4bbd5" -"checksum cookie_store 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "46750b3f362965f197996c4448e4a0935e791bf7d6631bfce9ee0af3d24c919c" -"checksum core-foundation 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "57d24c7a13c43e870e37c1556b74555437870a04514f7685f5b354e090567171" -"checksum core-foundation-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac" -"checksum crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ba125de2af0df55319f41944744ad91c71113bf74a4646efff39afe1f6842db1" -"checksum crossbeam 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)" = "bd66663db5a988098a89599d4857919b3acf7f61402e61365acfd3919857b9be" -"checksum crossbeam 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d1c92ff2d7a202d592f5a412d75cf421495c913817781c1cb383bf12a77e185f" -"checksum crossbeam-channel 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "c8ec7fcd21571dc78f96cc96243cab8d8f035247c3efd16c687be154c3fa9efa" -"checksum crossbeam-deque 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "05e44b8cf3e1a625844d1750e1f7820da46044ff6d28f4d43e455ba3e5bb2c13" -"checksum crossbeam-deque 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "9f02af974daeee82218205558e51ec8768b48cf524bd01d550abe5573a608285" -"checksum crossbeam-epoch 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2449aaa4ec7ef96e5fb24db16024b935df718e9ae1cec0a1e68feeca2efca7b8" -"checksum crossbeam-epoch 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "fedcd6772e37f3da2a9af9bf12ebe046c0dfe657992377b4df982a2b54cd37a9" -"checksum crossbeam-epoch 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "058ed274caafc1f60c4997b5fc07bf7dc7cca454af7c6e81edffe5f33f70dace" -"checksum crossbeam-queue 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c695eeca1e7173472a32221542ae469b3e9aac3a4fc81f7696bcad82029493db" -"checksum crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)" = "04973fa96e96579258a5091af6003abde64af786b860f18622b82e026cca60e6" -"checksum crossbeam-utils 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8" -"checksum crunchy 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" -"checksum ctrlc 3.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "7a4ba686dff9fa4c1c9636ce1010b0cf98ceb421361b0bb3d6faeec43bd217a7" -"checksum custom_derive 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "ef8ae57c4978a2acd8b869ce6b9ca1dfe817bff704c220209fdef2c0b75a01b9" -"checksum data-encoding 2.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f4f47ca1860a761136924ddd2422ba77b2ea54fe8cc75b9040804a0d9d32ad97" -"checksum dbghelp-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "97590ba53bcb8ac28279161ca943a924d1fd4a8fb3fa63302591647c4fc5b850" -"checksum debug-builders 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0f5d8e3d14cabcb2a8a59d7147289173c6ada77a0bc526f6b85078f941c0cf12" -"checksum debugtrace 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "62e432bd83c5d70317f6ebd8a50ed4afb32907c64d6e2e1e65e339b06dc553f3" -"checksum derive_builder 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c998e6ab02a828dd9735c18f154e14100e674ed08cb4e1938f0e4177543f439" -"checksum derive_builder_core 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "735e24ee9e5fa8e16b86da5007856e97d592e11867e45d76e0c0d0a164a0b757" -"checksum devise 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "74e04ba2d03c5fa0d954c061fc8c9c288badadffc272ebb87679a89846de3ed3" -"checksum devise_codegen 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "066ceb7928ca93a9bedc6d0e612a8a0424048b0ab1f75971b203d01420c055d7" -"checksum devise_core 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "cf41c59b22b5e3ec0ea55c7847e5f358d340f3a8d6d53a5cf4f1564967f96487" -"checksum diesel 1.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "33d7ca63eb2efea87a7f56a283acc49e2ce4b2bd54adf7465dc1d81fef13d8fc" -"checksum diesel-derive-newtype 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e844e8e6f65dcf27aa0b97d4234f974d93dfbf56816033d71b5e0c7eb701709f" -"checksum diesel_derives 1.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "45f5098f628d02a7a0f68ddba586fb61e80edec3bdc1be3b921f4ceec60858d3" -"checksum diesel_migrations 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bf3cde8413353dc7f5d72fa8ce0b99a560a359d2c5ef1e5817ca731cd9008f4c" -"checksum discard 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "212d0f5754cb6769937f4501cc0e67f4f4483c8d2c3e1e922ee9edbe4ab4c7c0" -"checksum dotenv 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4424bad868b0ffe6ae351ee463526ba625bbca817978293bbe6bb7dc1804a175" -"checksum downcast-rs 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "52ba6eb47c2131e784a38b726eb54c1e1484904f013e576a25354d0124161af6" -"checksum dtoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "4358a9e11b9a09cf52383b451b49a169e8d797b68aa02301ff586d70d9661ea3" -"checksum either 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "a39bffec1e2015c5d8a6773cb0cf48d0d758c842398f624c34969071f5499ea7" -"checksum either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3" -"checksum email 0.0.20 (registry+https://github.com/rust-lang/crates.io-index)" = "91549a51bb0241165f13d57fc4c72cef063b4088fb078b019ecbf464a45f22e4" -"checksum encoding 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "6b0d943856b990d12d3b55b359144ff341533e516d94098b1d3fc1ac666d36ec" -"checksum encoding-index-japanese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" = "04e8b2ff42e9a05335dbf8b5c6f7567e5591d0d916ccef4e0b1710d32a0d0c91" -"checksum encoding-index-korean 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" = "4dc33fb8e6bcba213fe2f14275f0963fd16f0a02c878e3095ecfdf5bee529d81" -"checksum encoding-index-simpchinese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" = "d87a7194909b9118fc707194baa434a4e3b0fb6a5a757c73c3adb07aa25031f7" -"checksum encoding-index-singlebyte 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" = "3351d5acffb224af9ca265f435b859c7c01537c0849754d3db3fdf2bfe2ae84a" -"checksum encoding-index-tradchinese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" = "fd0e20d5688ce3cab59eb3ef3a2083a5c77bf496cb798dc6fcdb75f323890c18" -"checksum encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "a246d82be1c9d791c5dfde9a2bd045fc3cbba3fa2b11ad558f27d01712f00569" -"checksum encoding_rs 0.8.22 (registry+https://github.com/rust-lang/crates.io-index)" = "cd8d03faa7fe0c1431609dfad7bbe827af30f82e1e2ae6f7ee4fca6bd764bc28" -"checksum env_logger 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "aafcde04e90a5226a6443b7aabdb016ba2f8307c847d524724bd9b346dd1a2d3" -"checksum error-chain 0.12.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d371106cc88ffdfb1eabd7111e432da544f16f3e2d7bf1dfe8bf575f1df045cd" -"checksum fail 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f63eec71a3013ee912a0ecb339ff0c5fa5ed9660df04bfefa10c250b885d018c" -"checksum failure 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "b8529c2421efa3066a5cbd8063d2244603824daccb6936b079010bb2aa89464b" -"checksum failure_derive 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "030a733c8287d6213886dd487564ff5c8f6aae10278b3588ed177f9d18f8d231" -"checksum fast_chemail 0.9.6 (registry+https://github.com/rust-lang/crates.io-index)" = "495a39d30d624c2caabe6312bfead73e7717692b44e0b32df168c275a2e8e9e4" -"checksum filetime 0.2.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f59efc38004c988e4201d11d263b8171f49a2e7ec0bdbb71773433f271504a5e" -"checksum flate2 1.0.14 (registry+https://github.com/rust-lang/crates.io-index)" = "2cfff41391129e0a856d6d822600b8d71179d46879e310417eb9c762eb178b42" -"checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" -"checksum foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" -"checksum foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" -"checksum fs2 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213" -"checksum fsevent 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5ab7d1bd1bd33cc98b0889831b72da23c0aa4df9cec7e0702f46ecea04b35db6" -"checksum fsevent-sys 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f41b048a94555da0f42f1d632e2e19510084fb8e303b0daa2816e733fb3644a0" -"checksum fst 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "927fb434ff9f0115b215dc0efd2e4fbdd7448522a92a1aa37c77d6a2f8f1ebd6" -"checksum fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" -"checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" -"checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" -"checksum futf 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "7c9c1ce3fa9336301af935ab852c437817d14cd33690446569392e65170aac3b" -"checksum futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)" = "1b980f2816d6ee8673b6517b52cb0e808a180efc92e5c19d02cdda79066703ef" -"checksum futures-cpupool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "ab90cde24b3319636588d0c35fe03b1333857621051837ed769faefb4c2162e4" -"checksum fxhash 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" -"checksum generic-array 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c68f0274ae0e023facc3c97b2e00f076be70e254bc851d972503b328db79b2ec" -"checksum getrandom 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "7abc8dd8451921606d809ba32e95b6111925cd2906060d2dcc29c070220503eb" -"checksum gettext 0.3.0 (git+https://github.com/Plume-org/gettext/?rev=294c54d74c699fbc66502b480a37cc66c1daa7f3)" = "" -"checksum gettext-macros 0.4.0 (git+https://github.com/Plume-org/gettext-macros/?rev=a7c605f7edd6bfbfbfe7778026bfefd88d82db10)" = "" -"checksum gettext-utils 0.1.0 (git+https://github.com/Plume-org/gettext-macros/?rev=a7c605f7edd6bfbfbfe7778026bfefd88d82db10)" = "" -"checksum glob 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" -"checksum guid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e691c64d9b226c7597e29aeb46be753beb8c9eeef96d8c78dfd4d306338a38da" -"checksum guid-create 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "fcea207bf7a6092166ab590f98fe5dde5a7deed1f1920d98dcac31f80814c40d" -"checksum guid-macro-impl 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "08d50f7c496073b5a5dec0f6f1c149113a50960ce25dd2a559987a5a71190816" -"checksum guid-parser 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "abc7adb441828023999e6cff9eb1ea63156f7ec37ab5bf690005e8fc6c1148ad" -"checksum h2 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)" = "a5b34c246847f938a410a03c5458c7fee2274436675e76d8b903c08efc29c462" -"checksum hashbrown 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "479e9d9a1a3f8c489868a935b557ab5710e3e223836da2ecd52901d88935cb56" -"checksum heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205" -"checksum hermit-abi 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "8a0d737e0f947a1864e93d33fdef4af8445a00d1ed8dc0c8ddb73139ea6abf15" -"checksum hex 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "805026a5d0141ffc30abb3be3173848ad46a1b1664fe632428479619a3644d77" -"checksum hostname 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "21ceb46a83a85e824ef93669c8b390009623863b5c195d1ba747292c0c72f94e" -"checksum html5ever 0.23.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5ce65ac8028cf5a287a7dbf6c4e0a6cf2dcf022ed5b167a81bae66ebf599a8b7" -"checksum htmlescape 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e9025058dae765dee5070ec375f591e2ba14638c63feff74f13805a72e523163" -"checksum http 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)" = "d6ccf5ede3a895d8856620237b2f02972c1bbc78d2965ad7fe8838d4a0ed41f0" -"checksum http-body 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6741c859c1b2463a423a1dbce98d418e6c3c3fc720fb0d45528657320920292d" -"checksum httparse 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "cd179ae861f0c2e53da70d892f5f3029f9594be0c41dc5269cd371691b1dc2f9" -"checksum humantime 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f" -"checksum hyper 0.10.16 (registry+https://github.com/rust-lang/crates.io-index)" = "0a0652d9a2609a968c14be1a9ea00bf4b1d64e2e1f53a1b51b6fff3a6e829273" -"checksum hyper 0.12.35 (registry+https://github.com/rust-lang/crates.io-index)" = "9dbe6ed1438e1f8ad955a4701e9a944938e9519f6888d12d8558b645e247d5f6" -"checksum hyper-tls 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "3a800d6aa50af4b5850b2b0f659625ce9504df908e9733b635720483be26174f" -"checksum idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e" -"checksum idna 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "02e2673c30ee86b5b96a9cb52ad15718aa1f966f5ab9ad54a8b95d5ca33120a9" -"checksum if_chain 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "4bac95d9aa0624e7b78187d6fb8ab012b41d9f6f54b1bcb61e61c4845f8357ec" -"checksum indexmap 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "076f042c5b7b98f31d205f1249267e12a6518c1481e9dae9764af19b707d2292" -"checksum inotify 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "24e40d6fd5d64e2082e0c796495c8ef5ad667a96d03e5aaa0becfd9d47bcbfb8" -"checksum inotify-sys 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e74a1aa87c59aeff6ef2cc2fa62d41bc43f54952f55652656b18a02fd5e356c0" -"checksum iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e" -"checksum itertools 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f56a2d0bc861f9165be4eb3442afd3c236d8a98afd426f65d92324ae1091a484" -"checksum itoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "b8b7a7c0c47db5545ed3fef7468ee7bb5b74691498139e4b3f6a20685dc6dd8e" -"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" -"checksum language-tags 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a91d884b6667cd606bb5a69aa0c99ba811a115fc68915e7056ec08a46e93199a" -"checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" -"checksum lazycell 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b294d6fa9ee409a054354afc4352b0b9ef7ca222c69b8812cbea9e7d2bf3783f" -"checksum lettre 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c66afaa5dfadbb81d4e00fd1d1ab057c7cd4c799c5a44e0009386d553587e728" -"checksum lettre_email 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)" = "bbb68ca999042d965476e47bbdbacd52db0927348b6f8062c44dd04a3b1fd43b" -"checksum levenshtein_automata 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "73a004f877f468548d8d0ac4977456a249d8fabbdb8416c36db163dfc8f2e8ca" -"checksum lexical-core 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d7043aa5c05dd34fb73b47acb8c3708eac428de4545ea3682ed2f11293ebd890" -"checksum libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)" = "99e85c08494b21a9054e7fe1374a732aeadaff3980b6990b94bfd3a70f690005" -"checksum libloading 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f2b111a074963af1d37a139918ac6d49ad1d0d5e47f72fd55388619691a7d753" -"checksum libsqlite3-sys 0.17.3 (registry+https://github.com/rust-lang/crates.io-index)" = "56d90181c2904c287e5390186be820e5ef311a3c62edebb7d6ca3d6a48ce041d" -"checksum line-wrap 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f30344350a2a51da54c1d53be93fade8a237e545dbcc4bdbe635413f2117cab9" -"checksum linked-hash-map 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "ae91b68aebc4ddb91978b11a1b02ddd8602a05ec19002801c5666000e05e0f83" -"checksum lock_api 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "62ebf1391f6acad60e5c8b43706dde4582df75c06698ab44511d15016bc2442c" -"checksum lock_api 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "c4da24a77a3d8a6d4862d95f72e6fdb9c09a643ecdb402d754004a557f2bec75" -"checksum log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b" -"checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7" -"checksum mac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" -"checksum maplit 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" -"checksum markup5ever 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f1af46a727284117e09780d05038b1ce6fc9c76cc6df183c3dae5a8955a25e21" -"checksum matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" -"checksum maybe-uninit 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" -"checksum md5 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771" -"checksum memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3728d817d99e5ac407411fa471ff9800a778d88a24685968b36824eaf4bee400" -"checksum memmap 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6585fd95e7bb50d6cc31e20d4cf9afb4e2ba16c5846fc76793f11218da9c475b" -"checksum memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0f9dc261e2b62d7a622bf416ea3c5245cdd5d9a7fcc428c0d06804dfce1775b3" -"checksum memoffset 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b4fc2c02a7e374099d4ee95a193111f72d2110197fe200272371758f6c3643d8" -"checksum migrations_internals 1.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2b4fc84e4af020b837029e017966f86a1c2d5e83e64b589963d5047525995860" -"checksum migrations_macros 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9753f12909fd8d923f75ae5c3258cae1ed3c8ec052e1b38c93c21a6d157f789c" -"checksum mime 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "ba626b8a6de5da682e1caa06bdb42a335aee5a84db8e5046a3e8ab17ba0a3ae0" -"checksum mime 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)" = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" -"checksum mime_guess 1.8.8 (registry+https://github.com/rust-lang/crates.io-index)" = "216929a5ee4dd316b1702eedf5e74548c123d370f47841ceaac38ca154690ca3" -"checksum mime_guess 2.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2684d4c2e97d99848d30b324b00c8fcc7e5c897b7cbb5819b09e7c90e8baf212" -"checksum miniz_oxide 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "aa679ff6578b1cddee93d7e82e263b94a575e0bfced07284eb0c037c1d2416a5" -"checksum mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)" = "302dec22bcf6bae6dfb69c647187f4b4d0fb6f535521f7bc022430ce8e12008f" -"checksum mio-extras 2.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "52403fe290012ce777c4626790c8951324a2b9e3316b3143779c72b029742f19" -"checksum mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)" = "966257a94e196b11bb43aca423754d87429960a768de9414f3691d6957abf125" -"checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919" -"checksum multipart 0.16.1 (registry+https://github.com/rust-lang/crates.io-index)" = "136eed74cadb9edd2651ffba732b19a450316b680e4f48d6c79e905799e19d01" -"checksum murmurhash32 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d736ff882f0e85fe9689fb23db229616c4c00aee2b3ac282f666d8f20eb25d4a" -"checksum native-tls 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "2b0d88c06fe90d5ee94048ba40409ef1d9315d86f6f38c2efdaad4fb50c58b2d" -"checksum net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88" -"checksum new_debug_unreachable 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" -"checksum nix 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6c722bee1037d430d0f8e687bbdbf222f27cc6e4e68d5caf630857bb2b6dbdce" -"checksum nix 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)" = "50e4785f2c3b7589a0d0c1dd60285e1188adac4006e8abd6dd578e1567027363" -"checksum nodrop 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" -"checksum nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2ad2a91a8e869eeb30b9cb3119ae87773a8f4ae617f41b1eb9c154b2905f7bd6" -"checksum nom 5.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0b471253da97532da4b61552249c521e01e736071f71c1a4f7ebbfbf0a06aad6" -"checksum notify 4.0.15 (registry+https://github.com/rust-lang/crates.io-index)" = "80ae4a7688d1fab81c5bf19c64fc8db920be8d519ce6336ed4e7efe024724dbd" -"checksum num-integer 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "3f6ea62e9d81a77cd3ee9a2a5b9b609447857f3d358704331e4ef39eb247fcba" -"checksum num-rational 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "5c000134b5dbf44adc5cb772486d335293351644b801551abe8f75c84cfa4aef" -"checksum num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "c62be47e61d1842b9170f0fdeec8eba98e60e90e5446449a0545e5152acd7096" -"checksum num_cpus 1.13.0 (registry+https://github.com/rust-lang/crates.io-index)" = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3" -"checksum once_cell 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "d584f08c2d717d5c23a6414fc2822b71c651560713e54fa7eace675f758a355e" -"checksum onig 5.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e4e723fc996fff1aeab8f62205f3e8528bf498bdd5eadb2784d2d31f30077947" -"checksum onig_sys 69.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0a8d4efbf5f59cece01f539305191485b651acb3785b9d5eef05749f0496514e" -"checksum opaque-debug 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" -"checksum openssl 0.10.29 (registry+https://github.com/rust-lang/crates.io-index)" = "cee6d85f4cb4c4f59a6a85d5b68a233d280c82e29e822913b9c8b129fbf20bdd" -"checksum openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de" -"checksum openssl-sys 0.9.55 (registry+https://github.com/rust-lang/crates.io-index)" = "7717097d810a0f2e2323f9e5d11e71608355e24828410b55b9d4f18aa5f9a5d8" -"checksum owned-read 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b66d1e235abcebc845cf93550b89b74f468c051496fafb433ede4104b9f71ba1" -"checksum owning_ref 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6ff55baddef9e4ad00f88b6c743a2a8062d4c6ade126c2a528644b8e444d52ce" -"checksum parking_lot 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d3a704eb390aafdc107b0e392f56a82b668e3a71366993b5340f5833fd62505e" -"checksum parking_lot 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "f0802bff09003b291ba756dc7e79313e51cc31667e94afbe847def490424cde5" -"checksum parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f842b1982eb6c2fe34036a4fbfb06dd185a3f5c8edfaacdf7d1ea10b07de6252" -"checksum parking_lot_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ad7f7e6ebdc79edff6fdcb87a55b620174f7a989e3eb31b65231f4af57f00b8c" -"checksum parking_lot_core 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b876b1b9e7ac6e1a74a6da34d25c42e17e8862aa409cbbbdcfc8d86c6f3bc62b" -"checksum parking_lot_core 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0e136c1904604defe99ce5fd71a28d473fa60a12255d511aa78a9ddf11237aeb" -"checksum pear 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c26d2b92e47063ffce70d3e3b1bd097af121a9e0db07ca38a6cc1cf0cc85ff25" -"checksum pear_codegen 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "336db4a192cc7f54efeb0c4e11a9245394824cc3bcbd37ba3ff51240c35d7a6e" -"checksum peeking_take_while 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" -"checksum percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" -"checksum percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" -"checksum phf 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)" = "b3da44b85f8e8dfaec21adae67f95d93244b2ecf6ad2a692320598dcc8e6dd18" -"checksum phf_codegen 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)" = "b03e85129e324ad4166b06b2c7491ae27fe3ec353af72e72cd1654c7225d517e" -"checksum phf_generator 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)" = "09364cc93c159b8b06b1f4dd8a4398984503483891b0c26b867cf431fb132662" -"checksum phf_shared 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)" = "234f71a15de2288bcb7e3b6515828d22af7ec8598ee6d24c3b526fa0a80b67a0" -"checksum pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)" = "05da548ad6865900e60eaba7f589cc0783590a92e940c26953ff81ddbab2d677" -"checksum plist 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "5f2a9f075f6394100e7c105ed1af73fb1859d6fd14e49d4290d578120beb167f" -"checksum ppv-lite86 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "74490b50b9fbe561ac330df47c08f3f33073d2d00c150f719147d7c54522fa1b" -"checksum pq-sys 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "6ac25eee5a0582f45a67e837e350d784e7003bd29a5f460796772061ca49ffda" -"checksum precomputed-hash 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" -"checksum proc-macro-hack 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "463bf29e7f11344e58c9e01f171470ab15c925c6822ad75028cc1c0e1d1eb63b" -"checksum proc-macro-hack 0.5.15 (registry+https://github.com/rust-lang/crates.io-index)" = "0d659fe7c6d27f25e9d80a1a094c223f5246f6a6596453e09d7229bf42750b63" -"checksum proc-macro-hack-impl 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "38c47dcb1594802de8c02f3b899e2018c78291168a22c281be21ea0fb4796842" -"checksum proc-macro2 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "cd07deb3c6d1d9ff827999c7f9b04cdfd66b1b17ae508e14fe47b620f2282ae0" -"checksum proc-macro2 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "1b06e2f335f48d24442b35a19df506a835fb3547bc3c06ef27340da9acf5cae7" -"checksum proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)" = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" -"checksum proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)" = "df246d292ff63439fea9bc8c0a270bed0e390d5ebd4db4ba15aba81111b5abe3" -"checksum publicsuffix 1.5.4 (registry+https://github.com/rust-lang/crates.io-index)" = "3bbaa49075179162b49acac1c6aa45fb4dafb5f13cf6794276d77bc7fd95757b" -"checksum pulldown-cmark 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "eef52fac62d0ea7b9b4dc7da092aa64ea7ec3d90af6679422d3d7e0e14b6ee15" -"checksum quick-error 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" -"checksum quick-xml 0.12.4 (registry+https://github.com/rust-lang/crates.io-index)" = "1d8065cbb01701c11cc195cde85cbf39d1c6a80705b67a157ebb3042e0e5777f" -"checksum quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6e920b65c65f10b2ae65c831a81a073a89edd28c7cce89475bff467ab4167a" -"checksum quote 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1eca14c727ad12702eb4b6bfb5a232287dcf8385cb8ca83a3eeaf6519c44c408" -"checksum quote 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9949cfe66888ffe1d53e6ec9d9f3b70714083854be20fd5e271b232a017401e8" -"checksum quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1" -"checksum quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2bdc6c187c65bca4260c9011c9e3132efe4909da44726bad24cf7572ae338d7f" -"checksum r2d2 0.8.8 (registry+https://github.com/rust-lang/crates.io-index)" = "1497e40855348e4a8a40767d8e55174bce1e445a3ac9254ad44ad468ee0485af" -"checksum rand 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293" -"checksum rand 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c618c47cd3ebd209790115ab837de41425723956ad3ce2e6a7f09890947cacb9" -"checksum rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" -"checksum rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" -"checksum rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" -"checksum rand_chacha 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" -"checksum rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" -"checksum rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" -"checksum rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" -"checksum rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" -"checksum rand_hc 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" -"checksum rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08" -"checksum rand_jitter 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b" -"checksum rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" -"checksum rand_pcg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44" -"checksum rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c" -"checksum rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" -"checksum redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)" = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84" -"checksum regex 1.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "a6020f034922e3194c711b82a627453881bc4682166cabb07134a10c26ba7692" -"checksum regex-syntax 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "8e931c58b93d86f080c734bfd2bce7dd0079ae2331235818133c8be7f422e20e" -"checksum regex-syntax 0.6.17 (registry+https://github.com/rust-lang/crates.io-index)" = "7fe5bd57d1d7414c6b5ed48563a2c855d995ff777729dcd91c369ec7fea395ae" -"checksum remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4a83fa3702a688b9359eccba92d153ac33fd2e8462f9e0e3fdf155239ea7792e" -"checksum reqwest 0.9.24 (registry+https://github.com/rust-lang/crates.io-index)" = "f88643aea3c1343c804950d7bf983bd2067f5ab59db6d613a08e05572f2714ab" -"checksum ring 0.13.5 (registry+https://github.com/rust-lang/crates.io-index)" = "2c4db68a2e35f3497146b7e4563df7d4773a2433230c5e4b448328e31740458a" -"checksum rocket 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "42c1e9deb3ef4fa430d307bfccd4231434b707ca1328fae339c43ad1201cc6f7" -"checksum rocket_codegen 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "79aa1366f9b2eccddc05971e17c5de7bb75a5431eb12c2b5c66545fd348647f4" -"checksum rocket_contrib 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e0fa5c1392135adc0f96a02ba150ac4c765e27c58dbfd32aa40678e948f6e56f" -"checksum rocket_http 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b1391457ee4e80b40d4b57fa5765c0f2836b20d73bcbee4e3f35d93cf3b80817" -"checksum rocket_i18n 0.4.0 (git+https://github.com/Plume-org/rocket_i18n?rev=e922afa7c366038b3433278c03b1456b346074f2)" = "" -"checksum rpassword 4.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "99371657d3c8e4d816fb6221db98fa408242b0b53bac08f8676a41f8554fe99f" -"checksum rsass 0.9.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7f4534cc03040beacd2668621815f26fe57e5b7cfe085790f98e5e87c1612316" -"checksum ructe 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c85620b8046f88a870d93d90fa56904dec76cc79139bfcc22e71e87f0cd2169f" -"checksum runtime-fmt 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "703425f78450961e590726ac24d823e6dc2340dc18282cf0cb6a417b26ca2ce8" -"checksum rust-stemmers 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e46a2036019fdb888131db7a4c847a1063a7493f971ed94ea82c67eada63ca54" -"checksum rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783" -"checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" -"checksum ryu 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "535622e6be132bccd223f4bb2b8ac8d53cda3c7a6394944d3b2b33fb974f9d76" -"checksum safemem 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" -"checksum same-file 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -"checksum schannel 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)" = "039c25b130bd8c1321ee2d7de7fde2659fa9c2744e4bb29711cfc852ea53cd19" -"checksum scheduled-thread-pool 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "0988d7fdf88d5e5fcf5923a0f1e8ab345f3e98ab4bc6bc45a2d5ff7f7458fbf6" -"checksum scoped-pool 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "817a3a15e704545ce59ed2b5c60a5d32bda4d7869befb8b36667b658a6c00b43" -"checksum scopeguard 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "59a076157c1e2dc561d8de585151ee6965d910dd4dcb5dabb7ae3e83981a6c57" -"checksum scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27" -"checksum scopeguard 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" -"checksum security-framework 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "572dfa3a0785509e7a44b5b4bebcf94d41ba34e9ed9eb9df722545c3b3c4144a" -"checksum security-framework-sys 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "8ddb15a5fec93b7021b8a9e96009c5d8d51c15673569f7c0f6b7204e5b7b404f" -"checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" -"checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" -"checksum serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)" = "36df6ac6412072f67cf767ebbde4133a5b2e88e76dc6187fa7104cd16f783399" -"checksum serde_derive 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)" = "9e549e3abf4fb8621bd1609f11dfc9f5e50320802273b12f3811a67e6716ea6c" -"checksum serde_json 1.0.51 (registry+https://github.com/rust-lang/crates.io-index)" = "da07b57ee2623368351e9a0488bb0b261322a15a6e0ae53e243cbdc0f4208da9" -"checksum serde_qs 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d43eef44996bbe16e99ac720e1577eefa16f7b76b5172165c98ced20ae9903e1" -"checksum serde_urlencoded 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)" = "642dd69105886af2efd227f75a520ec9b44a820d65bc133a9131f7d229fd165a" -"checksum sha1 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d" -"checksum shlex 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7fdf1b9db47230893d76faad238fd6097fd6d6a9245cd7a4d90dbd639536bbd2" -"checksum shrinkwraprs 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "83695fde96cbe9e08f0e4eb96b1b56fdbd44f2098ee27462dda964c7745fddc7" -"checksum siphasher 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "0b8de496cf83d4ed58b6be86c3a275b8602f6ffe98d3024a869e124147a9a3ac" -"checksum slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" -"checksum smallvec 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "f7b0758c52e15a8b5e3691eae6cc559f08eee9406e548a4477ba4e67770a82b6" -"checksum smallvec 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "05720e22615919e4734f6a99ceae50d00226c3c5aca406e102ebc33298214e0a" -"checksum snap 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "95d697d63d44ad8b78b8d235bf85b34022a78af292c8918527c5f0cffdde7f43" -"checksum stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dba1a27d3efae4351c8051072d619e3ade2820635c3958d826bfea39d59b54c8" -"checksum state 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7345c971d1ef21ffdbd103a75990a15eb03604fc8b8852ca8cb418ee1a099028" -"checksum static_assertions 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "7f3eb36b47e512f8f1c9e3d10c2c1965bc992bd9cdb024fa581e2194501c83d3" -"checksum stdweb 0.4.18 (registry+https://github.com/rust-lang/crates.io-index)" = "a68c0ce28cf7400ed022e18da3c4591e14e1df02c70e93573cc59921b3923aeb" -"checksum stdweb-derive 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0e21ebd9179de08f2300a65454268a17ea3de204627458588c84319c4def3930" -"checksum stdweb-internal-macros 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "e68f7d08b76979a43e93fe043b66d2626e35d41d68b0b85519202c6dd8ac59fa" -"checksum stdweb-internal-runtime 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "d52317523542cc0af5b7e31017ad0f7d1e78da50455e38d5657cd17754f617da" -"checksum string 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d24114bfcceb867ca7f71a0d3fe45d45619ec47a6fbfa98cb14e14250bfa5d6d" -"checksum string_cache 0.7.5 (registry+https://github.com/rust-lang/crates.io-index)" = "89c058a82f9fd69b1becf8c274f412281038877c553182f1d02eb027045a2d67" -"checksum string_cache_codegen 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "f0f45ed1b65bf9a4bf2f7b7dc59212d1926e9eaf00fa998988e420fd124467c6" -"checksum string_cache_shared 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b1884d1bc09741d466d9b14e6d37ac89d6909cbcac41dd9ae982d4d063bbedfc" -"checksum strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" -"checksum syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d3b891b9015c88c576343b9b3e41c2c11a51c219ef067b264bd9c8aa9b441dad" -"checksum syn 0.12.15 (registry+https://github.com/rust-lang/crates.io-index)" = "c97c05b8ebc34ddd6b967994d5c6e9852fa92f8b82b3858c39451f97346dcce5" -"checksum syn 0.13.11 (registry+https://github.com/rust-lang/crates.io-index)" = "14f9bf6292f3a61d2c716723fdb789a41bbe104168e6f496dc6497e531ea1b9b" -"checksum syn 0.14.9 (registry+https://github.com/rust-lang/crates.io-index)" = "261ae9ecaa397c42b960649561949d69311f08eeaea86a65696e6e46517cf741" -"checksum syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)" = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5" -"checksum syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)" = "0df0eb663f387145cab623dea85b09c2c5b4b0aef44e945d928e682fce71bb03" -"checksum synom 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a393066ed9010ebaed60b9eafa373d4b1baac186dd7e008555b0f702b51945b6" -"checksum synstructure 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)" = "67656ea1dc1b41b1451851562ea232ec2e5a80242139f7e679ceccfb5d61f545" -"checksum syntect 3.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "955e9da2455eea5635f7032fc3a229908e6af18c39600313866095e07db0d8b8" -"checksum tantivy 0.10.3 (registry+https://github.com/rust-lang/crates.io-index)" = "4c5a174be9197eb9eb376b225bd2262810211609cd552dc6026505866ee74a75" -"checksum tantivy-fst 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "16b22af5ff09b8897093287642a5aaee6f30eb496526ef83a8dd0f4c636ac367" -"checksum tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "15f2b5fb00ccdf689e0149d1b1b3c03fead81c2b37735d812fa8bddbbf41b6d8" -"checksum tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6e24d9338a0a5be79593e2fa15a648add6138caa803e2d5bc782c371732ca9" -"checksum tendril 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "707feda9f2582d5d680d733e38755547a3e8fb471e7ba11452ecfd9ce93a5d3b" -"checksum termcolor 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bb6bfa289a4d7c5766392812c0a1f4c1ba45afa1ad47803c11e1f407d846d75f" -"checksum textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" -"checksum thread_local 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14" -"checksum time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "db8dcfca086c1143c9270ac42a2bbd8a7ee477b78ac8e45b19abfb0cbede4b6f" -"checksum tokio 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)" = "5a09c0b5bb588872ab2f09afa13ee6e9dac11e10a0ec9e8e3ba39a5a5d530af6" -"checksum tokio-buf 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8fb220f46c53859a4b7ec083e41dec9778ff0b1851c0942b211edb89e0ccdc46" -"checksum tokio-codec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "25b2998660ba0e70d18684de5d06b70b70a3a747469af9dea7618cc59e75976b" -"checksum tokio-current-thread 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "b1de0e32a83f131e002238d7ccde18211c0a5397f60cbfffcb112868c2e0e20e" -"checksum tokio-executor 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "fb2d1b8f4548dbf5e1f7818512e9c406860678f29c300cdf0ebac72d1a3a1671" -"checksum tokio-fs 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "297a1206e0ca6302a0eed35b700d292b275256f596e2f3fea7729d5e629b6ff4" -"checksum tokio-io 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "57fc868aae093479e3131e3d165c93b1c7474109d13c90ec0dda2a1bbfff0674" -"checksum tokio-reactor 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "09bc590ec4ba8ba87652da2068d150dcada2cfa2e07faae270a5e0409aa51351" -"checksum tokio-sync 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "edfe50152bc8164fcc456dab7891fa9bf8beaf01c5ee7e1dd43a397c3cf87dee" -"checksum tokio-tcp 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "98df18ed66e3b72e742f185882a9e201892407957e45fbff8da17ae7a7c51f72" -"checksum tokio-threadpool 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)" = "df720b6581784c118f0eb4310796b12b1d242a7eb95f716a8367855325c25f89" -"checksum tokio-timer 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)" = "93044f2d313c95ff1cb7809ce9a7a05735b012288a888b62d4434fd58c94f296" -"checksum tokio-udp 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "e2a0b10e610b39c38b031a2fcab08e4b82f16ece36504988dcbd81dbba650d82" -"checksum tokio-uds 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "5076db410d6fdc6523df7595447629099a1fdc47b3d9f896220780fa48faf798" -"checksum toml 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "758664fc71a3a69038656bee8b6be6477d2a6c315a6b81f7081f591bffa4111f" -"checksum traitobject 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "efd1f82c56340fdf16f2a953d7bda4f8fdffba13d93b00844c25572110b26079" -"checksum try-lock 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e604eb7b43c06650e854be16a2a03155743d3752dd1c943f6829e26b7a36e382" -"checksum try_from 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "283d3b89e1368717881a9d51dad843cc435380d8109c9e47d38780a324698d8b" -"checksum twoway 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "59b11b2b5241ba34be09c3cc85a36e56e48f9888862e19cedf23336d35316ed1" -"checksum typeable 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1410f6f91f21d1612654e7cc69193b0334f909dcf2c790c4826254fbb86f8887" -"checksum typenum 1.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "373c8a200f9e67a0c95e62a4f52fbf80c23b4381c05a17845531982fa99e6b33" -"checksum unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7f4765f83163b74f957c797ad9253caf97f103fb064d3999aea9568d09fc8a33" -"checksum unicase 2.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" -"checksum unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" -"checksum unicode-normalization 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "5479532badd04e128284890390c1e876ef7a993d0570b3597ae43dfa1d59afa4" -"checksum unicode-segmentation 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e83e153d1053cbb5a118eeff7fd5be06ed99153f00dbcd8ae310c5fb2b22edc0" -"checksum unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "caaa9d531767d1ff2150b9332433f32a24622147e5ebb1f26409d5da67afd479" -"checksum unicode-xid 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f860d7d29cf02cb2f3f359fd35991af3d30bac52c57d265a3c461074cb4dc" -"checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" -"checksum unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c" -"checksum unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "382810877fe448991dfc7f0dd6e3ae5d58088fd0ea5e35189655f84e6814fa56" -"checksum untrusted 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "55cd1f4b4e96b46aeb8d4855db4a7a9bd96eeeb5c6a1ab54593328761642ce2f" -"checksum url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a" -"checksum url 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "829d4a8476c35c9bf0bbce5a3b23f4106f79728039b726d292bb93bc106787cb" -"checksum utf-8 0.7.5 (registry+https://github.com/rust-lang/crates.io-index)" = "05e42f7c18b8f902290b009cde6d651262f956c98bc51bca4cd1d511c9cd85c7" -"checksum utf8-ranges 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b4ae116fef2b7fea257ed6440d3cfcff7f190865f170cdad00bb6465bf18ecba" -"checksum uuid 0.7.4 (registry+https://github.com/rust-lang/crates.io-index)" = "90dbc611eb48397705a6b0f6e917da23ae517e4d127123d2cf7674206627d32a" -"checksum validator 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "236a5eda3df2c877872e98dbc55d497d943792e6405d8fc65bd4f8a5e3b53c99" -"checksum validator_derive 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d360d6f5754972c0c1da14fb3d5580daa31aee566e1e45e2f8d3bf5950ecd3e9" -"checksum variance 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3abfc2be1fb59663871379ea884fd81de80c496f2274e021c01d6fe56cd77b05" -"checksum vcpkg 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "3fc439f2794e98976c88a2a2dafce96b930fe8010b0a256b3c2199a773933168" -"checksum vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a" -"checksum version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd" -"checksum version_check 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "078775d0255232fb988e6fccf26ddc9d1ac274299aaedcedce21c6f72cc533ce" -"checksum void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" -"checksum walkdir 2.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "777182bc735b6424e1a57516d35ed72cb8019d85c8c9bf536dccb3445c1a2f7d" -"checksum want 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b6395efa4784b027708f7451087e647ec73cc74f5d9bc2e418404248d679a230" -"checksum wasi 0.9.0+wasi-snapshot-preview1 (registry+https://github.com/rust-lang/crates.io-index)" = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" -"checksum wasm-bindgen 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)" = "2cc57ce05287f8376e998cbddfb4c8cb43b84a7ec55cf4551d7c00eef317a47f" -"checksum wasm-bindgen-backend 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)" = "d967d37bf6c16cca2973ca3af071d0a2523392e4a594548155d89a678f4237cd" -"checksum wasm-bindgen-macro 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)" = "8bd151b63e1ea881bb742cd20e1d6127cef28399558f3b5d415289bc41eee3a4" -"checksum wasm-bindgen-macro-support 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)" = "d68a5b36eef1be7868f668632863292e37739656a80fc4b9acec7b0bd35a4931" -"checksum wasm-bindgen-shared 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)" = "daf76fe7d25ac79748a37538b7daeed1c7a6867c92d3245c12c6222e4a20d639" -"checksum webfinger 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ec24b1b0700d4b466d280228ed0f62274eedeaa80206820f071fdc8ed787b664" -"checksum whatlang 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3437a8cc85accfcd03f291a2d2a6ae8400fa78ad6f2b6aa6c38d2badb6e378e9" -"checksum which 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b57acb10231b9493c8472b20cb57317d0679a49e0bdbee44b3b803a6473af164" -"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" -"checksum winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6" -"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" -"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" -"checksum winapi-util 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "fa515c5163a99cc82bab70fd3bfdd36d827be85de63737b40fcef2ce084a436e" -"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -"checksum winreg 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b2986deb581c4fe11b621998a5e53361efe6b48a151178d0cd9eeffa4dc6acc9" -"checksum winutil 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7daf138b6b14196e3830a588acf1e86966c694d3e8fb026fb105b8b5dca07e6e" -"checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" -"checksum xml-rs 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2bb76e5c421bbbeb8924c60c030331b345555024d56261dae8f3e786ed817c23" -"checksum yaml-rust 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "65923dd1784f44da1d2c3dbbc5e822045628c590ba72123e1c73d3c230c4434d" -"checksum yansi 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d60c3b48c9cdec42fb06b3b84b5b087405e1fa1c644a1af3930e4dfafe93de48" -"checksum yansi 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9fc79f4a1e39857fc00c3f662cbf2651c771f00e9c15fe2abc341806bd46bd71" +checksum = "9fc79f4a1e39857fc00c3f662cbf2651c771f00e9c15fe2abc341806bd46bd71" diff --git a/Cargo.toml b/Cargo.toml index 84402f71..34f98a0a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -22,7 +22,6 @@ lettre_email = "0.9.2" num_cpus = "1.10" rocket = { git = "https://github.com/SergioBenitez/Rocket", rev = "async" } rocket_contrib = { git = "https://github.com/SergioBenitez/Rocket", rev = "async" , features = ["json"] } -rocket_i18n = { git = "https://github.com/Plume-org/rocket_i18n", rev = "go-async" } rpassword = "4.0" runtime-fmt = "0.4.0" scheduled-thread-pool = "0.2.2" @@ -65,6 +64,12 @@ path = "plume-common" [dependencies.plume-models] path = "plume-models" +[dependencies.rocket_i18n] +git = "https://github.com/Plume-org/rocket_i18n" +branch = "go-async" +default-features = false +features = ["rocket"] + [build-dependencies] ructe = "0.9.0" rsass = "0.9" diff --git a/plume-common/Cargo.toml b/plume-common/Cargo.toml index 647305ec..d6a64aba 100644 --- a/plume-common/Cargo.toml +++ b/plume-common/Cargo.toml @@ -14,7 +14,7 @@ heck = "0.3.0" hex = "0.3" hyper = "0.12.33" openssl = "0.10.22" -rocket = "0.4.0" +rocket = { git = "https://github.com/SergioBenitez/Rocket", rev = "async" } reqwest = "0.9" serde = "1.0" serde_derive = "1.0" diff --git a/plume-models/Cargo.toml b/plume-models/Cargo.toml index d122187c..5ad8b1d5 100644 --- a/plume-models/Cargo.toml +++ b/plume-models/Cargo.toml @@ -15,8 +15,7 @@ itertools = "0.8.0" lazy_static = "1.0" migrations_internals= "1.4.0" openssl = "0.10.22" -rocket = "0.4.0" -rocket_i18n = { git = "https://github.com/Plume-org/rocket_i18n", rev = "e922afa7c366038b3433278c03b1456b346074f2" } +rocket = { git = "https://github.com/SergioBenitez/Rocket", rev = "async" } reqwest = "0.9" scheduled-thread-pool = "0.2.2" serde = "1.0" @@ -48,6 +47,12 @@ path = "../plume-common" [dependencies.plume-macro] path = "../plume-macro" +[dependencies.rocket_i18n] +git = "https://github.com/Plume-org/rocket_i18n" +branch = "go-async" +default-features = false +features = ["rocket"] + [dev-dependencies] diesel_migrations = "1.3.0" -- 2.38.5 From ec9b699c6e1f2c1b9e8f2b632ef954d73aca2273 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Igor=20Gali=C4=87?= Date: Wed, 22 Jan 2020 22:35:31 +0100 Subject: [PATCH 04/46] convert plume-common to rocket async it only took 3 hours of @jebrosen's patient help. --- plume-common/src/activity_pub/mod.rs | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/plume-common/src/activity_pub/mod.rs b/plume-common/src/activity_pub/mod.rs index 58c270e2..3a473499 100644 --- a/plume-common/src/activity_pub/mod.rs +++ b/plume-common/src/activity_pub/mod.rs @@ -4,7 +4,7 @@ use reqwest::r#async::ClientBuilder; use rocket::{ http::Status, request::{FromRequest, Request}, - response::{Responder, Response}, + response::{Responder, Response, ResultFuture}, Outcome, }; use serde_json; @@ -63,14 +63,21 @@ impl ActivityStream { } } -impl<'r, O: Object> Responder<'r> for ActivityStream { - fn respond_to(self, request: &Request<'_>) -> Result, Status> { - let mut json = serde_json::to_value(&self.0).map_err(|_| Status::InternalServerError)?; - json["@context"] = context(); - serde_json::to_string(&json).respond_to(request).map(|r| { - Response::build_from(r) - .raw_header("Content-Type", "application/activity+json") - .finalize() +impl<'r, O: Object + Send + 'r> Responder<'r> for ActivityStream { + fn respond_to(self, request: &'r Request<'_>) -> ResultFuture<'r> { + Box::pin(async move { + let mut json = serde_json::to_value(&self.0).map_err(|_| Status::InternalServerError)?; + json["@context"] = context(); + let result = serde_json::to_string(&json).map_err(rocket::response::Debug); + match result.respond_to(request).await { + Ok(r) => { + Response::build_from(r) + .raw_header("Content-Type", "application/activity+json") + .ok() + .await + } + Err(e) => Err(e), + } }) } } -- 2.38.5 From 75722abc9e38df1ac4bbf68144387714bbd772fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Igor=20Gali=C4=87?= Date: Wed, 22 Jan 2020 22:41:36 +0100 Subject: [PATCH 05/46] rocket does not need decl_macro anymore --- src/main.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.rs b/src/main.rs index 4d2f3d52..27b1282b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,5 +1,5 @@ #![allow(clippy::too_many_arguments)] -#![feature(decl_macro, proc_macro_hygiene, try_trait)] +#![feature(proc_macro_hygiene, try_trait)] #[macro_use] extern crate gettext_macros; -- 2.38.5 From fd9764ff1708a1abaf6410b35ad03a6390a0d930 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Igor=20Gali=C4=87?= Date: Thu, 23 Jan 2020 19:38:59 +0100 Subject: [PATCH 06/46] plume-common: also make requests async --- plume-common/src/activity_pub/mod.rs | 59 +++++++++++++++------------- 1 file changed, 31 insertions(+), 28 deletions(-) diff --git a/plume-common/src/activity_pub/mod.rs b/plume-common/src/activity_pub/mod.rs index 3a473499..477f3ba7 100644 --- a/plume-common/src/activity_pub/mod.rs +++ b/plume-common/src/activity_pub/mod.rs @@ -3,7 +3,7 @@ use array_tool::vec::Uniq; use reqwest::r#async::ClientBuilder; use rocket::{ http::Status, - request::{FromRequest, Request}, + request::{FromRequestFuture, FromRequestAsync, Request}, response::{Responder, Response, ResultFuture}, Outcome, }; @@ -84,35 +84,38 @@ impl<'r, O: Object + Send + 'r> Responder<'r> for ActivityStream { #[derive(Clone)] pub struct ApRequest; -impl<'a, 'r> FromRequest<'a, 'r> for ApRequest { +impl<'a, 'r> FromRequestAsync<'a, 'r> for ApRequest { type Error = (); - fn from_request(request: &'a Request<'r>) -> Outcome { - request - .headers() - .get_one("Accept") - .map(|header| { - header - .split(',') - .map(|ct| match ct.trim() { - // bool for Forward: true if found a valid Content-Type for Plume first (HTML), false otherwise - "application/ld+json; profile=\"https://w3.org/ns/activitystreams\"" - | "application/ld+json;profile=\"https://w3.org/ns/activitystreams\"" - | "application/activity+json" - | "application/ld+json" => Outcome::Success(ApRequest), - "text/html" => Outcome::Forward(true), - _ => Outcome::Forward(false), - }) - .fold(Outcome::Forward(false), |out, ct| { - if out.clone().forwarded().unwrap_or_else(|| out.is_success()) { - out - } else { - ct - } - }) - .map_forward(|_| ()) - }) - .unwrap_or(Outcome::Forward(())) + fn from_request(request: &'a Request<'r>) -> FromRequestFuture<'a, Self, Self::Error> { + Box::pin(async move { + request + .headers() + .get_one("Accept") + .map(|header| { + header + .split(',') + .map(|ct| match ct.trim() { + // bool for Forward: true if found a valid Content-Type for Plume first (HTML), + // false otherwise + "application/ld+json; profile=\"https://w3.org/ns/activitystreams\"" + | "application/ld+json;profile=\"https://w3.org/ns/activitystreams\"" + | "application/activity+json" + | "application/ld+json" => Outcome::Success(ApRequest), + "text/html" => Outcome::Forward(true), + _ => Outcome::Forward(false), + }) + .fold(Outcome::Forward(false), |out, ct| { + if out.clone().forwarded().unwrap_or_else(|| out.is_success()) { + out + } else { + ct + } + }) + .map_forward(|_| ()) + }) + .unwrap_or(Outcome::Forward(())) + }) } } pub fn broadcast(sender: &S, act: A, to: Vec) -- 2.38.5 From 909f677bdd6d2ea32d60d5ef7c160bd191ae76d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Igor=20Gali=C4=87?= Date: Thu, 23 Jan 2020 19:41:46 +0100 Subject: [PATCH 07/46] plume-models: convert admin & api-tokens to async MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit n.b.: I do *not* like the error handling in api_tokens 😒️ --- plume-models/src/admin.rs | 38 +++++++++++++----------- plume-models/src/api_tokens.rs | 53 ++++++++++++++++++---------------- 2 files changed, 49 insertions(+), 42 deletions(-) diff --git a/plume-models/src/admin.rs b/plume-models/src/admin.rs index a4fa0455..325198ea 100644 --- a/plume-models/src/admin.rs +++ b/plume-models/src/admin.rs @@ -1,38 +1,42 @@ use crate::users::User; use rocket::{ http::Status, - request::{self, FromRequest, Request}, + request::{self, FromRequestAsync, Request}, Outcome, }; /// Wrapper around User to use as a request guard on pages reserved to admins. pub struct Admin(pub User); -impl<'a, 'r> FromRequest<'a, 'r> for Admin { +impl<'a, 'r> FromRequestAsync<'a, 'r> for Admin { type Error = (); - fn from_request(request: &'a Request<'r>) -> request::Outcome { - let user = request.guard::()?; - if user.is_admin() { - Outcome::Success(Admin(user)) - } else { - Outcome::Failure((Status::Unauthorized, ())) - } + fn from_request(request: &'a Request<'r>) -> request::FromRequestFuture<'a, Self, Self::Error> { + Box::pin(async move { + let user = try_outcome!(request.guard::()); + if user.is_admin() { + Outcome::Success(Admin(user)) + } else { + Outcome::Failure((Status::Unauthorized, ())) + } + }) } } /// Same as `Admin` but for moderators. pub struct Moderator(pub User); -impl<'a, 'r> FromRequest<'a, 'r> for Moderator { +impl<'a, 'r> FromRequestAsync<'a, 'r> for Moderator { type Error = (); - fn from_request(request: &'a Request<'r>) -> request::Outcome { - let user = request.guard::()?; - if user.is_moderator() { - Outcome::Success(Moderator(user)) - } else { - Outcome::Failure((Status::Unauthorized, ())) - } + fn from_request(request: &'a Request<'r>) -> request::FromRequestFuture<'a, Self, Self::Error> { + Box::pin(async move { + let user = try_outcome!(request.guard::()); + if user.is_moderator() { + Outcome::Success(Moderator(user)) + } else { + Outcome::Failure((Status::Unauthorized, ())) + } + }) } } diff --git a/plume-models/src/api_tokens.rs b/plume-models/src/api_tokens.rs index 5e2eca07..5415111c 100644 --- a/plume-models/src/api_tokens.rs +++ b/plume-models/src/api_tokens.rs @@ -3,7 +3,7 @@ use chrono::NaiveDateTime; use diesel::{self, ExpressionMethods, QueryDsl, RunQueryDsl}; use rocket::{ http::Status, - request::{self, FromRequest, Request}, + request::{self, FromRequestAsync, Request}, Outcome, }; @@ -76,34 +76,37 @@ pub enum TokenError { DbError, } -impl<'a, 'r> FromRequest<'a, 'r> for ApiToken { +impl<'a, 'r> FromRequestAsync<'a, 'r> for ApiToken { type Error = TokenError; - fn from_request(request: &'a Request<'r>) -> request::Outcome { - let headers: Vec<_> = request.headers().get("Authorization").collect(); - if headers.len() != 1 { - return Outcome::Failure((Status::BadRequest, TokenError::NoHeader)); - } + fn from_request(request: &'a Request<'r>) -> request::FromRequestFuture<'a, Self, Self::Error> { + Box::pin(async move { + let headers: Vec<_> = request.headers().get("Authorization").collect(); + if headers.len() != 1 { + return Outcome::Failure((Status::BadRequest, TokenError::NoHeader)); + } - let mut parsed_header = headers[0].split(' '); - let auth_type = parsed_header.next().map_or_else( - || Outcome::Failure((Status::BadRequest, TokenError::NoType)), - Outcome::Success, - )?; - let val = parsed_header.next().map_or_else( - || Outcome::Failure((Status::BadRequest, TokenError::NoValue)), - Outcome::Success, - )?; - - if auth_type == "Bearer" { - let conn = request - .guard::() - .map_failure(|_| (Status::InternalServerError, TokenError::DbError))?; - if let Ok(token) = ApiToken::find_by_value(&*conn, val) { - return Outcome::Success(token); + let mut parsed_header = headers[0].split(' '); + if let Some(auth_type) = parsed_header.next() { + if let Some(val) = parsed_header.next() { + if auth_type == "Bearer" { + if let Outcome::Success(conn) = request.guard::() { + if let Ok(token) = ApiToken::find_by_value(&*conn, val) { + return Outcome::Success(token); + } + } else { + return Outcome::Failure((Status::InternalServerError, TokenError::DbError)); + } + } + } else { + return Outcome::Failure((Status::BadRequest, TokenError::NoValue)); + } + } else { + return Outcome::Failure((Status::BadRequest, TokenError::NoType)); } - } - Outcome::Forward(()) + + Outcome::Forward(()) + }) } } -- 2.38.5 From 944f8c42fae4ddf8c8c5a02aeca55437fa2c62dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Igor=20Gali=C4=87?= Date: Thu, 23 Jan 2020 21:57:33 +0100 Subject: [PATCH 08/46] plume-models: convert api-tokens. use DbConn::from_request() directly there doesn't seem to be a request.guard_async (yet?) --- plume-models/src/api_tokens.rs | 2 +- plume-models/src/db_conn.rs | 19 ++++++++++--------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/plume-models/src/api_tokens.rs b/plume-models/src/api_tokens.rs index 5415111c..bcf49646 100644 --- a/plume-models/src/api_tokens.rs +++ b/plume-models/src/api_tokens.rs @@ -90,7 +90,7 @@ impl<'a, 'r> FromRequestAsync<'a, 'r> for ApiToken { if let Some(auth_type) = parsed_header.next() { if let Some(val) = parsed_header.next() { if auth_type == "Bearer" { - if let Outcome::Success(conn) = request.guard::() { + if let Outcome::Success(conn) = DbConn::from_request(request).await { if let Ok(token) = ApiToken::find_by_value(&*conn, val) { return Outcome::Success(token); } diff --git a/plume-models/src/db_conn.rs b/plume-models/src/db_conn.rs index 5e461b18..169690a6 100644 --- a/plume-models/src/db_conn.rs +++ b/plume-models/src/db_conn.rs @@ -6,8 +6,8 @@ use diesel::r2d2::{ use diesel::{dsl::sql_query, ConnectionError, RunQueryDsl}; use rocket::{ http::Status, - request::{self, FromRequest}, - Outcome, Request, State, + request::{self, FromRequestAsync}, + Outcome, Request, }; use std::ops::Deref; @@ -21,15 +21,16 @@ pub struct DbConn(pub PooledConnection>); /// Attempts to retrieve a single connection from the managed database pool. If /// no pool is currently managed, fails with an `InternalServerError` status. If /// no connections are available, fails with a `ServiceUnavailable` status. -impl<'a, 'r> FromRequest<'a, 'r> for DbConn { +impl<'a, 'r> FromRequestAsync<'a, 'r> for DbConn { type Error = (); - fn from_request(request: &'a Request<'r>) -> request::Outcome { - let pool = request.guard::>()?; - match pool.get() { - Ok(conn) => Outcome::Success(DbConn(conn)), - Err(_) => Outcome::Failure((Status::ServiceUnavailable, ())), - } + fn from_request(request: &'a Request<'r>) -> request::FromRequestFuture<'a, Self, Self::Error> { + Box::pin(async move { + match DbConn::from_request(request).await { + Outcome::Success(a) => return Outcome::Success(a), + Outcome::Failure(_) => return Outcome::Failure((Status::ServiceUnavailable, ())), + }; + }) } } -- 2.38.5 From ce119ffe50e7237c38fbaf7b5869b8cfdfb8c27a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Igor=20Gali=C4=87?= Date: Sat, 25 Jan 2020 23:37:44 +0100 Subject: [PATCH 09/46] start making PlumeRocket async --- plume-models/src/admin.rs | 4 ++-- plume-models/src/plume_rocket.rs | 36 +++++++++++++++++--------------- plume-models/src/users.rs | 22 ++++++++++--------- 3 files changed, 33 insertions(+), 29 deletions(-) diff --git a/plume-models/src/admin.rs b/plume-models/src/admin.rs index 325198ea..1dd810a9 100644 --- a/plume-models/src/admin.rs +++ b/plume-models/src/admin.rs @@ -13,7 +13,7 @@ impl<'a, 'r> FromRequestAsync<'a, 'r> for Admin { fn from_request(request: &'a Request<'r>) -> request::FromRequestFuture<'a, Self, Self::Error> { Box::pin(async move { - let user = try_outcome!(request.guard::()); + let user = try_outcome!(User::from_request(request).await); if user.is_admin() { Outcome::Success(Admin(user)) } else { @@ -31,7 +31,7 @@ impl<'a, 'r> FromRequestAsync<'a, 'r> for Moderator { fn from_request(request: &'a Request<'r>) -> request::FromRequestFuture<'a, Self, Self::Error> { Box::pin(async move { - let user = try_outcome!(request.guard::()); + let user = try_outcome!(User::from_request(request).await); if user.is_moderator() { Outcome::Success(Moderator(user)) } else { diff --git a/plume-models/src/plume_rocket.rs b/plume-models/src/plume_rocket.rs index 0a2b3cec..ca5f05df 100644 --- a/plume-models/src/plume_rocket.rs +++ b/plume-models/src/plume_rocket.rs @@ -4,7 +4,7 @@ pub use self::module::PlumeRocket; mod module { use crate::{db_conn::DbConn, search, users}; use rocket::{ - request::{self, FlashMessage, FromRequest, Request}, + request::{self, FlashMessage, FromRequest, FromRequestAsync, Request}, Outcome, State, }; use scheduled_thread_pool::ScheduledThreadPool; @@ -20,23 +20,25 @@ mod module { pub flash_msg: Option<(String, String)>, } - impl<'a, 'r> FromRequest<'a, 'r> for PlumeRocket { + impl<'a, 'r> FromRequestAsync<'a, 'r> for PlumeRocket { type Error = (); - fn from_request(request: &'a Request<'r>) -> request::Outcome { - let conn = request.guard::()?; - let intl = request.guard::()?; - let user = request.guard::().succeeded(); - let worker = request.guard::<'_, State<'_, Arc>>()?; - let searcher = request.guard::<'_, State<'_, Arc>>()?; - let flash_msg = request.guard::>().succeeded(); - Outcome::Success(PlumeRocket { - conn, - intl, - user, - flash_msg: flash_msg.map(|f| (f.name().into(), f.msg().into())), - worker: worker.clone(), - searcher: searcher.clone(), + fn from_request(request: &'a Request<'r>) -> request::FromRequestFuture<'a, Self, Self::Error> { + Box::pin(async move { + let conn = try_outcome!(DbConn::from_request(request).await); + let intl = try_outcome!(rocket_i18n::I18n::from_request(request).await); + let user = try_outcome!(users::User::from_request(request).await); + let worker = request.guard::<'_, State<'_, Arc>>()?; + let searcher = request.guard::<'_, State<'_, Arc>>()?; + let flash_msg = request.guard::>().succeeded(); + Outcome::Success(PlumeRocket { + conn, + intl, + user, + flash_msg: flash_msg.map(|f| (f.name().into(), f.msg().into())), + worker: worker.clone(), + searcher: searcher.clone(), + }) }) } } @@ -64,7 +66,7 @@ mod module { type Error = (); fn from_request(request: &'a Request<'r>) -> request::Outcome { - let conn = request.guard::()?; + let conn = DbConn::from_request(request).await; let user = request.guard::().succeeded(); let worker = request.guard::<'_, State<'_, Arc>>()?; let searcher = request.guard::<'_, State<'_, Arc>>()?; diff --git a/plume-models/src/users.rs b/plume-models/src/users.rs index 7da04d4a..5d1dd5fa 100644 --- a/plume-models/src/users.rs +++ b/plume-models/src/users.rs @@ -35,7 +35,7 @@ use reqwest::{ }; use rocket::{ outcome::IntoOutcome, - request::{self, FromRequest, Request}, + request::{self, FromRequestAsync, Request}, }; use serde_json; use std::{ @@ -789,17 +789,19 @@ impl User { } } -impl<'a, 'r> FromRequest<'a, 'r> for User { +impl<'a, 'r> FromRequestAsync<'a, 'r> for User { type Error = (); - fn from_request(request: &'a Request<'r>) -> request::Outcome { - let conn = request.guard::()?; - request - .cookies() - .get_private(AUTH_COOKIE) - .and_then(|cookie| cookie.value().parse().ok()) - .and_then(|id| User::get(&*conn, id).ok()) - .or_forward(()) + fn from_request(request: &'a Request<'r>) -> request::FromRequestFuture<'a, Self, Self::Error> { + Box::pin(async move { + let conn = try_outcome!(DbConn::from_request(request).await); + request + .cookies() + .get_private(AUTH_COOKIE) + .and_then(|cookie| cookie.value().parse().ok()) + .and_then(|id| User::get(&*conn, id).ok()) + .or_forward(()) + }) } } -- 2.38.5 From 59e5c49aa86124a57d10f5401dc617025e859a44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Igor=20Gali=C4=87?= Date: Sun, 26 Jan 2020 20:59:48 +0100 Subject: [PATCH 10/46] convert plume-models to all async where sensible! note that State has no asynchronous work to do, so wrapping it up in async makes no sense. --- plume-models/src/db_conn.rs | 2 +- plume-models/src/plume_rocket.rs | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/plume-models/src/db_conn.rs b/plume-models/src/db_conn.rs index 169690a6..a44f5ecb 100644 --- a/plume-models/src/db_conn.rs +++ b/plume-models/src/db_conn.rs @@ -28,7 +28,7 @@ impl<'a, 'r> FromRequestAsync<'a, 'r> for DbConn { Box::pin(async move { match DbConn::from_request(request).await { Outcome::Success(a) => return Outcome::Success(a), - Outcome::Failure(_) => return Outcome::Failure((Status::ServiceUnavailable, ())), + _ => return Outcome::Failure((Status::ServiceUnavailable, ())), }; }) } diff --git a/plume-models/src/plume_rocket.rs b/plume-models/src/plume_rocket.rs index ca5f05df..7e297d0f 100644 --- a/plume-models/src/plume_rocket.rs +++ b/plume-models/src/plume_rocket.rs @@ -4,7 +4,7 @@ pub use self::module::PlumeRocket; mod module { use crate::{db_conn::DbConn, search, users}; use rocket::{ - request::{self, FlashMessage, FromRequest, FromRequestAsync, Request}, + request::{self, FlashMessage, FromRequestAsync, Request}, Outcome, State, }; use scheduled_thread_pool::ScheduledThreadPool; @@ -28,13 +28,13 @@ mod module { let conn = try_outcome!(DbConn::from_request(request).await); let intl = try_outcome!(rocket_i18n::I18n::from_request(request).await); let user = try_outcome!(users::User::from_request(request).await); - let worker = request.guard::<'_, State<'_, Arc>>()?; - let searcher = request.guard::<'_, State<'_, Arc>>()?; + let worker = try_outcome!(request.guard::<'_, State<'_, Arc>>()); + let searcher = try_outcome!(request.guard::<'_, State<'_, Arc>>()); let flash_msg = request.guard::>().succeeded(); Outcome::Success(PlumeRocket { conn, intl, - user, + user: Some(user), flash_msg: flash_msg.map(|f| (f.name().into(), f.msg().into())), worker: worker.clone(), searcher: searcher.clone(), -- 2.38.5 From b51551973ab598d2bbfcaf9a6b07cd06d3feae51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Igor=20Gali=C4=87?= Date: Mon, 27 Jan 2020 20:45:24 +0100 Subject: [PATCH 11/46] start fixing tests in plume-models --- plume-models/src/plume_rocket.rs | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/plume-models/src/plume_rocket.rs b/plume-models/src/plume_rocket.rs index 7e297d0f..358339ac 100644 --- a/plume-models/src/plume_rocket.rs +++ b/plume-models/src/plume_rocket.rs @@ -48,7 +48,7 @@ mod module { mod module { use crate::{db_conn::DbConn, search, users}; use rocket::{ - request::{self, FromRequest, Request}, + request::{self, FromRequestAsync, Request}, Outcome, State, }; use scheduled_thread_pool::ScheduledThreadPool; @@ -62,19 +62,21 @@ mod module { pub worker: Arc, } - impl<'a, 'r> FromRequest<'a, 'r> for PlumeRocket { + impl<'a, 'r> FromRequestAsync<'a, 'r> for PlumeRocket { type Error = (); - fn from_request(request: &'a Request<'r>) -> request::Outcome { - let conn = DbConn::from_request(request).await; - let user = request.guard::().succeeded(); - let worker = request.guard::<'_, State<'_, Arc>>()?; - let searcher = request.guard::<'_, State<'_, Arc>>()?; - Outcome::Success(PlumeRocket { - conn, - user, - worker: worker.clone(), - searcher: searcher.clone(), + fn from_request(request: &'a Request<'r>) -> request::FromRequestFuture<'a, Self, Self::Error> { + Box::pin(async move { + let conn = try_outcome!(DbConn::from_request(request).await); + let user = try_outcome!(users::User::from_request(request).await); + let worker = try_outcome!(request.guard::<'_, State<'_, Arc>>()); + let searcher = try_outcome!(request.guard::<'_, State<'_, Arc>>()); + Outcome::Success(PlumeRocket { + conn, + user: Some(user), + worker: worker.clone(), + searcher: searcher.clone(), + }) }) } } -- 2.38.5 From 45c335e17beabae9be0ddb2d22c90d11cfdc3302 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Igor=20Gali=C4=87?= Date: Mon, 27 Jan 2020 23:44:27 +0100 Subject: [PATCH 12/46] "manually" create ETag and Cache-Control headers --- src/routes/mod.rs | 13 ++++++------- src/template_utils.rs | 5 ++--- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src/routes/mod.rs b/src/routes/mod.rs index 026029a7..4583a8a8 100755 --- a/src/routes/mod.rs +++ b/src/routes/mod.rs @@ -7,9 +7,8 @@ use chrono::naive::NaiveDateTime; use plume_models::{posts::Post, Connection, CONFIG, ITEMS_PER_PAGE}; use rocket::{ http::{ - hyper::header::{CacheControl, CacheDirective, ETag, EntityTag}, uri::{FromUriParam, Query}, - RawStr, Status, + Header, RawStr, Status, }, request::{self, FromFormValue, FromRequest, Request}, response::{self, Flash, NamedFile, Redirect, Responder, Response}, @@ -208,7 +207,7 @@ pub mod well_known; #[response()] pub struct CachedFile { inner: NamedFile, - cache_control: CacheControl, + cache_control: Header<'static>, } #[derive(Debug)] @@ -228,12 +227,12 @@ impl<'r> Responder<'r> for ThemeFile { { Response::build() .status(Status::NotModified) - .header(ETag(EntityTag::strong(etag))) + .header("ETag", etag) .ok() } else { Response::build() .merge(self.0.respond_to(r)?) - .header(ETag(EntityTag::strong(etag))) + .header("ETag", etag) .ok() } } @@ -256,7 +255,7 @@ pub fn plume_media_files(file: PathBuf) -> Option { .ok() .map(|f| CachedFile { inner: f, - cache_control: CacheControl(vec![CacheDirective::MaxAge(60 * 60 * 24 * 30)]), + cache_control: Header::new("Cache-Control", format!("max-age={}", 60 * 60 * 24 * 30)), }) } #[get("/static/", rank = 3)] @@ -265,6 +264,6 @@ pub fn static_files(file: PathBuf) -> Option { .ok() .map(|f| CachedFile { inner: f, - cache_control: CacheControl(vec![CacheDirective::MaxAge(60 * 60 * 24 * 30)]), + cache_control: Header::new("Cache-Control", format!("max-age={}", 60 * 60 * 24 * 30)), }) } diff --git a/src/template_utils.rs b/src/template_utils.rs index 26bf58b4..4c371ddd 100644 --- a/src/template_utils.rs +++ b/src/template_utils.rs @@ -1,7 +1,6 @@ use plume_models::{notifications::*, users::User, Connection, PlumeRocket}; use crate::templates::Html; -use rocket::http::hyper::header::{ETag, EntityTag}; use rocket::http::{Method, Status}; use rocket::request::Request; use rocket::response::{self, content::Html as HtmlCt, Responder, Response}; @@ -67,12 +66,12 @@ impl<'r> Responder<'r> for Ructe { { Response::build() .status(Status::NotModified) - .header(ETag(EntityTag::strong(etag))) + .header("ETag", etag) .ok() } else { Response::build() .merge(HtmlCt(self.0).respond_to(r)?) - .header(ETag(EntityTag::strong(etag))) + .header("ETag", etag) .ok() } } -- 2.38.5 From 022e037eeaf91336726233c84a9d944969863e04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Igor=20Gali=C4=87?= Date: Mon, 27 Jan 2020 23:45:09 +0100 Subject: [PATCH 13/46] when using macros!() we need to import the things that they use --- src/routes/instance.rs | 1 + src/routes/posts.rs | 2 +- templates/base.rs.html | 4 ++++ templates/blogs/details.rs.html | 2 ++ templates/blogs/edit.rs.html | 2 ++ templates/posts/details.rs.html | 2 ++ 6 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/routes/instance.rs b/src/routes/instance.rs index 72d41c3f..59407720 100644 --- a/src/routes/instance.rs +++ b/src/routes/instance.rs @@ -7,6 +7,7 @@ use rocket_i18n::I18n; use scheduled_thread_pool::ScheduledThreadPool; use serde_json; use std::str::FromStr; +use std::path::PathBuf; use validator::{Validate, ValidationErrors}; use crate::inbox; diff --git a/src/routes/posts.rs b/src/routes/posts.rs index d070bb5f..c10ae0da 100644 --- a/src/routes/posts.rs +++ b/src/routes/posts.rs @@ -11,7 +11,7 @@ use std::{ use validator::{Validate, ValidationError, ValidationErrors}; use crate::routes::{ - comments::NewCommentForm, errors::ErrorPage, ContentLen, RemoteForm, RespondOrRedirect, + comments::NewCommentForm, errors::ErrorPage, Page, ContentLen, RemoteForm, RespondOrRedirect, }; use crate::template_utils::{IntoContext, Ructe}; use plume_common::activity_pub::{broadcast, ActivityStream, ApRequest}; diff --git a/templates/base.rs.html b/templates/base.rs.html index 110c764d..e5310276 100644 --- a/templates/base.rs.html +++ b/templates/base.rs.html @@ -1,8 +1,12 @@ @use plume_models::CONFIG; @use plume_models::instance::Instance; +@use rocket::http::RawStr; +@use rocket::request::Form; @use std::path::Path; +@use std::path::PathBuf; @use crate::template_utils::*; @use crate::routes::*; +@use crate::routes::search::SearchQuery; @(ctx: BaseContext, title: String, head: Content, header: Content, content: Content) diff --git a/templates/blogs/details.rs.html b/templates/blogs/details.rs.html index 5dacdd98..8b6d58e4 100644 --- a/templates/blogs/details.rs.html +++ b/templates/blogs/details.rs.html @@ -2,7 +2,9 @@ @use plume_models::instance::Instance; @use plume_models::posts::Post; @use plume_models::users::User; +@use rocket::http::RawStr; @use std::path::Path; +@use std::path::PathBuf; @use crate::templates::{base, partials::post_card}; @use crate::template_utils::*; @use crate::routes::*; diff --git a/templates/blogs/edit.rs.html b/templates/blogs/edit.rs.html index b7806830..ef89d684 100644 --- a/templates/blogs/edit.rs.html +++ b/templates/blogs/edit.rs.html @@ -5,10 +5,12 @@ @use crate::template_utils::*; @use crate::templates::base; @use crate::templates::partials::image_select; +@use crate::routes::Page; @use crate::routes::blogs; @use crate::routes::blogs::EditForm; @use crate::routes::medias; + @(ctx: BaseContext, blog: &Blog, medias: Vec, form: &EditForm, errors: ValidationErrors) @:base(ctx, i18n!(ctx.1, "Edit \"{}\""; &blog.title), {}, { diff --git a/templates/posts/details.rs.html b/templates/posts/details.rs.html index 54482ed6..bc1db2dc 100644 --- a/templates/posts/details.rs.html +++ b/templates/posts/details.rs.html @@ -3,7 +3,9 @@ @use plume_models::posts::Post; @use plume_models::tags::Tag; @use plume_models::users::User; +@use rocket::http::RawStr; @use std::path::Path; +@use std::path::PathBuf; @use validator::ValidationErrors; @use crate::templates::{base, partials::comment}; @use crate::template_utils::*; -- 2.38.5 From 25c5da1a7cf63342ae160ca1af38c8fb7be46eb4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Igor=20Gali=C4=87?= Date: Wed, 29 Jan 2020 09:53:25 +0100 Subject: [PATCH 14/46] add tokio (0.2) as dependency to further async-ify our FromData code MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit i'm using this opportunity to also update reqwest (0.10), but it's turning out to be a little trickier, as it requires more modern async setup, and that appears to need a lot of thinking… --- Cargo.lock | 181 +++++++++++++++---------- Cargo.toml | 3 +- plume-common/Cargo.toml | 7 +- plume-common/src/activity_pub/inbox.rs | 2 +- plume-common/src/activity_pub/mod.rs | 21 +-- plume-models/Cargo.toml | 8 +- po/plume/ar.po | 3 +- src/api/mod.rs | 8 +- src/inbox.rs | 42 +++--- 9 files changed, 161 insertions(+), 114 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 238d8215..bd20617b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1439,9 +1439,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "377038bf3c89d18d6ca1431e7a5027194fbd724ca10592b9487ede5e8e144f42" +checksum = "79b7246d7e4b979c03fa093da39cfb3617a96bbeee6310af63991668d7e843ff" dependencies = [ "bytes 0.5.4", "fnv", @@ -1619,12 +1619,13 @@ dependencies = [ "futures-channel", "futures-core", "futures-util", - "h2 0.2.4", + "h2 0.2.5", "http 0.2.1", "http-body 0.3.1", "httparse", "itoa", "log 0.4.8", + "net2", "pin-project", "time", "tokio 0.2.20", @@ -1645,6 +1646,19 @@ dependencies = [ "tokio-io", ] +[[package]] +name = "hyper-tls" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3adcd308402b9553630734e9c36b77a7e48b3821251ca2493e8cd596763aafaa" +dependencies = [ + "bytes 0.5.4", + "hyper 0.13.5", + "native-tls", + "tokio 0.2.20", + "tokio-tls", +] + [[package]] name = "idna" version = "0.1.5" @@ -2596,8 +2610,9 @@ dependencies = [ "serde", "serde_json", "serde_qs", - "shrinkwraprs", + "shrinkwraprs 0.2.3", "syntect", + "tokio 0.2.20", "validator", "validator_derive", "webfinger", @@ -2632,20 +2647,21 @@ dependencies = [ "array_tool", "base64 0.10.1", "chrono", + "futures-util", "heck", "hex", - "hyper 0.12.35", + "hyper 0.13.5", "openssl", "pulldown-cmark", "regex-syntax 0.6.17", - "reqwest", + "reqwest 0.10.4", "rocket", "serde", "serde_derive", "serde_json", - "shrinkwraprs", + "shrinkwraprs 0.2.3", "syntect", - "tokio 0.1.22", + "tokio 0.2.20", ] [[package]] @@ -2693,14 +2709,14 @@ dependencies = [ "plume-api", "plume-common", "plume-macro", - "reqwest", + "reqwest 0.10.4", "rocket", "rocket_i18n", "scheduled-thread-pool", "serde", "serde_derive", "serde_json", - "shrinkwraprs", + "shrinkwraprs 0.3.0", "tantivy", "url 2.1.1", "walkdir", @@ -3121,14 +3137,14 @@ dependencies = [ "futures 0.1.29", "http 0.1.21", "hyper 0.12.35", - "hyper-tls", + "hyper-tls 0.3.2", "log 0.4.8", "mime 0.3.16", "mime_guess 2.0.3", "native-tls", "serde", "serde_json", - "serde_urlencoded", + "serde_urlencoded 0.5.5", "time", "tokio 0.1.22", "tokio-executor", @@ -3140,6 +3156,41 @@ dependencies = [ "winreg", ] +[[package]] +name = "reqwest" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02b81e49ddec5109a9dcfc5f2a317ff53377c915e9ae9d4f2fb50914b85614e2" +dependencies = [ + "base64 0.11.0", + "bytes 0.5.4", + "encoding_rs", + "futures-core", + "futures-util", + "http 0.2.1", + "http-body 0.3.1", + "hyper 0.13.5", + "hyper-tls 0.4.1", + "js-sys", + "lazy_static", + "log 0.4.8", + "mime 0.3.16", + "mime_guess 2.0.3", + "native-tls", + "percent-encoding 2.1.0", + "pin-project-lite", + "serde", + "serde_urlencoded 0.6.1", + "time", + "tokio 0.2.20", + "tokio-tls", + "url 2.1.1", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "winreg", +] + [[package]] name = "ring" version = "0.16.13" @@ -3467,6 +3518,18 @@ dependencies = [ "url 1.7.2", ] +[[package]] +name = "serde_urlencoded" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ec5d77e2d4c73717816afac02670d5c4f534ea95ed430442cad02e7a6e32c97" +dependencies = [ + "dtoa", + "itoa", + "serde", + "url 2.1.1", +] + [[package]] name = "sha1" version = "0.6.0" @@ -3492,6 +3555,19 @@ dependencies = [ "syn 1.0.18", ] +[[package]] +name = "shrinkwraprs" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e63e6744142336dfb606fe2b068afa2e1cca1ee6a5d8377277a92945d81fa331" +dependencies = [ + "bitflags 1.2.1", + "itertools", + "proc-macro2 1.0.12", + "quote 1.0.4", + "syn 1.0.18", +] + [[package]] name = "signal-hook-registry" version = "1.2.0" @@ -3915,18 +3991,13 @@ dependencies = [ "futures 0.1.29", "mio", "num_cpus", - "tokio-codec", "tokio-current-thread", "tokio-executor", - "tokio-fs", "tokio-io", "tokio-reactor", - "tokio-sync", "tokio-tcp", "tokio-threadpool", "tokio-timer", - "tokio-udp", - "tokio-uds", ] [[package]] @@ -3962,17 +4033,6 @@ dependencies = [ "futures 0.1.29", ] -[[package]] -name = "tokio-codec" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25b2998660ba0e70d18684de5d06b70b70a3a747469af9dea7618cc59e75976b" -dependencies = [ - "bytes 0.4.12", - "futures 0.1.29", - "tokio-io", -] - [[package]] name = "tokio-current-thread" version = "0.1.7" @@ -3993,17 +4053,6 @@ dependencies = [ "futures 0.1.29", ] -[[package]] -name = "tokio-fs" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "297a1206e0ca6302a0eed35b700d292b275256f596e2f3fea7729d5e629b6ff4" -dependencies = [ - "futures 0.1.29", - "tokio-io", - "tokio-threadpool", -] - [[package]] name = "tokio-io" version = "0.1.13" @@ -4088,36 +4137,13 @@ dependencies = [ ] [[package]] -name = "tokio-udp" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2a0b10e610b39c38b031a2fcab08e4b82f16ece36504988dcbd81dbba650d82" -dependencies = [ - "bytes 0.4.12", - "futures 0.1.29", - "log 0.4.8", - "mio", - "tokio-codec", - "tokio-io", - "tokio-reactor", -] - -[[package]] -name = "tokio-uds" -version = "0.2.6" +name = "tokio-tls" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5076db410d6fdc6523df7595447629099a1fdc47b3d9f896220780fa48faf798" +checksum = "9a70f4fcd7b3b24fb194f837560168208f669ca8cb70d0c4b862944452396343" dependencies = [ - "bytes 0.4.12", - "futures 0.1.29", - "iovec", - "libc", - "log 0.4.8", - "mio", - "mio-uds", - "tokio-codec", - "tokio-io", - "tokio-reactor", + "native-tls", + "tokio 0.2.20", ] [[package]] @@ -4415,6 +4441,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3c7d40d09cdbf0f4895ae58cf57d92e1e57a9dd8ed2e8390514b54a47cc5551" dependencies = [ "cfg-if", + "serde", + "serde_json", "wasm-bindgen-macro", ] @@ -4433,6 +4461,18 @@ dependencies = [ "wasm-bindgen-shared", ] +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a369c5e1dfb7569e14d62af4da642a3cbc2f9a3652fe586e26ac22222aa4b04" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + [[package]] name = "wasm-bindgen-macro" version = "0.2.62" @@ -4474,13 +4514,12 @@ dependencies = [ [[package]] name = "webfinger" -version = "0.4.1" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec24b1b0700d4b466d280228ed0f62274eedeaa80206820f071fdc8ed787b664" +checksum = "4b2821f6de671bfbe4792927622004b6f5364068b8edba4f51af14c10b36204e" dependencies = [ - "reqwest", + "reqwest 0.9.24", "serde", - "serde_derive", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 34f98a0a..57fc39df 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -30,9 +30,10 @@ serde_json = "1.0" serde_qs = "0.5" shrinkwraprs = "0.2.1" syntect = "3.3" +tokio = "0.2" validator = "0.8" validator_derive = "0.8" -webfinger = "0.4.1" +webfinger = "0.5" [[bin]] name = "plume" diff --git a/plume-common/Cargo.toml b/plume-common/Cargo.toml index d6a64aba..6309fee2 100644 --- a/plume-common/Cargo.toml +++ b/plume-common/Cargo.toml @@ -10,18 +10,19 @@ activitystreams-derive = "0.1.1" activitystreams-traits = "0.1.0" array_tool = "1.0" base64 = "0.10" +futures-util = "*" heck = "0.3.0" hex = "0.3" -hyper = "0.12.33" +hyper = "0.13" openssl = "0.10.22" rocket = { git = "https://github.com/SergioBenitez/Rocket", rev = "async" } -reqwest = "0.9" +reqwest = "0.10" serde = "1.0" serde_derive = "1.0" serde_json = "1.0" shrinkwraprs = "0.2.1" syntect = "3.3" -tokio = "0.1.22" +tokio = "0.2" regex-syntax = { version = "0.6.17", default-features = false, features = ["unicode-perl"] } [dependencies.chrono] diff --git a/plume-common/src/activity_pub/inbox.rs b/plume-common/src/activity_pub/inbox.rs index 9c714614..b04b4076 100644 --- a/plume-common/src/activity_pub/inbox.rs +++ b/plume-common/src/activity_pub/inbox.rs @@ -280,7 +280,7 @@ pub trait FromId: Sized { /// Dereferences an ID fn deref(id: &str) -> Result, Self::Error)> { reqwest::ClientBuilder::new() - .connect_timeout(Some(std::time::Duration::from_secs(5))) + .connect_timeout(std::time::Duration::from_secs(5)) .build() .map_err(|_| (None, InboxError::DerefError.into()))? .get(id) diff --git a/plume-common/src/activity_pub/mod.rs b/plume-common/src/activity_pub/mod.rs index 477f3ba7..154224f0 100644 --- a/plume-common/src/activity_pub/mod.rs +++ b/plume-common/src/activity_pub/mod.rs @@ -1,6 +1,6 @@ use activitypub::{Activity, Link, Object}; use array_tool::vec::Uniq; -use reqwest::r#async::ClientBuilder; +use reqwest::ClientBuilder; use rocket::{ http::Status, request::{FromRequestFuture, FromRequestAsync, Request}, @@ -118,9 +118,10 @@ impl<'a, 'r> FromRequestAsync<'a, 'r> for ApRequest { }) } } -pub fn broadcast(sender: &S, act: A, to: Vec) +pub fn broadcast(sender: &'static S, act: A, to: Vec) where S: sign::Signer, + S: std::marker::Sync, A: Activity, T: inbox::AsActor, { @@ -140,7 +141,9 @@ where .sign(sender) .expect("activity_pub::broadcast: signature error"); - let mut rt = tokio::runtime::current_thread::Runtime::new() + let mut rt = tokio::runtime::Builder::new() + .threaded_scheduler() + .build() .expect("Error while initializing tokio runtime for federation"); let client = ClientBuilder::new() .connect_timeout(std::time::Duration::from_secs(5)) @@ -150,7 +153,7 @@ where let body = signed.to_string(); let mut headers = request::headers(); headers.insert("Digest", request::Digest::digest(&body)); - rt.spawn( + rt.spawn(async move{ client .post(&inbox) .headers(headers.clone()) @@ -161,15 +164,17 @@ where ) .body(body) .send() - .and_then(|r| r.into_body().concat2()) + .await + .unwrap() + .text() + .await .map(move |response| { println!("Successfully sent activity to inbox ({})", inbox); println!("Response: \"{:?}\"\n", response) }) - .map_err(|e| println!("Error while sending to inbox ({:?})", e)), - ); + .map_err(|e| println!("Error while sending to inbox ({:?})", e)) + }); } - rt.run().unwrap(); } #[derive(Shrinkwrap, Clone, Serialize, Deserialize)] diff --git a/plume-models/Cargo.toml b/plume-models/Cargo.toml index 5ad8b1d5..8e22ec07 100644 --- a/plume-models/Cargo.toml +++ b/plume-models/Cargo.toml @@ -16,7 +16,7 @@ lazy_static = "1.0" migrations_internals= "1.4.0" openssl = "0.10.22" rocket = { git = "https://github.com/SergioBenitez/Rocket", rev = "async" } -reqwest = "0.9" +reqwest = "0.10" scheduled-thread-pool = "0.2.2" serde = "1.0" serde_derive = "1.0" @@ -24,9 +24,9 @@ serde_json = "1.0" tantivy = "0.10.1" url = "2.1" walkdir = "2.2" -webfinger = "0.4.1" +webfinger = "0.5" whatlang = "0.7.1" -shrinkwraprs = "0.2.1" +shrinkwraprs = "0.3" diesel-derive-newtype = "0.1.2" glob = "0.3.0" @@ -54,7 +54,7 @@ default-features = false features = ["rocket"] [dev-dependencies] -diesel_migrations = "1.3.0" +diesel_migrations = "1.4.0" [features] postgres = ["diesel/postgres", "plume-macro/postgres" ] diff --git a/po/plume/ar.po b/po/plume/ar.po index 85579f24..f464f224 100644 --- a/po/plume/ar.po +++ b/po/plume/ar.po @@ -10,7 +10,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n" +"Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " +"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n" "X-Crowdin-Project: plume\n" "X-Crowdin-Language: ar\n" "X-Crowdin-File: /master/po/plume/plume.pot\n" diff --git a/src/api/mod.rs b/src/api/mod.rs index 1ea9f6d3..58d0fec3 100644 --- a/src/api/mod.rs +++ b/src/api/mod.rs @@ -27,20 +27,20 @@ impl From for ApiError { } impl<'r> Responder<'r> for ApiError { - fn respond_to(self, req: &Request<'_>) -> response::Result<'r> { + fn respond_to(self, req: &'r Request) -> response::ResultFuture<'r> { match self.0 { Error::NotFound => Json(json!({ "error": "Not found" })) - .respond_to(req), + .respond_to(req), Error::Unauthorized => Json(json!({ "error": "You are not authorized to access this resource" })) - .respond_to(req), + .respond_to(req), _ => Json(json!({ "error": "Server error" })) - .respond_to(req), + .respond_to(req), } } } diff --git a/src/inbox.rs b/src/inbox.rs index 71270f53..f5d84a27 100644 --- a/src/inbox.rs +++ b/src/inbox.rs @@ -73,32 +73,32 @@ impl<'a, T: Deserialize<'a>> FromData<'a> for SignedJson { type Owned = String; type Borrowed = str; - fn transform( - r: &Request<'_>, - d: Data, - ) -> Transform> { - let size_limit = r.limits().get("json").unwrap_or(JSON_LIMIT); - let mut s = String::with_capacity(512); - match d.open().take(size_limit).read_to_string(&mut s) { - Ok(_) => Transform::Borrowed(Success(s)), - Err(e) => Transform::Borrowed(Failure((Status::BadRequest, JsonError::Io(e)))), - } + fn transform<'r>( + r: &'r Request, + d: Data + ) -> TransformFuture<'r, Self::Owned, Self::Error> { + Box::pin(async move { + let size_limit = r.limits().get("json").unwrap_or(JSON_LIMIT); + let mut s = String::with_capacity(512); + let outcome = match d.open().take(size_limit).read_to_string(&mut s) { + Ok(_) => Success(s), + Err(e) => Failure((Status::BadRequest, JsonError::Io(e))), + }; + Transform::Borrowed(outcome) + }) } fn from_data( _: &Request<'_>, o: Transformed<'a, Self>, - ) -> rocket::data::Outcome { - let string = o.borrowed()?; - match serde_json::from_str(&string) { - Ok(v) => Success(SignedJson(Digest::from_body(&string), Json(v))), - Err(e) => { - if e.is_data() { - Failure((Status::UnprocessableEntity, JsonError::Parse(string, e))) - } else { - Failure((Status::BadRequest, JsonError::Parse(string, e))) - } + ) -> FromDataFuture<'a, Self, Self::Error> { + Box::pin(async move { + let string = try_outcome!(o.borrowed()); + match serde_json::from_str(&string) { + Ok(v) => Success(SignedJson(Digest::from_body(&string), Json(v))), + Err(e) if e.is_data() => return Failure((Status::UnprocessableEntity, JsonError::Parse(string, e))), + Err(e) => Failure((Status::BadRequest, JsonError::Parse(string, e))), } - } + }) } } -- 2.38.5 From a3f165f9f43f6dd70f61ad6961805974810dcf89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Igor=20Gali=C4=87?= Date: Wed, 29 Jan 2020 13:08:20 +0100 Subject: [PATCH 15/46] Use blocking reqwest API in defer defer, or, trait functions such as it in general(?) cannot be async (yet) --- Cargo.lock | 1 + plume-common/Cargo.toml | 5 ++++- plume-common/src/activity_pub/inbox.rs | 3 ++- plume-models/Cargo.toml | 6 +++++- 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index bd20617b..b8384f47 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3180,6 +3180,7 @@ dependencies = [ "percent-encoding 2.1.0", "pin-project-lite", "serde", + "serde_json", "serde_urlencoded 0.6.1", "time", "tokio 0.2.20", diff --git a/plume-common/Cargo.toml b/plume-common/Cargo.toml index 6309fee2..d5b5f765 100644 --- a/plume-common/Cargo.toml +++ b/plume-common/Cargo.toml @@ -16,7 +16,6 @@ hex = "0.3" hyper = "0.13" openssl = "0.10.22" rocket = { git = "https://github.com/SergioBenitez/Rocket", rev = "async" } -reqwest = "0.10" serde = "1.0" serde_derive = "1.0" serde_json = "1.0" @@ -32,3 +31,7 @@ version = "0.4" [dependencies.pulldown-cmark] default-features = false version = "0.2.0" + +[dependencies.reqwest] +features = ["json", "blocking"] +version = "0.10" diff --git a/plume-common/src/activity_pub/inbox.rs b/plume-common/src/activity_pub/inbox.rs index b04b4076..4d08e810 100644 --- a/plume-common/src/activity_pub/inbox.rs +++ b/plume-common/src/activity_pub/inbox.rs @@ -279,7 +279,8 @@ pub trait FromId: Sized { /// Dereferences an ID fn deref(id: &str) -> Result, Self::Error)> { - reqwest::ClientBuilder::new() + // Use blocking reqwest API here, since defer cannot be async (yet) + reqwest::blocking::Client::builder() .connect_timeout(std::time::Duration::from_secs(5)) .build() .map_err(|_| (None, InboxError::DerefError.into()))? diff --git a/plume-models/Cargo.toml b/plume-models/Cargo.toml index 8e22ec07..94b5c1a1 100644 --- a/plume-models/Cargo.toml +++ b/plume-models/Cargo.toml @@ -16,7 +16,6 @@ lazy_static = "1.0" migrations_internals= "1.4.0" openssl = "0.10.22" rocket = { git = "https://github.com/SergioBenitez/Rocket", rev = "async" } -reqwest = "0.10" scheduled-thread-pool = "0.2.2" serde = "1.0" serde_derive = "1.0" @@ -47,6 +46,11 @@ path = "../plume-common" [dependencies.plume-macro] path = "../plume-macro" +[dependencies.reqwest] +features = ["json", "blocking"] +version = "0.10" + + [dependencies.rocket_i18n] git = "https://github.com/Plume-org/rocket_i18n" branch = "go-async" -- 2.38.5 From 3472a58299c8fa653b1fd545f1353b0b78b60f13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Igor=20Gali=C4=87?= Date: Wed, 29 Jan 2020 13:15:39 +0100 Subject: [PATCH 16/46] move ClientBuilder into thread, since we cannot Copy it --- plume-common/src/activity_pub/inbox.rs | 2 +- plume-common/src/activity_pub/mod.rs | 22 ++++++++++++---------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/plume-common/src/activity_pub/inbox.rs b/plume-common/src/activity_pub/inbox.rs index 4d08e810..ec63d4fb 100644 --- a/plume-common/src/activity_pub/inbox.rs +++ b/plume-common/src/activity_pub/inbox.rs @@ -297,7 +297,7 @@ pub trait FromId: Sized { ) .send() .map_err(|_| (None, InboxError::DerefError)) - .and_then(|mut r| { + .and_then(|r| { let json: serde_json::Value = r .json() .map_err(|_| (None, InboxError::InvalidObject(None)))?; diff --git a/plume-common/src/activity_pub/mod.rs b/plume-common/src/activity_pub/mod.rs index 154224f0..615ed322 100644 --- a/plume-common/src/activity_pub/mod.rs +++ b/plume-common/src/activity_pub/mod.rs @@ -3,12 +3,11 @@ use array_tool::vec::Uniq; use reqwest::ClientBuilder; use rocket::{ http::Status, - request::{FromRequestFuture, FromRequestAsync, Request}, + request::{FromRequestAsync, FromRequestFuture, Request}, response::{Responder, Response, ResultFuture}, Outcome, }; use serde_json; -use tokio::prelude::*; use self::sign::Signable; @@ -66,7 +65,8 @@ impl ActivityStream { impl<'r, O: Object + Send + 'r> Responder<'r> for ActivityStream { fn respond_to(self, request: &'r Request<'_>) -> ResultFuture<'r> { Box::pin(async move { - let mut json = serde_json::to_value(&self.0).map_err(|_| Status::InternalServerError)?; + let mut json = + serde_json::to_value(&self.0).map_err(|_| Status::InternalServerError)?; json["@context"] = context(); let result = serde_json::to_string(&json).map_err(rocket::response::Debug); match result.respond_to(request).await { @@ -95,7 +95,8 @@ impl<'a, 'r> FromRequestAsync<'a, 'r> for ApRequest { .map(|header| { header .split(',') - .map(|ct| match ct.trim() { + .map(|ct| { + match ct.trim() { // bool for Forward: true if found a valid Content-Type for Plume first (HTML), // false otherwise "application/ld+json; profile=\"https://w3.org/ns/activitystreams\"" @@ -104,6 +105,7 @@ impl<'a, 'r> FromRequestAsync<'a, 'r> for ApRequest { | "application/ld+json" => Outcome::Success(ApRequest), "text/html" => Outcome::Forward(true), _ => Outcome::Forward(false), + } }) .fold(Outcome::Forward(false), |out, ct| { if out.clone().forwarded().unwrap_or_else(|| out.is_success()) { @@ -141,19 +143,19 @@ where .sign(sender) .expect("activity_pub::broadcast: signature error"); - let mut rt = tokio::runtime::Builder::new() + let rt = tokio::runtime::Builder::new() .threaded_scheduler() .build() .expect("Error while initializing tokio runtime for federation"); - let client = ClientBuilder::new() - .connect_timeout(std::time::Duration::from_secs(5)) - .build() - .expect("Can't build client"); for inbox in boxes { let body = signed.to_string(); let mut headers = request::headers(); headers.insert("Digest", request::Digest::digest(&body)); - rt.spawn(async move{ + rt.spawn(async move { + let client = ClientBuilder::new() + .connect_timeout(std::time::Duration::from_secs(5)) + .build() + .expect("Can't build client"); client .post(&inbox) .headers(headers.clone()) -- 2.38.5 From 87ce3a7b518afa09dc18ad86e9b2f2e43e7056fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Igor=20Gali=C4=87?= Date: Wed, 29 Jan 2020 13:40:03 +0100 Subject: [PATCH 17/46] asyncify plume-models: media upload is now async including the use of tokio! --- Cargo.lock | 1 + plume-models/Cargo.toml | 1 + plume-models/src/follows.rs | 4 ++-- plume-models/src/medias.rs | 14 ++++++++------ plume-models/src/users.rs | 8 ++++---- 5 files changed, 16 insertions(+), 12 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b8384f47..3760d7f5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2718,6 +2718,7 @@ dependencies = [ "serde_json", "shrinkwraprs 0.3.0", "tantivy", + "tokio 0.2.20", "url 2.1.1", "walkdir", "webfinger", diff --git a/plume-models/Cargo.toml b/plume-models/Cargo.toml index 94b5c1a1..5d7f6ef5 100644 --- a/plume-models/Cargo.toml +++ b/plume-models/Cargo.toml @@ -21,6 +21,7 @@ serde = "1.0" serde_derive = "1.0" serde_json = "1.0" tantivy = "0.10.1" +tokio = "0.2" url = "2.1" walkdir = "2.2" webfinger = "0.5" diff --git a/plume-models/src/follows.rs b/plume-models/src/follows.rs index d371e04e..4dd0c58e 100644 --- a/plume-models/src/follows.rs +++ b/plume-models/src/follows.rs @@ -81,10 +81,10 @@ impl Follow { /// from -> The one sending the follow request /// target -> The target of the request, responding with Accept - pub fn accept_follow + IntoId, T>( + pub fn accept_follow + IntoId, T>( conn: &Connection, from: &B, - target: &A, + target: &'static A, follow: FollowAct, from_id: i32, target_id: i32, diff --git a/plume-models/src/medias.rs b/plume-models/src/medias.rs index 7cae530a..6c401366 100644 --- a/plume-models/src/medias.rs +++ b/plume-models/src/medias.rs @@ -12,6 +12,7 @@ use plume_common::{ }; use reqwest; use std::{fs, path::Path}; +use tokio::prelude::*; #[derive(Clone, Identifiable, Queryable)] pub struct Media { @@ -197,7 +198,7 @@ impl Media { } // TODO: merge with save_remote? - pub fn from_activity(c: &PlumeRocket, image: &Image) -> Result { + pub async fn from_activity(c: &PlumeRocket, image: &Image) -> Result { let conn = &*c.conn; let remote_url = image.object_props.url_string().ok()?; let ext = remote_url @@ -211,11 +212,12 @@ impl Media { ext )); - let mut dest = fs::File::create(path.clone()).ok()?; - reqwest::get(remote_url.as_str()) - .ok()? - .copy_to(&mut dest) - .ok()?; + let mut dest = tokio::fs::File::create(path.clone()).await?; + let contents = reqwest::get(remote_url.as_str()) + .await? + .bytes() + .await?; + dest.write_all(&contents).await?; Media::insert( conn, diff --git a/plume-models/src/users.rs b/plume-models/src/users.rs index 5d1dd5fa..b6309acc 100644 --- a/plume-models/src/users.rs +++ b/plume-models/src/users.rs @@ -223,7 +223,7 @@ impl User { fn fetch(url: &str) -> Result { let mut res = ClientBuilder::new() - .connect_timeout(Some(std::time::Duration::from_secs(5))) + .connect_timeout(std::time::Duration::from_secs(5)) .build()? .get(url) .header( @@ -358,7 +358,7 @@ impl User { } fn fetch_outbox_page(&self, url: &str) -> Result<(Vec, Option)> { let mut res = ClientBuilder::new() - .connect_timeout(Some(std::time::Duration::from_secs(5))) + .connect_timeout(std::time::Duration::from_secs(5)) .build()? .get(url) .header( @@ -388,7 +388,7 @@ impl User { } pub fn fetch_outbox(&self) -> Result> { let mut res = ClientBuilder::new() - .connect_timeout(Some(std::time::Duration::from_secs(5))) + .connect_timeout(std::time::Duration::from_secs(5)) .build()? .get(&self.outbox_url[..]) .header( @@ -433,7 +433,7 @@ impl User { pub fn fetch_followers_ids(&self) -> Result> { let mut res = ClientBuilder::new() - .connect_timeout(Some(std::time::Duration::from_secs(5))) + .connect_timeout(std::time::Duration::from_secs(5)) .build()? .get(&self.followers_endpoint[..]) .header( -- 2.38.5 From 82088596a8c4904a291e550676bca335b39603b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Igor=20Gali=C4=87?= Date: Thu, 13 Feb 2020 17:54:44 +0100 Subject: [PATCH 18/46] asyncify from_activity calls (i.e.: block_on()) --- plume-models/src/posts.rs | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/plume-models/src/posts.rs b/plume-models/src/posts.rs index 73c0c915..b562fe4b 100644 --- a/plume-models/src/posts.rs +++ b/plume-models/src/posts.rs @@ -21,6 +21,7 @@ use plume_common::{ }; use serde_json; use std::collections::HashSet; +use tokio::runtime::Runtime; pub type LicensedArticle = CustomObject; @@ -579,11 +580,14 @@ impl FromId for Post { } }); - let cover = article + let image = article .object_props .icon_object::() .ok() - .and_then(|img| Media::from_activity(&c, &img).ok().map(|m| m.id)); + .unwrap(); + + let mut r = Runtime::new().unwrap(); + let cover = Some(r.block_on(async {Media::from_activity(&c, &image).await.ok().unwrap().id})); let title = article.object_props.name_string()?; let post = Post::insert( @@ -699,17 +703,21 @@ impl FromId for PostUpdate { } fn from_activity(c: &PlumeRocket, updated: LicensedArticle) -> Result { + let image = updated + .object + .object_props + .icon_object::() + .ok() + .unwrap(); + let mut r = Runtime::new().unwrap(); + let cover = Some(r.block_on(async {Media::from_activity(&c, &image).await.ok().unwrap().id})); + Ok(PostUpdate { ap_url: updated.object.object_props.id_string()?, title: updated.object.object_props.name_string().ok(), subtitle: updated.object.object_props.summary_string().ok(), content: updated.object.object_props.content_string().ok(), - cover: updated - .object - .object_props - .icon_object::() - .ok() - .and_then(|img| Media::from_activity(&c, &img).ok().map(|m| m.id)), + cover: cover, source: updated .object .ap_object_props -- 2.38.5 From a01002507453ef7902a0ed09221c700223656f92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Igor=20Gali=C4=87?= Date: Fri, 14 Feb 2020 19:29:30 +0100 Subject: [PATCH 19/46] asyncify reqwest calls (again?) --- plume-models/src/users.rs | 113 +++++++++++++++++++------------------- 1 file changed, 57 insertions(+), 56 deletions(-) diff --git a/plume-models/src/users.rs b/plume-models/src/users.rs index b6309acc..2ad04139 100644 --- a/plume-models/src/users.rs +++ b/plume-models/src/users.rs @@ -221,8 +221,8 @@ impl User { .ok_or(Error::Webfinger) } - fn fetch(url: &str) -> Result { - let mut res = ClientBuilder::new() + async fn fetch(url: &str) -> Result { + let res = ClientBuilder::new() .connect_timeout(std::time::Duration::from_secs(5)) .build()? .get(url) @@ -235,8 +235,8 @@ impl User { .join(", "), )?, ) - .send()?; - let text = &res.text()?; + .send().await?; + let text = &res.text().await?; // without this workaround, publicKey is not correctly deserialized let ap_sign = serde_json::from_str::(text)?; let mut json = serde_json::from_str::(text)?; @@ -244,48 +244,48 @@ impl User { Ok(json) } - pub fn fetch_from_url(c: &PlumeRocket, url: &str) -> Result { - User::fetch(url).and_then(|json| User::from_activity(c, json)) + pub async fn fetch_from_url(c: &PlumeRocket, url: &str) -> Result { + let json = User::fetch(url).await?; + User::from_activity(c, json) } - pub fn refetch(&self, conn: &Connection) -> Result<()> { - User::fetch(&self.ap_url.clone()).and_then(|json| { - let avatar = Media::save_remote( - conn, - json.object - .object_props - .icon_image()? - .object_props - .url_string()?, - &self, - ) - .ok(); + pub async fn refetch(&self, conn: &Connection) -> Result<()> { + let json = User::fetch(&self.ap_url.clone()).await?; + let avatar = Media::save_remote( + conn, + json.object + .object_props + .icon_image()? + .object_props + .url_string()?, + &self, + ) + .ok(); - diesel::update(self) - .set(( - users::username.eq(json.object.ap_actor_props.preferred_username_string()?), - users::display_name.eq(json.object.object_props.name_string()?), - users::outbox_url.eq(json.object.ap_actor_props.outbox_string()?), - users::inbox_url.eq(json.object.ap_actor_props.inbox_string()?), - users::summary.eq(SafeString::new( - &json - .object - .object_props - .summary_string() - .unwrap_or_default(), - )), - users::followers_endpoint.eq(json.object.ap_actor_props.followers_string()?), - users::avatar_id.eq(avatar.map(|a| a.id)), - users::last_fetched_date.eq(Utc::now().naive_utc()), - users::public_key.eq(json - .custom_props - .public_key_publickey()? - .public_key_pem_string()?), - )) - .execute(conn) - .map(|_| ()) - .map_err(Error::from) - }) + diesel::update(self) + .set(( + users::username.eq(json.object.ap_actor_props.preferred_username_string()?), + users::display_name.eq(json.object.object_props.name_string()?), + users::outbox_url.eq(json.object.ap_actor_props.outbox_string()?), + users::inbox_url.eq(json.object.ap_actor_props.inbox_string()?), + users::summary.eq(SafeString::new( + &json + .object + .object_props + .summary_string() + .unwrap_or_default(), + )), + users::followers_endpoint.eq(json.object.ap_actor_props.followers_string()?), + users::avatar_id.eq(avatar.map(|a| a.id)), + users::last_fetched_date.eq(Utc::now().naive_utc()), + users::public_key.eq(json + .custom_props + .public_key_publickey()? + .public_key_pem_string()?), + )) + .execute(conn) + .map(|_| ()) + .map_err(Error::from) } pub fn hash_pass(pass: &str) -> Result { @@ -356,8 +356,9 @@ impl User { .set_part_of_link(Id::new(&self.outbox_url))?; Ok(ActivityStream::new(coll)) } - fn fetch_outbox_page(&self, url: &str) -> Result<(Vec, Option)> { - let mut res = ClientBuilder::new() + + async fn fetch_outbox_page(&self, url: &str) -> Result<(Vec, Option)> { + let res = ClientBuilder::new() .connect_timeout(std::time::Duration::from_secs(5)) .build()? .get(url) @@ -370,8 +371,8 @@ impl User { .join(", "), )?, ) - .send()?; - let text = &res.text()?; + .send().await?; + let text = &res.text().await?; let json: serde_json::Value = serde_json::from_str(text)?; let items = json["items"] .as_array() @@ -386,8 +387,8 @@ impl User { }; Ok((items, next)) } - pub fn fetch_outbox(&self) -> Result> { - let mut res = ClientBuilder::new() + pub async fn fetch_outbox(&self) -> Result> { + let res = ClientBuilder::new() .connect_timeout(std::time::Duration::from_secs(5)) .build()? .get(&self.outbox_url[..]) @@ -400,13 +401,13 @@ impl User { .join(", "), )?, ) - .send()?; - let text = &res.text()?; + .send().await?; + let text = &res.text().await?; let json: serde_json::Value = serde_json::from_str(text)?; if let Some(first) = json.get("first") { let mut items: Vec = Vec::new(); let mut next = first.as_str().unwrap().to_owned(); - while let Ok((mut page, nxt)) = self.fetch_outbox_page(&next) { + while let Ok((mut page, nxt)) = self.fetch_outbox_page(&next).await { if page.is_empty() { break; } @@ -431,8 +432,8 @@ impl User { } } - pub fn fetch_followers_ids(&self) -> Result> { - let mut res = ClientBuilder::new() + pub async fn fetch_followers_ids(&self) -> Result> { + let res = ClientBuilder::new() .connect_timeout(std::time::Duration::from_secs(5)) .build()? .get(&self.followers_endpoint[..]) @@ -445,8 +446,8 @@ impl User { .join(", "), )?, ) - .send()?; - let text = &res.text()?; + .send().await?; + let text = &res.text().await?; let json: serde_json::Value = serde_json::from_str(text)?; Ok(json["items"] .as_array() -- 2.38.5 From 8aa99cea35b0b80e3cd5462421bd62cf9401c2af Mon Sep 17 00:00:00 2001 From: Jeb Rosen Date: Mon, 17 Feb 2020 22:34:18 +0100 Subject: [PATCH 20/46] move signature outside the spawning this allows us to actually move stuff into the async block and we can drop the 'static life-time. --- plume-common/src/activity_pub/mod.rs | 11 ++++------- plume-models/src/follows.rs | 4 ++-- src/inbox.rs | 10 +++++----- 3 files changed, 11 insertions(+), 14 deletions(-) diff --git a/plume-common/src/activity_pub/mod.rs b/plume-common/src/activity_pub/mod.rs index 615ed322..6f81528c 100644 --- a/plume-common/src/activity_pub/mod.rs +++ b/plume-common/src/activity_pub/mod.rs @@ -120,10 +120,9 @@ impl<'a, 'r> FromRequestAsync<'a, 'r> for ApRequest { }) } } -pub fn broadcast(sender: &'static S, act: A, to: Vec) +pub fn broadcast(sender: &S, act: A, to: Vec) where S: sign::Signer, - S: std::marker::Sync, A: Activity, T: inbox::AsActor, { @@ -151,6 +150,8 @@ where let body = signed.to_string(); let mut headers = request::headers(); headers.insert("Digest", request::Digest::digest(&body)); + let sig = request::signature(sender, &headers) + .expect("activity_pub::broadcast: request signature error"); rt.spawn(async move { let client = ClientBuilder::new() .connect_timeout(std::time::Duration::from_secs(5)) @@ -159,11 +160,7 @@ where client .post(&inbox) .headers(headers.clone()) - .header( - "Signature", - request::signature(sender, &headers) - .expect("activity_pub::broadcast: request signature error"), - ) + .header("Signature", sig) .body(body) .send() .await diff --git a/plume-models/src/follows.rs b/plume-models/src/follows.rs index 4dd0c58e..d371e04e 100644 --- a/plume-models/src/follows.rs +++ b/plume-models/src/follows.rs @@ -81,10 +81,10 @@ impl Follow { /// from -> The one sending the follow request /// target -> The target of the request, responding with Accept - pub fn accept_follow + IntoId, T>( + pub fn accept_follow + IntoId, T>( conn: &Connection, from: &B, - target: &'static A, + target: &A, follow: FollowAct, from_id: i32, target_id: i32, diff --git a/src/inbox.rs b/src/inbox.rs index f5d84a27..652da310 100644 --- a/src/inbox.rs +++ b/src/inbox.rs @@ -10,6 +10,7 @@ use rocket::{data::*, http::Status, response::status, Outcome::*, Request}; use rocket_contrib::json::*; use serde::Deserialize; use std::io::Read; +use tokio::io::AsyncReadExt; pub fn handle_incoming( rockets: PlumeRocket, @@ -73,10 +74,7 @@ impl<'a, T: Deserialize<'a>> FromData<'a> for SignedJson { type Owned = String; type Borrowed = str; - fn transform<'r>( - r: &'r Request, - d: Data - ) -> TransformFuture<'r, Self::Owned, Self::Error> { + fn transform<'r>(r: &'r Request, d: Data) -> TransformFuture<'r, Self::Owned, Self::Error> { Box::pin(async move { let size_limit = r.limits().get("json").unwrap_or(JSON_LIMIT); let mut s = String::with_capacity(512); @@ -96,7 +94,9 @@ impl<'a, T: Deserialize<'a>> FromData<'a> for SignedJson { let string = try_outcome!(o.borrowed()); match serde_json::from_str(&string) { Ok(v) => Success(SignedJson(Digest::from_body(&string), Json(v))), - Err(e) if e.is_data() => return Failure((Status::UnprocessableEntity, JsonError::Parse(string, e))), + Err(e) if e.is_data() => { + return Failure((Status::UnprocessableEntity, JsonError::Parse(string, e))) + } Err(e) => Failure((Status::BadRequest, JsonError::Parse(string, e))), } }) -- 2.38.5 From 65b2c38c29521ece805c5f794492ce25d484c76a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Igor=20Gali=C4=87?= Date: Mon, 17 Feb 2020 23:14:28 +0100 Subject: [PATCH 21/46] .await? result from read_to_string() --- src/inbox.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/inbox.rs b/src/inbox.rs index 652da310..92dba541 100644 --- a/src/inbox.rs +++ b/src/inbox.rs @@ -9,7 +9,6 @@ use plume_models::{ use rocket::{data::*, http::Status, response::status, Outcome::*, Request}; use rocket_contrib::json::*; use serde::Deserialize; -use std::io::Read; use tokio::io::AsyncReadExt; pub fn handle_incoming( @@ -78,7 +77,7 @@ impl<'a, T: Deserialize<'a>> FromData<'a> for SignedJson { Box::pin(async move { let size_limit = r.limits().get("json").unwrap_or(JSON_LIMIT); let mut s = String::with_capacity(512); - let outcome = match d.open().take(size_limit).read_to_string(&mut s) { + let outcome = match d.open().take(size_limit).read_to_string(&mut s).await { Ok(_) => Success(s), Err(e) => Failure((Status::BadRequest, JsonError::Io(e))), }; -- 2.38.5 From be8c67ee9a9bb89661f7cd344f75ae198f7844ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Igor=20Gali=C4=87?= Date: Mon, 17 Feb 2020 23:37:43 +0100 Subject: [PATCH 22/46] move reqwest client out of thread spawning this way, we only spawn one, and reuse that. --- plume-common/src/activity_pub/mod.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/plume-common/src/activity_pub/mod.rs b/plume-common/src/activity_pub/mod.rs index 6f81528c..6efb3869 100644 --- a/plume-common/src/activity_pub/mod.rs +++ b/plume-common/src/activity_pub/mod.rs @@ -151,12 +151,12 @@ where let mut headers = request::headers(); headers.insert("Digest", request::Digest::digest(&body)); let sig = request::signature(sender, &headers) - .expect("activity_pub::broadcast: request signature error"); + .expect("activity_pub::broadcast: request signature error"); + let client = ClientBuilder::new() + .connect_timeout(std::time::Duration::from_secs(5)) + .build() + .expect("Can't build client"); rt.spawn(async move { - let client = ClientBuilder::new() - .connect_timeout(std::time::Duration::from_secs(5)) - .build() - .expect("Can't build client"); client .post(&inbox) .headers(headers.clone()) -- 2.38.5 From e9c7259ffb61a97449f8bb9edea52a2b8427d9b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Igor=20Gali=C4=87?= Date: Tue, 18 Feb 2020 09:27:12 +0100 Subject: [PATCH 23/46] cargo fmt --- plume-models/src/api_tokens.rs | 6 ++++-- plume-models/src/medias.rs | 5 +---- plume-models/src/plume_rocket.rs | 20 ++++++++++++++------ plume-models/src/posts.rs | 12 +++++------- plume-models/src/users.rs | 12 ++++++++---- src/api/mod.rs | 6 +++--- src/routes/instance.rs | 2 +- src/routes/posts.rs | 2 +- 8 files changed, 37 insertions(+), 28 deletions(-) diff --git a/plume-models/src/api_tokens.rs b/plume-models/src/api_tokens.rs index bcf49646..84aefbf8 100644 --- a/plume-models/src/api_tokens.rs +++ b/plume-models/src/api_tokens.rs @@ -95,7 +95,10 @@ impl<'a, 'r> FromRequestAsync<'a, 'r> for ApiToken { return Outcome::Success(token); } } else { - return Outcome::Failure((Status::InternalServerError, TokenError::DbError)); + return Outcome::Failure(( + Status::InternalServerError, + TokenError::DbError, + )); } } } else { @@ -105,7 +108,6 @@ impl<'a, 'r> FromRequestAsync<'a, 'r> for ApiToken { return Outcome::Failure((Status::BadRequest, TokenError::NoType)); } - Outcome::Forward(()) }) } diff --git a/plume-models/src/medias.rs b/plume-models/src/medias.rs index 6c401366..c0c60aa8 100644 --- a/plume-models/src/medias.rs +++ b/plume-models/src/medias.rs @@ -213,10 +213,7 @@ impl Media { )); let mut dest = tokio::fs::File::create(path.clone()).await?; - let contents = reqwest::get(remote_url.as_str()) - .await? - .bytes() - .await?; + let contents = reqwest::get(remote_url.as_str()).await?.bytes().await?; dest.write_all(&contents).await?; Media::insert( diff --git a/plume-models/src/plume_rocket.rs b/plume-models/src/plume_rocket.rs index 358339ac..5be466e7 100644 --- a/plume-models/src/plume_rocket.rs +++ b/plume-models/src/plume_rocket.rs @@ -23,13 +23,17 @@ mod module { impl<'a, 'r> FromRequestAsync<'a, 'r> for PlumeRocket { type Error = (); - fn from_request(request: &'a Request<'r>) -> request::FromRequestFuture<'a, Self, Self::Error> { + fn from_request( + request: &'a Request<'r>, + ) -> request::FromRequestFuture<'a, Self, Self::Error> { Box::pin(async move { let conn = try_outcome!(DbConn::from_request(request).await); let intl = try_outcome!(rocket_i18n::I18n::from_request(request).await); let user = try_outcome!(users::User::from_request(request).await); - let worker = try_outcome!(request.guard::<'_, State<'_, Arc>>()); - let searcher = try_outcome!(request.guard::<'_, State<'_, Arc>>()); + let worker = + try_outcome!(request.guard::<'_, State<'_, Arc>>()); + let searcher = + try_outcome!(request.guard::<'_, State<'_, Arc>>()); let flash_msg = request.guard::>().succeeded(); Outcome::Success(PlumeRocket { conn, @@ -65,12 +69,16 @@ mod module { impl<'a, 'r> FromRequestAsync<'a, 'r> for PlumeRocket { type Error = (); - fn from_request(request: &'a Request<'r>) -> request::FromRequestFuture<'a, Self, Self::Error> { + fn from_request( + request: &'a Request<'r>, + ) -> request::FromRequestFuture<'a, Self, Self::Error> { Box::pin(async move { let conn = try_outcome!(DbConn::from_request(request).await); let user = try_outcome!(users::User::from_request(request).await); - let worker = try_outcome!(request.guard::<'_, State<'_, Arc>>()); - let searcher = try_outcome!(request.guard::<'_, State<'_, Arc>>()); + let worker = + try_outcome!(request.guard::<'_, State<'_, Arc>>()); + let searcher = + try_outcome!(request.guard::<'_, State<'_, Arc>>()); Outcome::Success(PlumeRocket { conn, user: Some(user), diff --git a/plume-models/src/posts.rs b/plume-models/src/posts.rs index b562fe4b..92b3f5a9 100644 --- a/plume-models/src/posts.rs +++ b/plume-models/src/posts.rs @@ -580,14 +580,11 @@ impl FromId for Post { } }); - let image = article - .object_props - .icon_object::() - .ok() - .unwrap(); + let image = article.object_props.icon_object::().ok().unwrap(); let mut r = Runtime::new().unwrap(); - let cover = Some(r.block_on(async {Media::from_activity(&c, &image).await.ok().unwrap().id})); + let cover = + Some(r.block_on(async { Media::from_activity(&c, &image).await.ok().unwrap().id })); let title = article.object_props.name_string()?; let post = Post::insert( @@ -710,7 +707,8 @@ impl FromId for PostUpdate { .ok() .unwrap(); let mut r = Runtime::new().unwrap(); - let cover = Some(r.block_on(async {Media::from_activity(&c, &image).await.ok().unwrap().id})); + let cover = + Some(r.block_on(async { Media::from_activity(&c, &image).await.ok().unwrap().id })); Ok(PostUpdate { ap_url: updated.object.object_props.id_string()?, diff --git a/plume-models/src/users.rs b/plume-models/src/users.rs index 2ad04139..adc529b3 100644 --- a/plume-models/src/users.rs +++ b/plume-models/src/users.rs @@ -235,7 +235,8 @@ impl User { .join(", "), )?, ) - .send().await?; + .send() + .await?; let text = &res.text().await?; // without this workaround, publicKey is not correctly deserialized let ap_sign = serde_json::from_str::(text)?; @@ -371,7 +372,8 @@ impl User { .join(", "), )?, ) - .send().await?; + .send() + .await?; let text = &res.text().await?; let json: serde_json::Value = serde_json::from_str(text)?; let items = json["items"] @@ -401,7 +403,8 @@ impl User { .join(", "), )?, ) - .send().await?; + .send() + .await?; let text = &res.text().await?; let json: serde_json::Value = serde_json::from_str(text)?; if let Some(first) = json.get("first") { @@ -446,7 +449,8 @@ impl User { .join(", "), )?, ) - .send().await?; + .send() + .await?; let text = &res.text().await?; let json: serde_json::Value = serde_json::from_str(text)?; Ok(json["items"] diff --git a/src/api/mod.rs b/src/api/mod.rs index 58d0fec3..2a53b19a 100644 --- a/src/api/mod.rs +++ b/src/api/mod.rs @@ -32,15 +32,15 @@ impl<'r> Responder<'r> for ApiError { Error::NotFound => Json(json!({ "error": "Not found" })) - .respond_to(req), + .respond_to(req), Error::Unauthorized => Json(json!({ "error": "You are not authorized to access this resource" })) - .respond_to(req), + .respond_to(req), _ => Json(json!({ "error": "Server error" })) - .respond_to(req), + .respond_to(req), } } } diff --git a/src/routes/instance.rs b/src/routes/instance.rs index 59407720..a4897cff 100644 --- a/src/routes/instance.rs +++ b/src/routes/instance.rs @@ -6,8 +6,8 @@ use rocket_contrib::json::Json; use rocket_i18n::I18n; use scheduled_thread_pool::ScheduledThreadPool; use serde_json; -use std::str::FromStr; use std::path::PathBuf; +use std::str::FromStr; use validator::{Validate, ValidationErrors}; use crate::inbox; diff --git a/src/routes/posts.rs b/src/routes/posts.rs index c10ae0da..9b295b2f 100644 --- a/src/routes/posts.rs +++ b/src/routes/posts.rs @@ -11,7 +11,7 @@ use std::{ use validator::{Validate, ValidationError, ValidationErrors}; use crate::routes::{ - comments::NewCommentForm, errors::ErrorPage, Page, ContentLen, RemoteForm, RespondOrRedirect, + comments::NewCommentForm, errors::ErrorPage, ContentLen, Page, RemoteForm, RespondOrRedirect, }; use crate::template_utils::{IntoContext, Ructe}; use plume_common::activity_pub::{broadcast, ActivityStream, ApRequest}; -- 2.38.5 From e4bb73d22eb4b8916aedacd4d0aa0e2d466bf368 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Igor=20Gali=C4=87?= Date: Tue, 18 Feb 2020 09:29:39 +0100 Subject: [PATCH 24/46] cargo clippy --- plume-models/src/posts.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plume-models/src/posts.rs b/plume-models/src/posts.rs index 92b3f5a9..2fcae95d 100644 --- a/plume-models/src/posts.rs +++ b/plume-models/src/posts.rs @@ -715,7 +715,7 @@ impl FromId for PostUpdate { title: updated.object.object_props.name_string().ok(), subtitle: updated.object.object_props.summary_string().ok(), content: updated.object.object_props.content_string().ok(), - cover: cover, + cover, source: updated .object .ap_object_props -- 2.38.5 From 2c285b9aca268d2d947bed06e76cb3b1a02cf9c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Igor=20Gali=C4=87?= Date: Tue, 18 Feb 2020 10:47:47 +0100 Subject: [PATCH 25/46] start async-ifying routes template utils and error routes --- src/routes/errors.rs | 29 ++++++++++++++++++------- src/routes/mod.rs | 42 ++++++++++++++++++++---------------- src/template_utils.rs | 50 +++++++++++++++++++++++-------------------- 3 files changed, 71 insertions(+), 50 deletions(-) diff --git a/src/routes/errors.rs b/src/routes/errors.rs index 53baeef0..904d1fd7 100644 --- a/src/routes/errors.rs +++ b/src/routes/errors.rs @@ -1,6 +1,7 @@ use crate::template_utils::{IntoContext, Ructe}; use plume_models::{Error, PlumeRocket}; use rocket::{ + request::FromRequestAsync, response::{self, Responder}, Request, }; @@ -15,16 +16,28 @@ impl From for ErrorPage { } impl<'r> Responder<'r> for ErrorPage { - fn respond_to(self, req: &Request<'_>) -> response::Result<'r> { - let rockets = req.guard::().unwrap(); + fn respond_to(self, req: &'r Request<'_>) -> response::ResultFuture<'r> { + Box::pin(async move { + let rockets = PlumeRocket::from_request(req).await.unwrap(); - match self.0 { - Error::NotFound => render!(errors::not_found(&rockets.to_context())).respond_to(req), - Error::Unauthorized => { - render!(errors::not_found(&rockets.to_context())).respond_to(req) + match self.0 { + Error::NotFound => { + render!(errors::not_found(&rockets.to_context())) + .respond_to(req) + .await + } + Error::Unauthorized => { + render!(errors::not_found(&rockets.to_context())) + .respond_to(req) + .await + } + _ => { + render!(errors::not_found(&rockets.to_context())) + .respond_to(req) + .await + } } - _ => render!(errors::not_found(&rockets.to_context())).respond_to(req), - } + }) } } diff --git a/src/routes/mod.rs b/src/routes/mod.rs index 4583a8a8..27c8d2b2 100755 --- a/src/routes/mod.rs +++ b/src/routes/mod.rs @@ -214,27 +214,31 @@ pub struct CachedFile { pub struct ThemeFile(NamedFile); impl<'r> Responder<'r> for ThemeFile { - fn respond_to(self, r: &Request<'_>) -> response::Result<'r> { - let contents = std::fs::read(self.0.path()).map_err(|_| Status::InternalServerError)?; + fn respond_to(self, r: &'r Request<'_>) -> response::ResultFuture<'r> { + Box::pin(async move { + let contents = std::fs::read(self.0.path()).map_err(|_| Status::InternalServerError)?; - let mut hasher = DefaultHasher::new(); - hasher.write(&contents); - let etag = format!("{:x}", hasher.finish()); + let mut hasher = DefaultHasher::new(); + hasher.write(&contents); + let etag = format!("{:x}", hasher.finish()); - if r.headers() - .get("If-None-Match") - .any(|s| s[1..s.len() - 1] == etag) - { - Response::build() - .status(Status::NotModified) - .header("ETag", etag) - .ok() - } else { - Response::build() - .merge(self.0.respond_to(r)?) - .header("ETag", etag) - .ok() - } + if r.headers() + .get("If-None-Match") + .any(|s| s[1..s.len() - 1] == etag) + { + Response::build() + .status(Status::NotModified) + .header(Header::new("ETag", etag)) + .ok() + .await + } else { + Response::build() + .merge(self.0.respond_to(r).await.ok().unwrap()) + .header(Header::new("ETag", etag)) + .ok() + .await + } + }) } } diff --git a/src/template_utils.rs b/src/template_utils.rs index 4c371ddd..157f2fd4 100644 --- a/src/template_utils.rs +++ b/src/template_utils.rs @@ -1,7 +1,7 @@ use plume_models::{notifications::*, users::User, Connection, PlumeRocket}; use crate::templates::Html; -use rocket::http::{Method, Status}; +use rocket::http::{Header, Method, Status}; use rocket::request::Request; use rocket::response::{self, content::Html as HtmlCt, Responder, Response}; use rocket_i18n::Catalog; @@ -52,28 +52,32 @@ impl IntoContext for PlumeRocket { pub struct Ructe(pub Vec); impl<'r> Responder<'r> for Ructe { - fn respond_to(self, r: &Request<'_>) -> response::Result<'r> { - //if method is not Get or page contain a form, no caching - if r.method() != Method::Get || self.0.windows(6).any(|w| w == b"
response::ResultFuture<'r> { + Box::pin(async move { + //if method is not Get or page contain a form, no caching + if r.method() != Method::Get || self.0.windows(6).any(|w| w == b" Date: Tue, 18 Feb 2020 10:57:55 +0100 Subject: [PATCH 26/46] update webfinger as requested in https://github.com/Plume-org/webfinger/issues/8 and provided in https://github.com/Plume-org/webfinger/pull/9 ``` meena@76ix ~/s/a/plume (go/async) [101]> cargo update --package webfinger Updating crates.io index Updating git repository `https://github.com/Plume-org/webfinger` Removing bytes v0.4.12 Removing cookie v0.12.0 Removing cookie_store v0.7.0 Removing crossbeam-deque v0.7.2 Removing crossbeam-epoch v0.8.0 Removing crossbeam-queue v0.1.2 Removing crossbeam-utils v0.7.0 Removing h2 v0.1.26 Removing http v0.1.21 Removing http-body v0.1.0 Removing hyper v0.12.35 Removing hyper-tls v0.3.2 Removing publicsuffix v1.5.4 Removing reqwest v0.9.24 Removing serde_urlencoded v0.5.5 Removing string v0.2.1 Removing tokio v0.1.22 Removing tokio-buf v0.1.1 Removing tokio-current-thread v0.1.6 Removing tokio-executor v0.1.9 Removing tokio-io v0.1.12 Removing tokio-reactor v0.1.11 Removing tokio-sync v0.1.7 Removing tokio-tcp v0.1.3 Removing tokio-threadpool v0.1.17 Removing tokio-timer v0.2.12 Removing try_from v0.3.2 Removing want v0.2.0 Adding webfinger v0.5.0 (https://github.com/Plume-org/webfinger?rev=update-deps#cdaab95e) Removing webfinger v0.5.0 meena@76ix ~/s/a/plume (go/async)> ``` --- Cargo.lock | 484 ++++------------------------------------ Cargo.toml | 2 +- plume-models/Cargo.toml | 2 +- 3 files changed, 48 insertions(+), 440 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3760d7f5..4a8256e5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -406,17 +406,6 @@ version = "1.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de" -[[package]] -name = "bytes" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c" -dependencies = [ - "byteorder 1.3.4", - "either 1.5.3", - "iovec", -] - [[package]] name = "bytes" version = "0.5.4" @@ -553,34 +542,6 @@ dependencies = [ "time", ] -[[package]] -name = "cookie" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "888604f00b3db336d2af898ec3c1d5d0ddf5e6d462220f2ededc33a87ac4bbd5" -dependencies = [ - "time", - "url 1.7.2", -] - -[[package]] -name = "cookie_store" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46750b3f362965f197996c4448e4a0935e791bf7d6631bfce9ee0af3d24c919c" -dependencies = [ - "cookie 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", - "failure", - "idna 0.1.5", - "log 0.4.8", - "publicsuffix", - "serde", - "serde_json", - "time", - "try_from", - "url 1.7.2", -] - [[package]] name = "core-foundation" version = "0.7.0" @@ -620,9 +581,9 @@ checksum = "d1c92ff2d7a202d592f5a412d75cf421495c913817781c1cb383bf12a77e185f" dependencies = [ "cfg-if", "crossbeam-channel", - "crossbeam-deque 0.6.3", + "crossbeam-deque", "crossbeam-epoch 0.6.1", - "crossbeam-utils 0.6.6", + "crossbeam-utils", "lazy_static", "num_cpus", "parking_lot 0.6.4", @@ -634,7 +595,7 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c8ec7fcd21571dc78f96cc96243cab8d8f035247c3efd16c687be154c3fa9efa" dependencies = [ - "crossbeam-utils 0.6.6", + "crossbeam-utils", ] [[package]] @@ -644,18 +605,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05e44b8cf3e1a625844d1750e1f7820da46044ff6d28f4d43e455ba3e5bb2c13" dependencies = [ "crossbeam-epoch 0.7.2", - "crossbeam-utils 0.6.6", -] - -[[package]] -name = "crossbeam-deque" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f02af974daeee82218205558e51ec8768b48cf524bd01d550abe5573a608285" -dependencies = [ - "crossbeam-epoch 0.8.2", - "crossbeam-utils 0.7.2", - "maybe-uninit", + "crossbeam-utils", ] [[package]] @@ -666,7 +616,7 @@ checksum = "2449aaa4ec7ef96e5fb24db16024b935df718e9ae1cec0a1e68feeca2efca7b8" dependencies = [ "arrayvec", "cfg-if", - "crossbeam-utils 0.6.6", + "crossbeam-utils", "lazy_static", "memoffset 0.2.1", "scopeguard 0.3.3", @@ -680,37 +630,12 @@ checksum = "fedcd6772e37f3da2a9af9bf12ebe046c0dfe657992377b4df982a2b54cd37a9" dependencies = [ "arrayvec", "cfg-if", - "crossbeam-utils 0.6.6", - "lazy_static", - "memoffset 0.5.4", - "scopeguard 1.1.0", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "058ed274caafc1f60c4997b5fc07bf7dc7cca454af7c6e81edffe5f33f70dace" -dependencies = [ - "autocfg 1.0.0", - "cfg-if", - "crossbeam-utils 0.7.2", + "crossbeam-utils", "lazy_static", - "maybe-uninit", "memoffset 0.5.4", "scopeguard 1.1.0", ] -[[package]] -name = "crossbeam-queue" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c695eeca1e7173472a32221542ae469b3e9aac3a4fc81f7696bcad82029493db" -dependencies = [ - "cfg-if", - "crossbeam-utils 0.7.2", -] - [[package]] name = "crossbeam-utils" version = "0.6.6" @@ -721,17 +646,6 @@ dependencies = [ "lazy_static", ] -[[package]] -name = "crossbeam-utils" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8" -dependencies = [ - "autocfg 1.0.0", - "cfg-if", - "lazy_static", -] - [[package]] name = "crunchy" version = "0.2.2" @@ -1419,40 +1333,22 @@ dependencies = [ "winapi 0.2.8", ] -[[package]] -name = "h2" -version = "0.1.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5b34c246847f938a410a03c5458c7fee2274436675e76d8b903c08efc29c462" -dependencies = [ - "byteorder 1.3.4", - "bytes 0.4.12", - "fnv", - "futures 0.1.29", - "http 0.1.21", - "indexmap", - "log 0.4.8", - "slab", - "string", - "tokio-io", -] - [[package]] name = "h2" version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "79b7246d7e4b979c03fa093da39cfb3617a96bbeee6310af63991668d7e843ff" dependencies = [ - "bytes 0.5.4", + "bytes", "fnv", "futures-core", "futures-sink", "futures-util", - "http 0.2.1", + "http", "indexmap", "log 0.4.8", "slab", - "tokio 0.2.20", + "tokio", "tokio-util", ] @@ -1520,48 +1416,25 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e9025058dae765dee5070ec375f591e2ba14638c63feff74f13805a72e523163" -[[package]] -name = "http" -version = "0.1.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6ccf5ede3a895d8856620237b2f02972c1bbc78d2965ad7fe8838d4a0ed41f0" -dependencies = [ - "bytes 0.4.12", - "fnv", - "itoa", -] - [[package]] name = "http" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28d569972648b2c512421b5f2a405ad6ac9666547189d0c5477a3f200f3e02f9" dependencies = [ - "bytes 0.5.4", + "bytes", "fnv", "itoa", ] -[[package]] -name = "http-body" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6741c859c1b2463a423a1dbce98d418e6c3c3fc720fb0d45528657320920292d" -dependencies = [ - "bytes 0.4.12", - "futures 0.1.29", - "http 0.1.21", - "tokio-buf", -] - [[package]] name = "http-body" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13d5ff830006f7646652e057693569bfe0d51760c0085a071769d142a205111b" dependencies = [ - "bytes 0.5.4", - "http 0.2.1", + "bytes", + "http", ] [[package]] @@ -1579,71 +1452,28 @@ dependencies = [ "quick-error", ] -[[package]] -name = "hyper" -version = "0.12.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dbe6ed1438e1f8ad955a4701e9a944938e9519f6888d12d8558b645e247d5f6" -dependencies = [ - "bytes 0.4.12", - "futures 0.1.29", - "futures-cpupool", - "h2 0.1.26", - "http 0.1.21", - "http-body 0.1.0", - "httparse", - "iovec", - "itoa", - "log 0.4.8", - "net2", - "rustc_version", - "time", - "tokio 0.1.22", - "tokio-buf", - "tokio-executor", - "tokio-io", - "tokio-reactor", - "tokio-tcp", - "tokio-threadpool", - "tokio-timer", - "want 0.2.0", -] - [[package]] name = "hyper" version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96816e1d921eca64d208a85aab4f7798455a8e34229ee5a88c935bdee1b78b14" dependencies = [ - "bytes 0.5.4", + "bytes", "futures-channel", "futures-core", "futures-util", - "h2 0.2.5", - "http 0.2.1", - "http-body 0.3.1", + "h2", + "http", + "http-body", "httparse", "itoa", "log 0.4.8", "net2", "pin-project", "time", - "tokio 0.2.20", + "tokio", "tower-service", - "want 0.3.0", -] - -[[package]] -name = "hyper-tls" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a800d6aa50af4b5850b2b0f659625ce9504df908e9733b635720483be26174f" -dependencies = [ - "bytes 0.4.12", - "futures 0.1.29", - "hyper 0.12.35", - "native-tls", - "tokio-io", + "want", ] [[package]] @@ -1652,10 +1482,10 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3adcd308402b9553630734e9c36b77a7e48b3821251ca2493e8cd596763aafaa" dependencies = [ - "bytes 0.5.4", - "hyper 0.13.5", + "bytes", + "hyper", "native-tls", - "tokio 0.2.20", + "tokio", "tokio-tls", ] @@ -2612,7 +2442,7 @@ dependencies = [ "serde_qs", "shrinkwraprs 0.2.3", "syntect", - "tokio 0.2.20", + "tokio", "validator", "validator_derive", "webfinger", @@ -2650,18 +2480,18 @@ dependencies = [ "futures-util", "heck", "hex", - "hyper 0.13.5", + "hyper", "openssl", "pulldown-cmark", "regex-syntax 0.6.17", - "reqwest 0.10.4", + "reqwest", "rocket", "serde", "serde_derive", "serde_json", "shrinkwraprs 0.2.3", "syntect", - "tokio 0.2.20", + "tokio", ] [[package]] @@ -2709,7 +2539,7 @@ dependencies = [ "plume-api", "plume-common", "plume-macro", - "reqwest 0.10.4", + "reqwest", "rocket", "rocket_i18n", "scheduled-thread-pool", @@ -2718,7 +2548,7 @@ dependencies = [ "serde_json", "shrinkwraprs 0.3.0", "tantivy", - "tokio 0.2.20", + "tokio", "url 2.1.1", "walkdir", "webfinger", @@ -2809,19 +2639,6 @@ dependencies = [ "unicode-xid 0.2.0", ] -[[package]] -name = "publicsuffix" -version = "1.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bbaa49075179162b49acac1c6aa45fb4dafb5f13cf6794276d77bc7fd95757b" -dependencies = [ - "error-chain", - "idna 0.2.0", - "lazy_static", - "regex", - "url 2.1.1", -] - [[package]] name = "pulldown-cmark" version = "0.2.0" @@ -3123,40 +2940,6 @@ dependencies = [ "winapi 0.3.8", ] -[[package]] -name = "reqwest" -version = "0.9.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f88643aea3c1343c804950d7bf983bd2067f5ab59db6d613a08e05572f2714ab" -dependencies = [ - "base64 0.10.1", - "bytes 0.4.12", - "cookie 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", - "cookie_store", - "encoding_rs", - "flate2", - "futures 0.1.29", - "http 0.1.21", - "hyper 0.12.35", - "hyper-tls 0.3.2", - "log 0.4.8", - "mime 0.3.16", - "mime_guess 2.0.3", - "native-tls", - "serde", - "serde_json", - "serde_urlencoded 0.5.5", - "time", - "tokio 0.1.22", - "tokio-executor", - "tokio-io", - "tokio-threadpool", - "tokio-timer", - "url 1.7.2", - "uuid", - "winreg", -] - [[package]] name = "reqwest" version = "0.10.4" @@ -3164,14 +2947,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "02b81e49ddec5109a9dcfc5f2a317ff53377c915e9ae9d4f2fb50914b85614e2" dependencies = [ "base64 0.11.0", - "bytes 0.5.4", + "bytes", "encoding_rs", "futures-core", "futures-util", - "http 0.2.1", - "http-body 0.3.1", - "hyper 0.13.5", - "hyper-tls 0.4.1", + "http", + "http-body", + "hyper", + "hyper-tls", "js-sys", "lazy_static", "log 0.4.8", @@ -3182,9 +2965,9 @@ dependencies = [ "pin-project-lite", "serde", "serde_json", - "serde_urlencoded 0.6.1", + "serde_urlencoded", "time", - "tokio 0.2.20", + "tokio", "tokio-tls", "url 2.1.1", "wasm-bindgen", @@ -3227,7 +3010,7 @@ dependencies = [ "rocket_http", "state", "time", - "tokio 0.2.20", + "tokio", "toml", "version_check 0.9.1", "yansi 0.5.0", @@ -3256,7 +3039,7 @@ dependencies = [ "rocket", "serde", "serde_json", - "tokio 0.2.20", + "tokio", ] [[package]] @@ -3264,9 +3047,9 @@ name = "rocket_http" version = "0.5.0-dev" source = "git+https://github.com/SergioBenitez/Rocket?rev=async#78c8ac8ccdbe85abb9508fb9657e70eb2b8d08c0" dependencies = [ - "cookie 0.12.0 (git+https://github.com/SergioBenitez/cookie-rs?rev=e0f3e6c)", - "http 0.2.1", - "hyper 0.13.5", + "cookie", + "http", + "hyper", "indexmap", "log 0.4.8", "mime 0.3.16", @@ -3275,7 +3058,7 @@ dependencies = [ "smallvec 1.4.0", "state", "time", - "tokio 0.2.20", + "tokio", "unicode-xid 0.2.0", ] @@ -3508,18 +3291,6 @@ dependencies = [ "serde", ] -[[package]] -name = "serde_urlencoded" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "642dd69105886af2efd227f75a520ec9b44a820d65bc133a9131f7d229fd165a" -dependencies = [ - "dtoa", - "itoa", - "serde", - "url 1.7.2", -] - [[package]] name = "serde_urlencoded" version = "0.6.1" @@ -3692,15 +3463,6 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d52317523542cc0af5b7e31017ad0f7d1e78da50455e38d5657cd17754f617da" -[[package]] -name = "string" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d24114bfcceb867ca7f71a0d3fe45d45619ec47a6fbfa98cb14e14250bfa5d6d" -dependencies = [ - "bytes 0.4.12", -] - [[package]] name = "string_cache" version = "0.7.5" @@ -3983,32 +3745,13 @@ dependencies = [ "winapi 0.3.8", ] -[[package]] -name = "tokio" -version = "0.1.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a09c0b5bb588872ab2f09afa13ee6e9dac11e10a0ec9e8e3ba39a5a5d530af6" -dependencies = [ - "bytes 0.4.12", - "futures 0.1.29", - "mio", - "num_cpus", - "tokio-current-thread", - "tokio-executor", - "tokio-io", - "tokio-reactor", - "tokio-tcp", - "tokio-threadpool", - "tokio-timer", -] - [[package]] name = "tokio" version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05c1d570eb1a36f0345a5ce9c6c6e665b70b73d11236912c0b477616aeec47b1" dependencies = [ - "bytes 0.5.4", + "bytes", "fnv", "futures-core", "iovec", @@ -4024,120 +3767,6 @@ dependencies = [ "winapi 0.3.8", ] -[[package]] -name = "tokio-buf" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fb220f46c53859a4b7ec083e41dec9778ff0b1851c0942b211edb89e0ccdc46" -dependencies = [ - "bytes 0.4.12", - "either 1.5.3", - "futures 0.1.29", -] - -[[package]] -name = "tokio-current-thread" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1de0e32a83f131e002238d7ccde18211c0a5397f60cbfffcb112868c2e0e20e" -dependencies = [ - "futures 0.1.29", - "tokio-executor", -] - -[[package]] -name = "tokio-executor" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb2d1b8f4548dbf5e1f7818512e9c406860678f29c300cdf0ebac72d1a3a1671" -dependencies = [ - "crossbeam-utils 0.7.2", - "futures 0.1.29", -] - -[[package]] -name = "tokio-io" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57fc868aae093479e3131e3d165c93b1c7474109d13c90ec0dda2a1bbfff0674" -dependencies = [ - "bytes 0.4.12", - "futures 0.1.29", - "log 0.4.8", -] - -[[package]] -name = "tokio-reactor" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09bc590ec4ba8ba87652da2068d150dcada2cfa2e07faae270a5e0409aa51351" -dependencies = [ - "crossbeam-utils 0.7.2", - "futures 0.1.29", - "lazy_static", - "log 0.4.8", - "mio", - "num_cpus", - "parking_lot 0.9.0", - "slab", - "tokio-executor", - "tokio-io", - "tokio-sync", -] - -[[package]] -name = "tokio-sync" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edfe50152bc8164fcc456dab7891fa9bf8beaf01c5ee7e1dd43a397c3cf87dee" -dependencies = [ - "fnv", - "futures 0.1.29", -] - -[[package]] -name = "tokio-tcp" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98df18ed66e3b72e742f185882a9e201892407957e45fbff8da17ae7a7c51f72" -dependencies = [ - "bytes 0.4.12", - "futures 0.1.29", - "iovec", - "mio", - "tokio-io", - "tokio-reactor", -] - -[[package]] -name = "tokio-threadpool" -version = "0.1.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df720b6581784c118f0eb4310796b12b1d242a7eb95f716a8367855325c25f89" -dependencies = [ - "crossbeam-deque 0.7.3", - "crossbeam-queue", - "crossbeam-utils 0.7.2", - "futures 0.1.29", - "lazy_static", - "log 0.4.8", - "num_cpus", - "slab", - "tokio-executor", -] - -[[package]] -name = "tokio-timer" -version = "0.2.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93044f2d313c95ff1cb7809ce9a7a05735b012288a888b62d4434fd58c94f296" -dependencies = [ - "crossbeam-utils 0.7.2", - "futures 0.1.29", - "slab", - "tokio-executor", -] - [[package]] name = "tokio-tls" version = "0.3.1" @@ -4145,7 +3774,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a70f4fcd7b3b24fb194f837560168208f669ca8cb70d0c4b862944452396343" dependencies = [ "native-tls", - "tokio 0.2.20", + "tokio", ] [[package]] @@ -4154,12 +3783,12 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "be8242891f2b6cbef26a2d7e8605133c2c554cd35b3e4948ea892d6d68436499" dependencies = [ - "bytes 0.5.4", + "bytes", "futures-core", "futures-sink", "log 0.4.8", "pin-project-lite", - "tokio 0.2.20", + "tokio", ] [[package]] @@ -4183,15 +3812,6 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e604eb7b43c06650e854be16a2a03155743d3752dd1c943f6829e26b7a36e382" -[[package]] -name = "try_from" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "283d3b89e1368717881a9d51dad843cc435380d8109c9e47d38780a324698d8b" -dependencies = [ - "cfg-if", -] - [[package]] name = "twoway" version = "0.1.8" @@ -4409,17 +4029,6 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "want" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6395efa4784b027708f7451087e647ec73cc74f5d9bc2e418404248d679a230" -dependencies = [ - "futures 0.1.29", - "log 0.4.8", - "try-lock", -] - [[package]] name = "want" version = "0.3.0" @@ -4517,10 +4126,9 @@ dependencies = [ [[package]] name = "webfinger" version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b2821f6de671bfbe4792927622004b6f5364068b8edba4f51af14c10b36204e" +source = "git+https://github.com/Plume-org/webfinger?rev=update-deps#cdaab95ed54765cdd70c61c39f9d2d19348472a9" dependencies = [ - "reqwest 0.9.24", + "reqwest", "serde", ] diff --git a/Cargo.toml b/Cargo.toml index 57fc39df..460db7e1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -33,7 +33,7 @@ syntect = "3.3" tokio = "0.2" validator = "0.8" validator_derive = "0.8" -webfinger = "0.5" +webfinger = { git = "https://github.com/Plume-org/webfinger", rev = "update-deps" } [[bin]] name = "plume" diff --git a/plume-models/Cargo.toml b/plume-models/Cargo.toml index 5d7f6ef5..1ee88cc8 100644 --- a/plume-models/Cargo.toml +++ b/plume-models/Cargo.toml @@ -24,7 +24,7 @@ tantivy = "0.10.1" tokio = "0.2" url = "2.1" walkdir = "2.2" -webfinger = "0.5" +webfinger = { git = "https://github.com/Plume-org/webfinger", rev = "update-deps" } whatlang = "0.7.1" shrinkwraprs = "0.3" diesel-derive-newtype = "0.1.2" -- 2.38.5 From 6fe16c9f8465835835b46d4e3627e0566bd12955 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Igor=20Gali=C4=87?= Date: Tue, 18 Feb 2020 16:35:25 +0100 Subject: [PATCH 27/46] =?UTF-8?q?upgrade=20and=20use=20futures=E2=80=A6=20?= =?UTF-8?q?then=20block=5Fon=20.await=20in=20a=20trait=3F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Cargo.lock | 1 + plume-models/Cargo.toml | 1 + plume-models/src/blogs.rs | 9 +++++---- plume-models/src/lib.rs | 1 + plume-models/src/timeline/query.rs | 19 +++++++++++++++---- 5 files changed, 23 insertions(+), 8 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4a8256e5..783e5c71 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2529,6 +2529,7 @@ dependencies = [ "diesel", "diesel-derive-newtype", "diesel_migrations", + "futures 0.3.4", "glob", "guid-create", "heck", diff --git a/plume-models/Cargo.toml b/plume-models/Cargo.toml index 1ee88cc8..fb49cfd6 100644 --- a/plume-models/Cargo.toml +++ b/plume-models/Cargo.toml @@ -10,6 +10,7 @@ ammonia = "2.1.1" askama_escape = "0.1" bcrypt = "0.5" guid-create = "0.1" +futures = "0.3" heck = "0.3.0" itertools = "0.8.0" lazy_static = "1.0" diff --git a/plume-models/src/blogs.rs b/plume-models/src/blogs.rs index cbef35c6..e4f15268 100644 --- a/plume-models/src/blogs.rs +++ b/plume-models/src/blogs.rs @@ -132,7 +132,7 @@ impl Blog { .map_err(Error::from) } - pub fn find_by_fqn(c: &PlumeRocket, fqn: &str) -> Result { + pub async fn find_by_fqn(c: &PlumeRocket, fqn: &str) -> Result { let from_db = blogs::table .filter(blogs::fqn.eq(fqn)) .first(&*c.conn) @@ -140,12 +140,13 @@ impl Blog { if let Some(from_db) = from_db { Ok(from_db) } else { - Blog::fetch_from_webfinger(c, fqn) + Blog::fetch_from_webfinger(c, fqn).await } } - fn fetch_from_webfinger(c: &PlumeRocket, acct: &str) -> Result { - resolve_with_prefix(Prefix::Group, acct.to_owned(), true)? + async fn fetch_from_webfinger(c: &PlumeRocket, acct: &str) -> Result { + resolve_with_prefix(Prefix::Group, acct.to_owned(), true) + .await? .links .into_iter() .find(|l| l.mime_type == Some(String::from("application/activity+json"))) diff --git a/plume-models/src/lib.rs b/plume-models/src/lib.rs index 2a56028e..f652e6df 100644 --- a/plume-models/src/lib.rs +++ b/plume-models/src/lib.rs @@ -4,6 +4,7 @@ #[macro_use] extern crate diesel; +extern crate futures; #[macro_use] extern crate lazy_static; #[macro_use] diff --git a/plume-models/src/timeline/query.rs b/plume-models/src/timeline/query.rs index 68cd42d5..7c0a249d 100644 --- a/plume-models/src/timeline/query.rs +++ b/plume-models/src/timeline/query.rs @@ -7,7 +7,9 @@ use crate::{ users::User, PlumeRocket, Result, }; +use futures::stream::{self, StreamExt}; use plume_common::activity_pub::inbox::AsActor; +use tokio::runtime::Runtime; use whatlang::{self, Lang}; #[derive(Debug, Clone, PartialEq)] @@ -295,10 +297,19 @@ impl WithList { } } List::Array(list) => match self { - WithList::Blog => Ok(list - .iter() - .filter_map(|b| Blog::find_by_fqn(rocket, b).ok()) - .any(|b| b.id == post.blog_id)), + WithList::Blog => { + let mut rt = Runtime::new().unwrap(); + rt.block_on(async move { + Ok(stream::iter(list) + .filter_map(|b| async move { + Some(Blog::find_by_fqn(rocket, b).await.ok().unwrap()) + }) + .collect::>() + .await + .into_iter() + .any(|b| b.id == post.blog_id)) + }) + } WithList::Author { boosts, likes } => match kind { Kind::Original => Ok(list .iter() -- 2.38.5 From 097d0ea9ceb7ccb2b231301a84435c213763d05f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Igor=20Gali=C4=87?= Date: Tue, 18 Feb 2020 17:58:28 +0100 Subject: [PATCH 28/46] make plume-models async (again) --- plume-models/src/comments.rs | 15 ++++++++------- plume-models/src/mentions.rs | 4 ++-- plume-models/src/timeline/query.rs | 17 +++++++++++++---- plume-models/src/users.rs | 14 ++++++++------ 4 files changed, 31 insertions(+), 19 deletions(-) diff --git a/plume-models/src/comments.rs b/plume-models/src/comments.rs index 702db19c..99a68518 100644 --- a/plume-models/src/comments.rs +++ b/plume-models/src/comments.rs @@ -17,6 +17,7 @@ use activitypub::{ }; use chrono::{self, NaiveDateTime}; use diesel::{self, ExpressionMethods, QueryDsl, RunQueryDsl, SaveChangesDsl}; +use futures::stream::{self, StreamExt}; use plume_common::{ activity_pub::{ inbox::{AsActor, AsObject, FromId}, @@ -105,7 +106,7 @@ impl Comment { .unwrap_or(false) } - pub fn to_activity(&self, c: &PlumeRocket) -> Result { + pub async fn to_activity(&self, c: &PlumeRocket) -> Result { let author = User::get(&c.conn, self.author_id)?; let (html, mentions, _hashtags) = utils::md_to_html( self.content.get().as_ref(), @@ -132,18 +133,18 @@ impl Comment { note.object_props.set_attributed_to_link(author.into_id())?; note.object_props.set_to_link_vec(to)?; note.object_props.set_tag_link_vec( - mentions - .into_iter() - .filter_map(|m| Mention::build_activity(c, &m).ok()) - .collect::>(), + stream::iter(mentions) + .filter_map(|m| async move { Mention::build_activity(c, &m).await.ok() }) + .collect::>() + .await, )?; Ok(note) } - pub fn create_activity(&self, c: &PlumeRocket) -> Result { + pub async fn create_activity(&self, c: &PlumeRocket) -> Result { let author = User::get(&c.conn, self.author_id)?; - let note = self.to_activity(c)?; + let note = self.to_activity(c).await?; let mut act = Create::default(); act.create_props.set_actor_link(author.into_id())?; act.create_props.set_object_object(note.clone())?; diff --git a/plume-models/src/mentions.rs b/plume-models/src/mentions.rs index 6eff48a0..e65a16cb 100644 --- a/plume-models/src/mentions.rs +++ b/plume-models/src/mentions.rs @@ -52,8 +52,8 @@ impl Mention { } } - pub fn build_activity(c: &PlumeRocket, ment: &str) -> Result { - let user = User::find_by_fqn(c, ment)?; + pub async fn build_activity(c: &PlumeRocket, ment: &str) -> Result { + let user = User::find_by_fqn(c, ment).await?; let mut mention = link::Mention::default(); mention.link_props.set_href_string(user.ap_url)?; mention.link_props.set_name_string(format!("@{}", ment))?; diff --git a/plume-models/src/timeline/query.rs b/plume-models/src/timeline/query.rs index 7c0a249d..c9a051c7 100644 --- a/plume-models/src/timeline/query.rs +++ b/plume-models/src/timeline/query.rs @@ -311,10 +311,19 @@ impl WithList { }) } WithList::Author { boosts, likes } => match kind { - Kind::Original => Ok(list - .iter() - .filter_map(|a| User::find_by_fqn(rocket, a).ok()) - .any(|a| post.is_author(&rocket.conn, a.id).unwrap_or(false))), + Kind::Original => { + let mut rt = Runtime::new().unwrap(); + rt.block_on(async move { + Ok(stream::iter(list) + .filter_map(|a| async move { + Some(User::find_by_fqn(rocket, a).await.ok().unwrap()) + }) + .collect::>() + .await + .into_iter() + .any(|a| post.is_author(&rocket.conn, a.id).unwrap_or(false))) + }) + } Kind::Reshare(u) => { if *boosts { Ok(list.iter().any(|user| &u.fqn == user)) diff --git a/plume-models/src/users.rs b/plume-models/src/users.rs index adc529b3..2a68b712 100644 --- a/plume-models/src/users.rs +++ b/plume-models/src/users.rs @@ -191,7 +191,7 @@ impl User { .map_err(Error::from) } - pub fn find_by_fqn(c: &PlumeRocket, fqn: &str) -> Result { + pub async fn find_by_fqn(c: &PlumeRocket, fqn: &str) -> Result { let from_db = users::table .filter(users::fqn.eq(fqn)) .first(&*c.conn) @@ -199,12 +199,13 @@ impl User { if let Some(from_db) = from_db { Ok(from_db) } else { - User::fetch_from_webfinger(c, fqn) + User::fetch_from_webfinger(c, fqn).await } } - fn fetch_from_webfinger(c: &PlumeRocket, acct: &str) -> Result { - let link = resolve(acct.to_owned(), true)? + async fn fetch_from_webfinger(c: &PlumeRocket, acct: &str) -> Result { + let link = resolve(acct.to_owned(), true) + .await? .links .into_iter() .find(|l| l.mime_type == Some(String::from("application/activity+json"))) @@ -212,8 +213,9 @@ impl User { User::from_id(c, link.href.as_ref()?, None).map_err(|(_, e)| e) } - pub fn fetch_remote_interact_uri(acct: &str) -> Result { - resolve(acct.to_owned(), true)? + pub async fn fetch_remote_interact_uri(acct: &str) -> Result { + resolve(acct.to_owned(), true) + .await? .links .into_iter() .find(|l| l.rel == "http://ostatus.org/schema/1.0/subscribe") -- 2.38.5 From 3c830ab0ced0510fb996557ba32e6be93c4d6f89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Igor=20Gali=C4=87?= Date: Fri, 15 May 2020 22:38:21 +0200 Subject: [PATCH 29/46] move towards using #[rocket::async_trait] this also upgrades some dependencies some of that fixes stuff, others breaks stuff. --- .gitignore | 1 + Cargo.lock | 79 +++++++++++++------------- Cargo.toml | 1 - plume-common/Cargo.toml | 2 +- plume-common/src/activity_pub/mod.rs | 80 ++++++++++++-------------- plume-models/src/admin.rs | 40 +++++++------ plume-models/src/api_tokens.rs | 51 +++++++++-------- plume-models/src/db_conn.rs | 17 +++--- plume-models/src/headers.rs | 3 +- plume-models/src/plume_rocket.rs | 84 +++++++++++++++------------- plume-models/src/users.rs | 23 ++++---- rust-toolchain | 2 +- src/api/authorization.rs | 4 +- src/api/mod.rs | 39 ++++++++----- src/main.rs | 2 - src/routes/errors.rs | 41 +++++++------- src/routes/mod.rs | 46 ++++++++------- src/routes/posts.rs | 2 +- src/routes/user.rs | 9 ++- src/routes/well_known.rs | 30 +++++++++- src/template_utils.rs | 49 ++++++++-------- 21 files changed, 314 insertions(+), 291 deletions(-) diff --git a/.gitignore b/.gitignore index d8d6fd27..172aeb0b 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,4 @@ tags.* search_index .buildconfig __pycache__ +.vscode/ diff --git a/Cargo.lock b/Cargo.lock index 783e5c71..742772d8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6,7 +6,7 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5bfd311e7b4102971757a2a6f143a93b1a8e6b5afc2c46936af827fd9eab403f" dependencies = [ - "activitystreams-derive", + "activitystreams-derive 0.1.1", "activitystreams-traits", "activitystreams-types", "serde", @@ -25,6 +25,17 @@ dependencies = [ "syn 0.13.11", ] +[[package]] +name = "activitystreams-derive" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65608fdeae5eb05485d5b71a3d2242d76b2b7413608c196d47eb4dff3eed7b85" +dependencies = [ + "proc-macro2 1.0.12", + "quote 1.0.4", + "syn 1.0.19", +] + [[package]] name = "activitystreams-traits" version = "0.1.0" @@ -42,7 +53,7 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff74c5765278614a009f97b9ec12f9a7c732bbcc5e0337fcfcab619b784860ec" dependencies = [ - "activitystreams-derive", + "activitystreams-derive 0.1.1", "activitystreams-traits", "chrono", "mime 0.3.16", @@ -142,7 +153,7 @@ checksum = "da71fef07bc806586090247e971229289f64c210a278ee5ae419314eb386b31d" dependencies = [ "proc-macro2 1.0.12", "quote 1.0.4", - "syn 1.0.18", + "syn 1.0.19", ] [[package]] @@ -746,7 +757,7 @@ dependencies = [ "bitflags 1.2.1", "proc-macro2 1.0.12", "quote 1.0.4", - "syn 1.0.18", + "syn 1.0.19", ] [[package]] @@ -784,7 +795,7 @@ checksum = "45f5098f628d02a7a0f68ddba586fb61e80edec3bdc1be3b921f4ceec60858d3" dependencies = [ "proc-macro2 1.0.12", "quote 1.0.4", - "syn 1.0.18", + "syn 1.0.19", ] [[package]] @@ -978,7 +989,7 @@ checksum = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4" dependencies = [ "proc-macro2 1.0.12", "quote 1.0.4", - "syn 1.0.18", + "syn 1.0.19", "synstructure", ] @@ -993,9 +1004,9 @@ dependencies = [ [[package]] name = "filetime" -version = "0.2.9" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f59efc38004c988e4201d11d263b8171f49a2e7ec0bdbb71773433f271504a5e" +checksum = "affc17579b132fc2461adf7c575cc6e8b134ebca52c51f5411388965227dc695" dependencies = [ "cfg-if", "libc", @@ -1179,7 +1190,7 @@ dependencies = [ "proc-macro-hack 0.5.15", "proc-macro2 1.0.12", "quote 1.0.4", - "syn 1.0.18", + "syn 1.0.19", ] [[package]] @@ -1829,7 +1840,7 @@ dependencies = [ "migrations_internals", "proc-macro2 1.0.12", "quote 1.0.4", - "syn 1.0.18", + "syn 1.0.19", ] [[package]] @@ -2171,9 +2182,9 @@ checksum = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de" [[package]] name = "openssl-sys" -version = "0.9.55" +version = "0.9.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7717097d810a0f2e2323f9e5d11e71608355e24828410b55b9d4f18aa5f9a5d8" +checksum = "f02309a7f127000ed50594f0b50ecc69e7c654e16d41b4e8156d1b3df8e0b52e" dependencies = [ "autocfg 1.0.0", "cc", @@ -2354,29 +2365,29 @@ dependencies = [ [[package]] name = "pin-project" -version = "0.4.10" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36e3dcd42688c05a66f841d22c5d8390d9a5d4c9aaf57b9285eae4900a080063" +checksum = "82c3bfbfb5bb42f99498c7234bbd768c220eb0cea6818259d0d18a1aa3d2595d" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "0.4.10" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4d7346ac577ff1296e06a418e7618e22655bae834d4970cb6e39d6da8119969" +checksum = "ccbf6449dcfb18562c015526b085b8df1aa3cdab180af8ec2ebd300a3bd28f63" dependencies = [ "proc-macro2 1.0.12", "quote 1.0.4", - "syn 1.0.18", + "syn 1.0.19", ] [[package]] name = "pin-project-lite" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "237844750cfbb86f67afe27eee600dfbbcb6188d734139b534cbfbf4f96792ae" +checksum = "f7505eeebd78492e0f6108f7171c4948dbb120ee8119d9d77d0afa5469bef67f" [[package]] name = "pin-utils" @@ -2435,7 +2446,6 @@ dependencies = [ "rpassword", "rsass", "ructe", - "runtime-fmt", "scheduled-thread-pool", "serde", "serde_json", @@ -2472,7 +2482,7 @@ name = "plume-common" version = "0.4.0" dependencies = [ "activitypub", - "activitystreams-derive", + "activitystreams-derive 0.2.0", "activitystreams-traits", "array_tool", "base64 0.10.1", @@ -3066,7 +3076,7 @@ dependencies = [ [[package]] name = "rocket_i18n" version = "0.5.0" -source = "git+https://github.com/Plume-org/rocket_i18n?branch=go-async#a6c8cfb3c516d857493d938ec0c89e7bd0c29cad" +source = "git+https://github.com/Plume-org/rocket_i18n?branch=go-async#6ff7e2a7dd6dfc730478433f881300f36930ff52" dependencies = [ "gettext 0.4.0", "rocket", @@ -3108,15 +3118,6 @@ dependencies = [ "nom 5.1.1", ] -[[package]] -name = "runtime-fmt" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "703425f78450961e590726ac24d823e6dc2340dc18282cf0cb6a417b26ca2ce8" -dependencies = [ - "unicode-xid 0.2.0", -] - [[package]] name = "rust-stemmers" version = "1.2.0" @@ -3266,7 +3267,7 @@ checksum = "9e549e3abf4fb8621bd1609f11dfc9f5e50320802273b12f3811a67e6716ea6c" dependencies = [ "proc-macro2 1.0.12", "quote 1.0.4", - "syn 1.0.18", + "syn 1.0.19", ] [[package]] @@ -3326,7 +3327,7 @@ dependencies = [ "itertools", "proc-macro2 1.0.12", "quote 1.0.4", - "syn 1.0.18", + "syn 1.0.19", ] [[package]] @@ -3339,7 +3340,7 @@ dependencies = [ "itertools", "proc-macro2 1.0.12", "quote 1.0.4", - "syn 1.0.18", + "syn 1.0.19", ] [[package]] @@ -3561,9 +3562,9 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.18" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "410a7488c0a728c7ceb4ad59b9567eb4053d02e8cc7f5c0e0eeeb39518369213" +checksum = "e8e5aa70697bb26ee62214ae3288465ecec0000f05182f039b477001f08f5ae7" dependencies = [ "proc-macro2 1.0.12", "quote 1.0.4", @@ -3587,7 +3588,7 @@ checksum = "67656ea1dc1b41b1451851562ea232ec2e5a80242139f7e679ceccfb5d61f545" dependencies = [ "proc-macro2 1.0.12", "quote 1.0.4", - "syn 1.0.18", + "syn 1.0.19", "unicode-xid 0.2.0", ] @@ -4069,7 +4070,7 @@ dependencies = [ "log 0.4.8", "proc-macro2 1.0.12", "quote 1.0.4", - "syn 1.0.18", + "syn 1.0.19", "wasm-bindgen-shared", ] @@ -4103,7 +4104,7 @@ checksum = "8eb197bd3a47553334907ffd2f16507b4f4f01bbec3ac921a7719e0decdfe72a" dependencies = [ "proc-macro2 1.0.12", "quote 1.0.4", - "syn 1.0.18", + "syn 1.0.19", "wasm-bindgen-backend", "wasm-bindgen-shared", ] diff --git a/Cargo.toml b/Cargo.toml index 460db7e1..894d9672 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,7 +23,6 @@ num_cpus = "1.10" rocket = { git = "https://github.com/SergioBenitez/Rocket", rev = "async" } rocket_contrib = { git = "https://github.com/SergioBenitez/Rocket", rev = "async" , features = ["json"] } rpassword = "4.0" -runtime-fmt = "0.4.0" scheduled-thread-pool = "0.2.2" serde = "1.0" serde_json = "1.0" diff --git a/plume-common/Cargo.toml b/plume-common/Cargo.toml index d5b5f765..7ee4cfca 100644 --- a/plume-common/Cargo.toml +++ b/plume-common/Cargo.toml @@ -6,7 +6,7 @@ edition = "2018" [dependencies] activitypub = "0.1.1" -activitystreams-derive = "0.1.1" +activitystreams-derive = "0.2" activitystreams-traits = "0.1.0" array_tool = "1.0" base64 = "0.10" diff --git a/plume-common/src/activity_pub/mod.rs b/plume-common/src/activity_pub/mod.rs index 6efb3869..cb9d19db 100644 --- a/plume-common/src/activity_pub/mod.rs +++ b/plume-common/src/activity_pub/mod.rs @@ -3,8 +3,8 @@ use array_tool::vec::Uniq; use reqwest::ClientBuilder; use rocket::{ http::Status, - request::{FromRequestAsync, FromRequestFuture, Request}, - response::{Responder, Response, ResultFuture}, + request::{FromRequest, Request}, + response::{Responder, Response, Result}, Outcome, }; use serde_json; @@ -61,42 +61,36 @@ impl ActivityStream { ActivityStream(t) } } - +#[rocket::async_trait] impl<'r, O: Object + Send + 'r> Responder<'r> for ActivityStream { - fn respond_to(self, request: &'r Request<'_>) -> ResultFuture<'r> { - Box::pin(async move { - let mut json = - serde_json::to_value(&self.0).map_err(|_| Status::InternalServerError)?; - json["@context"] = context(); - let result = serde_json::to_string(&json).map_err(rocket::response::Debug); - match result.respond_to(request).await { - Ok(r) => { - Response::build_from(r) - .raw_header("Content-Type", "application/activity+json") - .ok() - .await - } - Err(e) => Err(e), - } - }) + async fn respond_to(self, request: &'r Request<'_>) -> Result<'r> { + let mut json = serde_json::to_value(&self.0).map_err(|_| Status::InternalServerError)?; + json["@context"] = context(); + let result = serde_json::to_string(&json).map_err(rocket::response::Debug); + match result.respond_to(request).await { + Ok(r) => Response::build_from(r) + .raw_header("Content-Type", "application/activity+json") + .ok(), + Err(e) => Err(e), + } } } #[derive(Clone)] pub struct ApRequest; -impl<'a, 'r> FromRequestAsync<'a, 'r> for ApRequest { +#[rocket::async_trait] +impl<'a, 'r> FromRequest<'a, 'r> for ApRequest { type Error = (); - fn from_request(request: &'a Request<'r>) -> FromRequestFuture<'a, Self, Self::Error> { - Box::pin(async move { - request - .headers() - .get_one("Accept") - .map(|header| { - header - .split(',') - .map(|ct| { - match ct.trim() { + async fn from_request(request: &'a Request<'r>) -> Outcome { + request + .headers() + .get_one("Accept") + .map(|header| { + header + .split(',') + .map(|ct| { + match ct.trim() { // bool for Forward: true if found a valid Content-Type for Plume first (HTML), // false otherwise "application/ld+json; profile=\"https://w3.org/ns/activitystreams\"" @@ -106,18 +100,17 @@ impl<'a, 'r> FromRequestAsync<'a, 'r> for ApRequest { "text/html" => Outcome::Forward(true), _ => Outcome::Forward(false), } - }) - .fold(Outcome::Forward(false), |out, ct| { - if out.clone().forwarded().unwrap_or_else(|| out.is_success()) { - out - } else { - ct - } - }) - .map_forward(|_| ()) - }) - .unwrap_or(Outcome::Forward(())) - }) + }) + .fold(Outcome::Forward(false), |out, ct| { + if out.clone().forwarded().unwrap_or_else(|| out.is_success()) { + out + } else { + ct + } + }) + .map_forward(|_| ()) + }) + .unwrap_or(Outcome::Forward(())) } } pub fn broadcast(sender: &S, act: A, to: Vec) @@ -217,8 +210,7 @@ pub struct PublicKey { pub public_key_pem: Option, } -#[derive(Clone, Debug, Default, UnitString)] -#[activitystreams(Hashtag)] +#[derive(Clone, Debug, Default, Deserialize, Serialize)] pub struct HashtagType; #[derive(Clone, Debug, Default, Deserialize, Serialize, Properties)] diff --git a/plume-models/src/admin.rs b/plume-models/src/admin.rs index 1dd810a9..1062434f 100644 --- a/plume-models/src/admin.rs +++ b/plume-models/src/admin.rs @@ -1,42 +1,40 @@ use crate::users::User; use rocket::{ http::Status, - request::{self, FromRequestAsync, Request}, + request::{self, FromRequest, Request}, Outcome, }; /// Wrapper around User to use as a request guard on pages reserved to admins. pub struct Admin(pub User); -impl<'a, 'r> FromRequestAsync<'a, 'r> for Admin { +#[rocket::async_trait] +impl<'a, 'r> FromRequest<'a, 'r> for Admin { type Error = (); - fn from_request(request: &'a Request<'r>) -> request::FromRequestFuture<'a, Self, Self::Error> { - Box::pin(async move { - let user = try_outcome!(User::from_request(request).await); - if user.is_admin() { - Outcome::Success(Admin(user)) - } else { - Outcome::Failure((Status::Unauthorized, ())) - } - }) + async fn from_request(request: &'a Request<'r>) -> request::Outcome { + let user = try_outcome!(User::from_request(request).await); + if user.is_admin() { + Outcome::Success(Admin(user)) + } else { + Outcome::Failure((Status::Unauthorized, ())) + } } } /// Same as `Admin` but for moderators. pub struct Moderator(pub User); -impl<'a, 'r> FromRequestAsync<'a, 'r> for Moderator { +#[rocket::async_trait] +impl<'a, 'r> FromRequest<'a, 'r> for Moderator { type Error = (); - fn from_request(request: &'a Request<'r>) -> request::FromRequestFuture<'a, Self, Self::Error> { - Box::pin(async move { - let user = try_outcome!(User::from_request(request).await); - if user.is_moderator() { - Outcome::Success(Moderator(user)) - } else { - Outcome::Failure((Status::Unauthorized, ())) - } - }) + async fn from_request(request: &'a Request<'r>) -> request::Outcome { + let user = try_outcome!(User::from_request(request).await); + if user.is_moderator() { + Outcome::Success(Moderator(user)) + } else { + Outcome::Failure((Status::Unauthorized, ())) + } } } diff --git a/plume-models/src/api_tokens.rs b/plume-models/src/api_tokens.rs index 84aefbf8..1a7002e3 100644 --- a/plume-models/src/api_tokens.rs +++ b/plume-models/src/api_tokens.rs @@ -3,7 +3,7 @@ use chrono::NaiveDateTime; use diesel::{self, ExpressionMethods, QueryDsl, RunQueryDsl}; use rocket::{ http::Status, - request::{self, FromRequestAsync, Request}, + request::{self, FromRequest, Request}, Outcome, }; @@ -76,39 +76,38 @@ pub enum TokenError { DbError, } -impl<'a, 'r> FromRequestAsync<'a, 'r> for ApiToken { +#[rocket::async_trait] +impl<'a, 'r> FromRequest<'a, 'r> for ApiToken { type Error = TokenError; - fn from_request(request: &'a Request<'r>) -> request::FromRequestFuture<'a, Self, Self::Error> { - Box::pin(async move { - let headers: Vec<_> = request.headers().get("Authorization").collect(); - if headers.len() != 1 { - return Outcome::Failure((Status::BadRequest, TokenError::NoHeader)); - } + async fn from_request(request: &'a Request<'r>) -> request::Outcome { + let headers: Vec<_> = request.headers().get("Authorization").collect(); + if headers.len() != 1 { + return Outcome::Failure((Status::BadRequest, TokenError::NoHeader)); + } - let mut parsed_header = headers[0].split(' '); - if let Some(auth_type) = parsed_header.next() { - if let Some(val) = parsed_header.next() { - if auth_type == "Bearer" { - if let Outcome::Success(conn) = DbConn::from_request(request).await { - if let Ok(token) = ApiToken::find_by_value(&*conn, val) { - return Outcome::Success(token); - } - } else { - return Outcome::Failure(( - Status::InternalServerError, - TokenError::DbError, - )); + let mut parsed_header = headers[0].split(' '); + if let Some(auth_type) = parsed_header.next() { + if let Some(val) = parsed_header.next() { + if auth_type == "Bearer" { + if let Outcome::Success(conn) = DbConn::from_request(request).await { + if let Ok(token) = ApiToken::find_by_value(&*conn, val) { + return Outcome::Success(token); } + } else { + return Outcome::Failure(( + Status::InternalServerError, + TokenError::DbError, + )); } - } else { - return Outcome::Failure((Status::BadRequest, TokenError::NoValue)); } } else { - return Outcome::Failure((Status::BadRequest, TokenError::NoType)); + return Outcome::Failure((Status::BadRequest, TokenError::NoValue)); } + } else { + return Outcome::Failure((Status::BadRequest, TokenError::NoType)); + } - Outcome::Forward(()) - }) + Outcome::Forward(()) } } diff --git a/plume-models/src/db_conn.rs b/plume-models/src/db_conn.rs index a44f5ecb..2eceda88 100644 --- a/plume-models/src/db_conn.rs +++ b/plume-models/src/db_conn.rs @@ -6,7 +6,7 @@ use diesel::r2d2::{ use diesel::{dsl::sql_query, ConnectionError, RunQueryDsl}; use rocket::{ http::Status, - request::{self, FromRequestAsync}, + request::{self, FromRequest}, Outcome, Request, }; use std::ops::Deref; @@ -21,16 +21,15 @@ pub struct DbConn(pub PooledConnection>); /// Attempts to retrieve a single connection from the managed database pool. If /// no pool is currently managed, fails with an `InternalServerError` status. If /// no connections are available, fails with a `ServiceUnavailable` status. -impl<'a, 'r> FromRequestAsync<'a, 'r> for DbConn { +#[rocket::async_trait] +impl<'a, 'r> FromRequest<'a, 'r> for DbConn { type Error = (); - fn from_request(request: &'a Request<'r>) -> request::FromRequestFuture<'a, Self, Self::Error> { - Box::pin(async move { - match DbConn::from_request(request).await { - Outcome::Success(a) => return Outcome::Success(a), - _ => return Outcome::Failure((Status::ServiceUnavailable, ())), - }; - }) + async fn from_request(request: &'a Request<'r>) -> request::Outcome { + match DbConn::from_request(request).await { + Outcome::Success(a) => return Outcome::Success(a), + _ => return Outcome::Failure((Status::ServiceUnavailable, ())), + }; } } diff --git a/plume-models/src/headers.rs b/plume-models/src/headers.rs index 0d5d2923..7f43ddd6 100644 --- a/plume-models/src/headers.rs +++ b/plume-models/src/headers.rs @@ -6,10 +6,11 @@ use rocket::{ pub struct Headers<'r>(pub HeaderMap<'r>); +#[rocket::async_trait] impl<'a, 'r> FromRequest<'a, 'r> for Headers<'r> { type Error = (); - fn from_request(request: &'a Request<'r>) -> request::Outcome { + async fn from_request(request: &'a Request<'r>) -> request::Outcome { let mut headers = HeaderMap::new(); for header in request.headers().clone().into_iter() { headers.add(header); diff --git a/plume-models/src/plume_rocket.rs b/plume-models/src/plume_rocket.rs index 5be466e7..749897bc 100644 --- a/plume-models/src/plume_rocket.rs +++ b/plume-models/src/plume_rocket.rs @@ -4,7 +4,7 @@ pub use self::module::PlumeRocket; mod module { use crate::{db_conn::DbConn, search, users}; use rocket::{ - request::{self, FlashMessage, FromRequestAsync, Request}, + request::{self, FlashMessage, FromRequest, Request}, Outcome, State, }; use scheduled_thread_pool::ScheduledThreadPool; @@ -20,29 +20,38 @@ mod module { pub flash_msg: Option<(String, String)>, } - impl<'a, 'r> FromRequestAsync<'a, 'r> for PlumeRocket { + #[rocket::async_trait] + impl<'a, 'r> FromRequest<'a, 'r> for PlumeRocket { type Error = (); - fn from_request( - request: &'a Request<'r>, - ) -> request::FromRequestFuture<'a, Self, Self::Error> { - Box::pin(async move { - let conn = try_outcome!(DbConn::from_request(request).await); - let intl = try_outcome!(rocket_i18n::I18n::from_request(request).await); - let user = try_outcome!(users::User::from_request(request).await); - let worker = - try_outcome!(request.guard::<'_, State<'_, Arc>>()); - let searcher = - try_outcome!(request.guard::<'_, State<'_, Arc>>()); - let flash_msg = request.guard::>().succeeded(); - Outcome::Success(PlumeRocket { - conn, - intl, - user: Some(user), - flash_msg: flash_msg.map(|f| (f.name().into(), f.msg().into())), - worker: worker.clone(), - searcher: searcher.clone(), - }) + async fn from_request(request: &'a Request<'r>) -> request::Outcome { + let conn = DbConn::from_request(request).await.succeeded().unwrap(); + let intl = rocket_i18n::I18n::from_request(request) + .await + .succeeded() + .unwrap(); + let user = users::User::from_request(request) + .await + .succeeded() + .unwrap(); + let worker = request + .guard::>>() + .await + .succeeded() + .unwrap(); + let searcher = request + .guard::>>() + .await + .succeeded() + .unwrap(); + let flash_msg = request.guard::>().await.succeeded(); + Outcome::Success(PlumeRocket { + conn, + intl, + user: Some(user), + flash_msg: flash_msg.map(|f| (f.name().into(), f.msg().into())), + worker: worker.clone(), + searcher: searcher.clone(), }) } } @@ -52,7 +61,7 @@ mod module { mod module { use crate::{db_conn::DbConn, search, users}; use rocket::{ - request::{self, FromRequestAsync, Request}, + request::{self, FromRequest, Request}, Outcome, State, }; use scheduled_thread_pool::ScheduledThreadPool; @@ -66,25 +75,20 @@ mod module { pub worker: Arc, } - impl<'a, 'r> FromRequestAsync<'a, 'r> for PlumeRocket { + #[rocket::async_trait] + impl<'a, 'r> FromRequest<'a, 'r> for PlumeRocket { type Error = (); - fn from_request( - request: &'a Request<'r>, - ) -> request::FromRequestFuture<'a, Self, Self::Error> { - Box::pin(async move { - let conn = try_outcome!(DbConn::from_request(request).await); - let user = try_outcome!(users::User::from_request(request).await); - let worker = - try_outcome!(request.guard::<'_, State<'_, Arc>>()); - let searcher = - try_outcome!(request.guard::<'_, State<'_, Arc>>()); - Outcome::Success(PlumeRocket { - conn, - user: Some(user), - worker: worker.clone(), - searcher: searcher.clone(), - }) + async fn from_request(request: &'a Request<'r>) -> request::Outcome { + let conn = try_outcome!(DbConn::from_request(request).await); + let user = try_outcome!(users::User::from_request(request).await); + let worker = try_outcome!(request.guard::<'_, State<'_, Arc>>()); + let searcher = try_outcome!(request.guard::<'_, State<'_, Arc>>()); + Outcome::Success(PlumeRocket { + conn, + user: Some(user), + worker: worker.clone(), + searcher: searcher.clone(), }) } } diff --git a/plume-models/src/users.rs b/plume-models/src/users.rs index 2a68b712..6f67a809 100644 --- a/plume-models/src/users.rs +++ b/plume-models/src/users.rs @@ -35,7 +35,7 @@ use reqwest::{ }; use rocket::{ outcome::IntoOutcome, - request::{self, FromRequestAsync, Request}, + request::{self, FromRequest, Request}, }; use serde_json; use std::{ @@ -796,19 +796,18 @@ impl User { } } -impl<'a, 'r> FromRequestAsync<'a, 'r> for User { +#[rocket::async_trait] +impl<'a, 'r> FromRequest<'a, 'r> for User { type Error = (); - fn from_request(request: &'a Request<'r>) -> request::FromRequestFuture<'a, Self, Self::Error> { - Box::pin(async move { - let conn = try_outcome!(DbConn::from_request(request).await); - request - .cookies() - .get_private(AUTH_COOKIE) - .and_then(|cookie| cookie.value().parse().ok()) - .and_then(|id| User::get(&*conn, id).ok()) - .or_forward(()) - }) + async fn from_request(request: &'a Request<'r>) -> request::Outcome { + let conn = try_outcome!(DbConn::from_request(request).await); + request + .cookies() + .get_private(AUTH_COOKIE) + .and_then(|cookie| cookie.value().parse().ok()) + .and_then(|id| User::get(&*conn, id).ok()) + .or_forward(()) } } diff --git a/rust-toolchain b/rust-toolchain index b54a6029..2cc138d9 100644 --- a/rust-toolchain +++ b/rust-toolchain @@ -1 +1 @@ -nightly-2020-01-15 +nightly-2020-05-05 diff --git a/src/api/authorization.rs b/src/api/authorization.rs index 8a23ada5..3f610993 100644 --- a/src/api/authorization.rs +++ b/src/api/authorization.rs @@ -35,6 +35,7 @@ impl Scope for plume_models::posts::Post { pub struct Authorization(pub ApiToken, PhantomData<(A, S)>); +#[rocket::async_trait] impl<'a, 'r, A, S> FromRequest<'a, 'r> for Authorization where A: Action, @@ -42,9 +43,10 @@ where { type Error = (); - fn from_request(request: &'a Request<'r>) -> request::Outcome, ()> { + async fn from_request(request: &'a Request<'r>) -> request::Outcome, ()> { request .guard::() + .await .map_failure(|_| (Status::Unauthorized, ())) .and_then(|token| { if token.can(A::to_str(), S::to_str()) { diff --git a/src/api/mod.rs b/src/api/mod.rs index 2a53b19a..6e622e22 100644 --- a/src/api/mod.rs +++ b/src/api/mod.rs @@ -2,6 +2,7 @@ use rocket::{ request::{Form, Request}, response::{self, Responder}, + Outcome, }; use rocket_contrib::json::Json; use serde_json; @@ -26,21 +27,31 @@ impl From for ApiError { } } +#[rocket::async_trait] impl<'r> Responder<'r> for ApiError { - fn respond_to(self, req: &'r Request) -> response::ResultFuture<'r> { + async fn respond_to(self, req: &'r Request<'_>) -> response::Result<'r> { match self.0 { - Error::NotFound => Json(json!({ - "error": "Not found" - })) - .respond_to(req), - Error::Unauthorized => Json(json!({ - "error": "You are not authorized to access this resource" - })) - .respond_to(req), - _ => Json(json!({ - "error": "Server error" - })) - .respond_to(req), + Error::NotFound => { + Json(json!({ + "error": "Not found" + })) + .respond_to(req) + .await + } + Error::Unauthorized => { + Json(json!({ + "error": "You are not authorized to access this resource" + })) + .respond_to(req) + .await + } + _ => { + Json(json!({ + "error": "Server error" + })) + .respond_to(req) + .await + } } } } @@ -62,7 +73,7 @@ pub fn oauth( let conn = &*rockets.conn; let app = App::find_by_client_id(conn, &query.client_id)?; if app.client_secret == query.client_secret { - if let Ok(user) = User::find_by_fqn(&rockets, &query.username) { + if let Outcome::Success(user) = User::find_by_fqn(&rockets, &query.username) { if user.auth(&query.password) { let token = ApiToken::insert( conn, diff --git a/src/main.rs b/src/main.rs index 27b1282b..11f18c3e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -6,8 +6,6 @@ extern crate gettext_macros; #[macro_use] extern crate rocket; #[macro_use] -extern crate runtime_fmt; -#[macro_use] extern crate serde_json; #[macro_use] extern crate validator_derive; diff --git a/src/routes/errors.rs b/src/routes/errors.rs index 904d1fd7..02d6883b 100644 --- a/src/routes/errors.rs +++ b/src/routes/errors.rs @@ -1,7 +1,7 @@ use crate::template_utils::{IntoContext, Ructe}; use plume_models::{Error, PlumeRocket}; use rocket::{ - request::FromRequestAsync, + request::FromRequest, response::{self, Responder}, Request, }; @@ -15,29 +15,28 @@ impl From for ErrorPage { } } +#[rocket::async_trait] impl<'r> Responder<'r> for ErrorPage { - fn respond_to(self, req: &'r Request<'_>) -> response::ResultFuture<'r> { - Box::pin(async move { - let rockets = PlumeRocket::from_request(req).await.unwrap(); + async fn respond_to(self, req: &'r Request<'_>) -> response::Result<'r> { + let rockets = PlumeRocket::from_request(req).await.unwrap(); - match self.0 { - Error::NotFound => { - render!(errors::not_found(&rockets.to_context())) - .respond_to(req) - .await - } - Error::Unauthorized => { - render!(errors::not_found(&rockets.to_context())) - .respond_to(req) - .await - } - _ => { - render!(errors::not_found(&rockets.to_context())) - .respond_to(req) - .await - } + match self.0 { + Error::NotFound => { + render!(errors::not_found(&rockets.to_context())) + .respond_to(req) + .await } - }) + Error::Unauthorized => { + render!(errors::not_found(&rockets.to_context())) + .respond_to(req) + .await + } + _ => { + render!(errors::not_found(&rockets.to_context())) + .respond_to(req) + .await + } + } } } diff --git a/src/routes/mod.rs b/src/routes/mod.rs index 27c8d2b2..a142a2ae 100755 --- a/src/routes/mod.rs +++ b/src/routes/mod.rs @@ -94,10 +94,11 @@ impl Page { #[derive(Shrinkwrap)] pub struct ContentLen(pub u64); +#[rocket::async_trait] impl<'a, 'r> FromRequest<'a, 'r> for ContentLen { type Error = (); - fn from_request(r: &'a Request<'r>) -> request::Outcome { + async fn from_request(r: &'a Request<'r>) -> request::Outcome { match r.limits().get("forms") { Some(l) => Outcome::Success(ContentLen(l)), None => Outcome::Failure((Status::InternalServerError, ())), @@ -213,32 +214,29 @@ pub struct CachedFile { #[derive(Debug)] pub struct ThemeFile(NamedFile); +#[rocket::async_trait] impl<'r> Responder<'r> for ThemeFile { - fn respond_to(self, r: &'r Request<'_>) -> response::ResultFuture<'r> { - Box::pin(async move { - let contents = std::fs::read(self.0.path()).map_err(|_| Status::InternalServerError)?; + async fn respond_to(self, r: &'r Request<'_>) -> response::Result<'r> { + let contents = std::fs::read(self.0.path()).map_err(|_| Status::InternalServerError)?; - let mut hasher = DefaultHasher::new(); - hasher.write(&contents); - let etag = format!("{:x}", hasher.finish()); + let mut hasher = DefaultHasher::new(); + hasher.write(&contents); + let etag = format!("{:x}", hasher.finish()); - if r.headers() - .get("If-None-Match") - .any(|s| s[1..s.len() - 1] == etag) - { - Response::build() - .status(Status::NotModified) - .header(Header::new("ETag", etag)) - .ok() - .await - } else { - Response::build() - .merge(self.0.respond_to(r).await.ok().unwrap()) - .header(Header::new("ETag", etag)) - .ok() - .await - } - }) + if r.headers() + .get("If-None-Match") + .any(|s| s[1..s.len() - 1] == etag) + { + Response::build() + .status(Status::NotModified) + .header(Header::new("ETag", etag)) + .ok() + } else { + Response::build() + .merge(self.0.respond_to(r).await.ok().unwrap()) + .header(Header::new("ETag", etag)) + .ok() + } } } diff --git a/src/routes/posts.rs b/src/routes/posts.rs index 9b295b2f..134fb827 100644 --- a/src/routes/posts.rs +++ b/src/routes/posts.rs @@ -643,7 +643,7 @@ pub fn remote_interact_post( .and_then(|blog| Post::find_by_slug(&rockets.conn, &slug, blog.id))?; if let Some(uri) = User::fetch_remote_interact_uri(&remote.remote) .ok() - .and_then(|uri| rt_format!(uri, uri = target.ap_url).ok()) + .and_then(|uri| uri.replace("{uri}", format!("{}", target.ap_url)).ok()) { Ok(Redirect::to(uri).into()) } else { diff --git a/src/routes/user.rs b/src/routes/user.rs index e0bfd783..e024d7e4 100644 --- a/src/routes/user.rs +++ b/src/routes/user.rs @@ -201,15 +201,14 @@ pub fn follow_not_connected( if let Some(uri) = User::fetch_remote_interact_uri(&remote_form) .ok() .and_then(|uri| { - rt_format!( - uri, - uri = format!( + uri.replace( + "{uri}", + format!( "{}@{}", target.fqn, target.get_instance(&rockets.conn).ok()?.public_domain - ) + ), ) - .ok() }) { Ok(Redirect::to(uri).into()) diff --git a/src/routes/well_known.rs b/src/routes/well_known.rs index 723ec1e0..80aa0916 100644 --- a/src/routes/well_known.rs +++ b/src/routes/well_known.rs @@ -44,21 +44,47 @@ pub fn host_meta() -> String { struct WebfingerResolver; impl Resolver for WebfingerResolver { - fn instance_domain<'a>() -> &'a str { + fn instance_domain<'a>(&self) -> &'a str { CONFIG.base_url.as_str() } - fn find(prefix: Prefix, acct: String, ctx: PlumeRocket) -> Result { + fn find( + &self, + prefix: Prefix, + acct: String, + ctx: PlumeRocket, + ) -> Result { match prefix { Prefix::Acct => User::find_by_fqn(&ctx, &acct) + .await .and_then(|usr| usr.webfinger(&*ctx.conn)) .or(Err(ResolverError::NotFound)), Prefix::Group => Blog::find_by_fqn(&ctx, &acct) + .await .and_then(|blog| blog.webfinger(&*ctx.conn)) .or(Err(ResolverError::NotFound)), Prefix::Custom(_) => Err(ResolverError::NotFound), } } + fn endpoint( + &self, + resource: impl Into, + resource_repo: PlumeRocket, + ) -> Result { + let resource = resource.into(); + let mut parsed_query = resource.splitn(2, ':'); + let res_prefix = Prefix::from(parsed_query.next().ok_or(ResolverError::InvalidResource)?); + let res = parsed_query.next().ok_or(ResolverError::InvalidResource)?; + + let mut parsed_res = res.splitn(2, '@'); + let user = parsed_res.next().ok_or(ResolverError::InvalidResource)?; + let domain = parsed_res.next().ok_or(ResolverError::InvalidResource)?; + if domain == webfinger.instance_domain() { + webfinger.find(res_prefix, user.to_string(), resource_repo) + } else { + Err(ResolverError::WrongDomain) + } + } } #[get("/.well-known/webfinger?")] diff --git a/src/template_utils.rs b/src/template_utils.rs index 157f2fd4..8d630588 100644 --- a/src/template_utils.rs +++ b/src/template_utils.rs @@ -51,33 +51,30 @@ impl IntoContext for PlumeRocket { #[derive(Debug)] pub struct Ructe(pub Vec); +#[rocket::async_trait] impl<'r> Responder<'r> for Ructe { - fn respond_to(self, r: &'r Request) -> response::ResultFuture<'r> { - Box::pin(async move { - //if method is not Get or page contain a form, no caching - if r.method() != Method::Get || self.0.windows(6).any(|w| w == b") -> response::Result<'r> { + //if method is not Get or page contain a form, no caching + if r.method() != Method::Get || self.0.windows(6).any(|w| w == b" Date: Sat, 16 May 2020 12:06:58 +0200 Subject: [PATCH 30/46] fix some, break some compiling by adding async/await in front of it i forgot that we can't `Send` diesel connections over threads, so this is going to require some rethinking. --- plume-models/src/blogs.rs | 3 ++- src/api/mod.rs | 4 ++-- src/api/posts.rs | 4 ++-- src/routes/blogs.rs | 31 ++++++++++++++++++------------- src/routes/posts.rs | 26 +++++++++++++++----------- 5 files changed, 39 insertions(+), 29 deletions(-) diff --git a/plume-models/src/blogs.rs b/plume-models/src/blogs.rs index e4f15268..81c3d8fa 100644 --- a/plume-models/src/blogs.rs +++ b/plume-models/src/blogs.rs @@ -71,7 +71,8 @@ impl Blog { insert!(blogs, NewBlog, |inserted, conn| { let instance = inserted.get_instance(conn)?; if inserted.outbox_url.is_empty() { - inserted.outbox_url = instance.compute_box(BLOG_PREFIX, &inserted.actor_id, "outbox"); + inserted.outbox_url = + instance.compute_box(BLOG_PREFIX, &inserted.actor_id, r#"outbox"#); } if inserted.inbox_url.is_empty() { diff --git a/src/api/mod.rs b/src/api/mod.rs index 6e622e22..f13f5615 100644 --- a/src/api/mod.rs +++ b/src/api/mod.rs @@ -66,14 +66,14 @@ pub struct OAuthRequest { } #[get("/oauth2?")] -pub fn oauth( +pub async fn oauth( query: Form, rockets: PlumeRocket, ) -> Result, ApiError> { let conn = &*rockets.conn; let app = App::find_by_client_id(conn, &query.client_id)?; if app.client_secret == query.client_secret { - if let Outcome::Success(user) = User::find_by_fqn(&rockets, &query.username) { + if let Ok(user) = User::find_by_fqn(&rockets, &query.username).await { if user.auth(&query.password) { let token = ApiToken::insert( conn, diff --git a/src/api/posts.rs b/src/api/posts.rs index a290e31a..208847dd 100644 --- a/src/api/posts.rs +++ b/src/api/posts.rs @@ -98,7 +98,7 @@ pub fn list( } #[post("/posts", data = "")] -pub fn create( +pub async fn create( auth: Authorization, payload: Json, rockets: PlumeRocket, @@ -192,7 +192,7 @@ pub fn create( for m in mentions.into_iter() { Mention::from_activity( &*conn, - &Mention::build_activity(&rockets, &m)?, + &Mention::build_activity(&rockets, &m).await?, post.id, true, true, diff --git a/src/routes/blogs.rs b/src/routes/blogs.rs index 0c08c536..0fb3d3bb 100644 --- a/src/routes/blogs.rs +++ b/src/routes/blogs.rs @@ -38,12 +38,12 @@ pub fn details(name: String, page: Option, rockets: PlumeRocket) -> Result } #[get("/~/", rank = 1)] -pub fn activity_details( +pub async fn activity_details( name: String, rockets: PlumeRocket, _ap: ApRequest, ) -> Option> { - let blog = Blog::find_by_fqn(&rockets, &name).ok()?; + let blog = Blog::find_by_fqn(&rockets, &name).await?.ok()?; Some(ActivityStream::new(blog.to_activity(&*rockets.conn).ok()?)) } @@ -93,7 +93,7 @@ pub fn create(form: LenientForm, rockets: PlumeRocket) -> RespondOr Ok(_) => ValidationErrors::new(), Err(e) => e, }; - if Blog::find_by_fqn(&rockets, &slug).is_ok() { + if Blog::find_by_fqn(&rockets, &slug).await.is_ok() { errors.add( "title", ValidationError { @@ -184,9 +184,9 @@ pub struct EditForm { } #[get("/~//edit")] -pub fn edit(name: String, rockets: PlumeRocket) -> Result { +pub async fn edit(name: String, rockets: PlumeRocket) -> Result { let conn = &*rockets.conn; - let blog = Blog::find_by_fqn(&rockets, &name)?; + let blog = Blog::find_by_fqn(&rockets, &name).await?; if rockets .user .clone() @@ -233,14 +233,16 @@ fn check_media(conn: &Connection, id: i32, user: &User) -> bool { } #[put("/~//edit", data = "")] -pub fn update( +pub async fn update( name: String, form: LenientForm, rockets: PlumeRocket, ) -> RespondOrRedirect { let conn = &*rockets.conn; let intl = &rockets.intl.catalog; - let mut blog = Blog::find_by_fqn(&rockets, &name).expect("blog::update: blog not found"); + let mut blog = Blog::find_by_fqn(&rockets, &name) + .await + .expect("blog::update: blog not found"); if !rockets .user .clone() @@ -342,23 +344,26 @@ pub fn update( } #[get("/~//outbox")] -pub fn outbox(name: String, rockets: PlumeRocket) -> Option> { - let blog = Blog::find_by_fqn(&rockets, &name).ok()?; +pub async fn outbox( + name: String, + rockets: PlumeRocket, +) -> Option> { + let blog = Blog::find_by_fqn(&rockets, &name).await?.ok()?; Some(blog.outbox(&*rockets.conn).ok()?) } #[allow(unused_variables)] #[get("/~//outbox?")] -pub fn outbox_page( +pub async fn outbox_page( name: String, page: Page, rockets: PlumeRocket, ) -> Option> { - let blog = Blog::find_by_fqn(&rockets, &name).ok()?; + let blog = Blog::find_by_fqn(&rockets, &name).await?.ok()?; Some(blog.outbox_page(&*rockets.conn, page.limits()).ok()?) } #[get("/~//atom.xml")] -pub fn atom_feed(name: String, rockets: PlumeRocket) -> Option> { - let blog = Blog::find_by_fqn(&rockets, &name).ok()?; +pub async fn atom_feed(name: String, rockets: PlumeRocket) -> Option> { + let blog = Blog::find_by_fqn(&rockets, &name).await?.ok()?; let conn = &*rockets.conn; let entries = Post::get_recents_for_blog(&*conn, &blog, 15).ok()?; let uri = Instance::get_local() diff --git a/src/routes/posts.rs b/src/routes/posts.rs index 134fb827..84658d40 100644 --- a/src/routes/posts.rs +++ b/src/routes/posts.rs @@ -162,7 +162,7 @@ pub fn new(blog: String, cl: ContentLen, rockets: PlumeRocket) -> Result//edit")] -pub fn edit( +pub async fn edit( blog: String, slug: String, cl: ContentLen, @@ -170,7 +170,7 @@ pub fn edit( ) -> Result { let conn = &*rockets.conn; let intl = &rockets.intl.catalog; - let b = Blog::find_by_fqn(&rockets, &blog)?; + let b = Blog::find_by_fqn(&rockets, &blog).await?; let post = Post::find_by_slug(&*conn, &slug, b.id)?; let user = rockets.user.clone().unwrap(); @@ -216,7 +216,7 @@ pub fn edit( } #[post("/~///edit", data = "")] -pub fn update( +pub async fn update( blog: String, slug: String, cl: ContentLen, @@ -224,7 +224,9 @@ pub fn update( rockets: PlumeRocket, ) -> RespondOrRedirect { let conn = &*rockets.conn; - let b = Blog::find_by_fqn(&rockets, &blog).expect("post::update: blog error"); + let b = Blog::find_by_fqn(&rockets, &blog) + .await + .expect("post::update: blog error"); let mut post = Post::find_by_slug(&*conn, &slug, b.id).expect("post::update: find by slug error"); let user = rockets.user.clone().unwrap(); @@ -302,11 +304,11 @@ pub fn update( if post.published { post.update_mentions( - &conn, mentions .into_iter() - .filter_map(|m| Mention::build_activity(&rockets, &m).ok()) + .filter_map(|m| Mention::build_activity(&rockets, &m).await.ok()) .collect(), + &conn, ) .expect("post::update: mentions error"); } @@ -321,7 +323,7 @@ pub fn update( .filter_map(|t| Tag::build_activity(t).ok()) .collect::>(); post.update_tags(&conn, tags) - .expect("post::update: tags error"); + .expect(r#"post::update: tags error"#); let hashtags = hashtags .into_iter() @@ -615,12 +617,13 @@ pub fn delete( } #[get("/~///remote_interact")] -pub fn remote_interact( +pub async fn remote_interact( rockets: PlumeRocket, blog_name: String, slug: String, ) -> Result { let target = Blog::find_by_fqn(&rockets, &blog_name) + .await .and_then(|blog| Post::find_by_slug(&rockets.conn, &slug, blog.id))?; Ok(render!(posts::remote_interact( &rockets.to_context(), @@ -633,17 +636,18 @@ pub fn remote_interact( } #[post("/~///remote_interact", data = "")] -pub fn remote_interact_post( +pub async fn remote_interact_post( rockets: PlumeRocket, blog_name: String, slug: String, remote: LenientForm, ) -> Result { let target = Blog::find_by_fqn(&rockets, &blog_name) + .await .and_then(|blog| Post::find_by_slug(&rockets.conn, &slug, blog.id))?; if let Some(uri) = User::fetch_remote_interact_uri(&remote.remote) - .ok() - .and_then(|uri| uri.replace("{uri}", format!("{}", target.ap_url)).ok()) + .await + .map(|uri| uri.replace("{uri}", format!("{}", target.ap_url)).ok()) { Ok(Redirect::to(uri).into()) } else { -- 2.38.5 From 850b3c13377a88db2742488cbc7ae5142a3d267d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mina=20Gali=C4=87?= Date: Fri, 22 May 2020 21:41:33 +0200 Subject: [PATCH 31/46] add async/.await until all our errors are the same: that our Connection is not Send-safe. once we get there, we can start thinking about restructing the way we pass along our connection, or consider using #[database]. --- Cargo.toml | 3 +- src/routes/comments.rs | 8 +++- src/routes/user.rs | 96 +++++++++++++++++++++++------------------- 3 files changed, 61 insertions(+), 46 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 894d9672..fac4e204 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,6 +8,7 @@ edition = "2018" [dependencies] activitypub = "0.1.3" askama_escape = "0.1" +async-trait = "*" atom_syndication = "0.6" clap = "2.33" colored = "1.8" @@ -32,7 +33,7 @@ syntect = "3.3" tokio = "0.2" validator = "0.8" validator_derive = "0.8" -webfinger = { git = "https://github.com/Plume-org/webfinger", rev = "update-deps" } +webfinger = { git = "https://github.com/Plume-org/webfinger", rev = "4e8f12810c4a7ba7a07bbcb722cd265fdff512b6", features = ["async"] } [[bin]] name = "plume" diff --git a/src/routes/comments.rs b/src/routes/comments.rs index eaf27751..99ef6e57 100644 --- a/src/routes/comments.rs +++ b/src/routes/comments.rs @@ -36,8 +36,12 @@ pub fn create( rockets: PlumeRocket, ) -> Result, Ructe> { let conn = &*rockets.conn; - let blog = Blog::find_by_fqn(&rockets, &blog_name).expect("comments::create: blog error"); - let post = Post::find_by_slug(&*conn, &slug, blog.id).expect("comments::create: post error"); + let blog = Blog::find_by_fqn(&rockets, &blog_name) + .await + .expect("comments::create: blog error"); + let post = Post::find_by_slug(&*conn, &slug, blog.id) + .await + .expect("comments::create: post error"); form.validate() .map(|_| { let (html, mentions, _hashtags) = utils::md_to_html( diff --git a/src/routes/user.rs b/src/routes/user.rs index e024d7e4..2a43289e 100644 --- a/src/routes/user.rs +++ b/src/routes/user.rs @@ -42,7 +42,7 @@ pub fn me(user: Option) -> RespondOrRedirect { } #[get("/@/", rank = 2)] -pub fn details( +pub async fn details( name: String, rockets: PlumeRocket, fetch_rockets: PlumeRocket, @@ -61,6 +61,7 @@ pub fn details( worker.execute(move || { for create_act in user_clone .fetch_outbox::() + .await .expect("Remote user: outbox couldn't be fetched") { match create_act.create_props.object_object::() { @@ -79,6 +80,7 @@ pub fn details( worker.execute(move || { for user_id in user_clone .fetch_followers_ids() + .await .expect("Remote user: fetching followers error") { let follower = User::from_id(&fetch_followers_rockets, &user_id, None) @@ -101,6 +103,7 @@ pub fn details( worker.execute(move || { user_clone .refetch(&*update_conn) + .await .expect("Couldn't update user info"); }); } @@ -152,7 +155,7 @@ pub fn follow( rockets: PlumeRocket, ) -> Result, ErrorPage> { let conn = &*rockets.conn; - let target = User::find_by_fqn(&rockets, &name)?; + let target = User::find_by_fqn(&rockets, &name).await?; let message = if let Ok(follow) = follows::Follow::find(&*conn, user.id, target.id) { let delete_act = follow.build_undo(&*conn)?; local_inbox( @@ -196,9 +199,10 @@ pub fn follow_not_connected( remote_form: Option>, i18n: I18n, ) -> Result { - let target = User::find_by_fqn(&rockets, &name)?; + let target = User::find_by_fqn(&rockets, &name).await?; if let Some(remote_form) = remote_form { if let Some(uri) = User::fetch_remote_interact_uri(&remote_form) + .await .ok() .and_then(|uri| { uri.replace( @@ -265,15 +269,15 @@ pub fn follow_auth(name: String, i18n: I18n) -> Flash { } #[get("/@//followers?", rank = 2)] -pub fn followers( - name: String, +pub async fn followers( + String, page: Option, rockets: PlumeRocket, ) -> Result { let conn = &*rockets.conn; let page = page.unwrap_or_default(); - let user = User::find_by_fqn(&rockets, &name)?; - let followers_count = user.count_followers(&*conn)?; + let user = User::find_by_fqn(&rockets, &name).await?; + let followers_count = user.count_followers(&*; Ok(render!(users::followers( &rockets.to_context(), @@ -299,7 +303,7 @@ pub fn followed( ) -> Result { let conn = &*rockets.conn; let page = page.unwrap_or_default(); - let user = User::find_by_fqn(&rockets, &name)?; + let user = User::find_by_fqn(&rockets, &name).await?; let followed_count = user.count_followed(conn)?; Ok(render!(users::followed( @@ -319,13 +323,13 @@ pub fn followed( } #[get("/@/", rank = 1)] -pub fn activity_details( +pub async fn activity_details( name: String, rockets: PlumeRocket, _ap: ApRequest, ) -> Option> { - let user = User::find_by_fqn(&rockets, &name).ok()?; - Some(ActivityStream::new(user.to_activity(&*rockets.conn).ok()?)) + let user = User::find_by_fqn(&rockets, &name).await?.ok()?; + Some(ActivityStream::new(user.to_activity(&*roonn).ok()?)) } #[get("/users/new")] @@ -411,39 +415,38 @@ pub fn update( } #[post("/@//delete")] -pub fn delete( +pub async fn delete( name: String, user: User, mut cookies: Cookies<'_>, rockets: PlumeRocket, ) -> Result, ErrorPage> { - let account = User::find_by_fqn(&rockets, &name)?; - if user.id == account.id { - account.delete(&*rockets.conn, &rockets.searcher)?; - - let target = User::one_by_instance(&*rockets.conn)?; - let delete_act = account.delete_activity(&*rockets.conn)?; - rockets - .worker - .execute(move || broadcast(&account, delete_act, target)); - - if let Some(cookie) = cookies.get_private(AUTH_COOKIE) { - cookies.remove_private(cookie); - } - - Ok(Flash::success( - Redirect::to(uri!(super::instance::index)), - i18n!(rockets.intl.catalog, "Your account has been deleted."), - )) - } else { - Ok(Flash::error( + let account = User::find_by_fqn(&rockets, &name).await?; + if user.id != account.id { + return Ok(Flash::error( Redirect::to(uri!(edit: name = name)), i18n!( rockets.intl.catalog, "You can't delete someone else's account." ), - )) + )); } + account.delete(&*rockets.conn, &rockets.searcher)?; + + let target = User::one_by_instance(&*rockets.conn)?; + let delete_act = account.delete_activity(&*rockets.conn)?; + rockets + .worker + .execute(move || broadcast(&account, delete_act, target)); + + if let Some(cookie) = cookies.get_private(AUTH_COOKIE) { + cookies.remove_private(cookie); + } + + Ok(Flash::success( + Redirect::to(uri!(super::instance::index)), + i18n!(rockets.intl.catalog, "Your account has been deleted."), + )) } #[derive(Default, FromForm, Validate)] @@ -564,37 +567,44 @@ pub fn create( } #[get("/@//outbox")] -pub fn outbox(name: String, rockets: PlumeRocket) -> Option> { - let user = User::find_by_fqn(&rockets, &name).ok()?; +pub async fn outbox( + name: String, + rockets: PlumeRocket, +) -> Option> { + let user = User::find_by_fqn(&rockets, &name).await.ok()?; user.outbox(&*rockets.conn).ok() } + #[get("/@//outbox?")] -pub fn outbox_page( +pub async fn outbox_page( name: String, page: Page, rockets: PlumeRocket, ) -> Option> { - let user = User::find_by_fqn(&rockets, &name).ok()?; + let user = User::find_by_fqn(&rockets, &name).await.ok()?; user.outbox_page(&*rockets.conn, page.limits()).ok() } + #[post("/@//inbox", data = "")] -pub fn inbox( +pub async fn inbox( name: String, data: inbox::SignedJson, headers: Headers<'_>, rockets: PlumeRocket, ) -> Result> { - User::find_by_fqn(&rockets, &name).map_err(|_| status::BadRequest(Some("User not found")))?; + User::find_by_fqn(&rockets, &name) + .await + .map_err(|_| status::BadRequest(Some("User not found")))?; inbox::handle_incoming(rockets, data, headers) } #[get("/@//followers", rank = 1)] -pub fn ap_followers( +pub async fn ap_followers( name: String, rockets: PlumeRocket, _ap: ApRequest, ) -> Option> { - let user = User::find_by_fqn(&rockets, &name).ok()?; + let user = User::find_by_fqn(&rockets, &name).await?.ok()?; let followers = user .get_followers(&*rockets.conn) .ok()? @@ -614,9 +624,9 @@ pub fn ap_followers( } #[get("/@//atom.xml")] -pub fn atom_feed(name: String, rockets: PlumeRocket) -> Option> { +pub async fn atom_feed(name: String, rockets: PlumeRocket) -> Option> { let conn = &*rockets.conn; - let author = User::find_by_fqn(&rockets, &name).ok()?; + let author = User::find_by_fqn(&rockets, &name).await?.ok()?; let entries = Post::get_recents_for_author(conn, &author, 15).ok()?; let uri = Instance::get_local() .ok()? -- 2.38.5 From d2881ee3f744083ab73a96b1a594714640b0a0c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mina=20Gali=C4=87?= Date: Sat, 23 May 2020 23:32:10 +0200 Subject: [PATCH 32/46] add async/.await until all our errors are the same: that our Connection is not Send-safe. --- Cargo.lock | 334 +++++++++++++++++++++------------------ plume-models/src/lib.rs | 6 + src/api/mod.rs | 1 + src/inbox.rs | 3 +- src/routes/blogs.rs | 26 +-- src/routes/comments.rs | 17 +- src/routes/errors.rs | 12 +- src/routes/posts.rs | 7 +- src/routes/reshares.rs | 4 +- src/routes/session.rs | 8 +- src/routes/user.rs | 30 ++-- src/routes/well_known.rs | 20 ++- 12 files changed, 264 insertions(+), 204 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 742772d8..777f02f5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -31,9 +31,9 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "65608fdeae5eb05485d5b71a3d2242d76b2b7413608c196d47eb4dff3eed7b85" dependencies = [ - "proc-macro2 1.0.12", - "quote 1.0.4", - "syn 1.0.19", + "proc-macro2 1.0.15", + "quote 1.0.6", + "syn 1.0.23", ] [[package]] @@ -62,6 +62,15 @@ dependencies = [ "serde_json", ] +[[package]] +name = "addr2line" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a49806b9dadc843c61e7c97e72490ad7f7220ae249012fbda9ad0609457c0543" +dependencies = [ + "gimli", +] + [[package]] name = "adler32" version = "1.0.4" @@ -70,9 +79,9 @@ checksum = "5d2e7343e7fc9de883d1b0341e0b13970f764c14101234857d2ddafa1cb1cac2" [[package]] name = "ahash" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c251dce3391a07b43218ca070203ecb8f9f520d35ab71312296a59dbceab154" +checksum = "2f3e0bf23f51883cce372d5d5892211236856e4bb37fb942e1eb135ee0f146e3" [[package]] name = "aho-corasick" @@ -147,13 +156,13 @@ checksum = "719b48039ffac1564f67d70162109ba9341125cee0096a540e478355b3c724a7" [[package]] name = "async-trait" -version = "0.1.30" +version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da71fef07bc806586090247e971229289f64c210a278ee5ae419314eb386b31d" +checksum = "26c4f3195085c36ea8d24d32b2f828d23296a9370a28aa39d111f6f16bef9f3b" dependencies = [ - "proc-macro2 1.0.12", - "quote 1.0.4", - "syn 1.0.19", + "proc-macro2 1.0.15", + "quote 1.0.6", + "syn 1.0.23", ] [[package]] @@ -218,13 +227,14 @@ dependencies = [ [[package]] name = "backtrace" -version = "0.3.46" +version = "0.3.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1e692897359247cc6bb902933361652380af0f1b7651ae5c5013407f30e109e" +checksum = "0df2f85c8a2abbe3b7d7e748052fdd9b76a0458fdeb16ad4223f5eca78c7c130" dependencies = [ - "backtrace-sys", + "addr2line", "cfg-if", "libc", + "object", "rustc-demangle", ] @@ -300,9 +310,9 @@ dependencies = [ [[package]] name = "bindgen" -version = "0.50.1" +version = "0.53.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb0e5a5f74b2bafe0b39379f616b5975e08bcaca4e779c078d5c31324147e9ba" +checksum = "c72a978d268b1d70b0e963217e60fdabd9523a941457a6c42a7315d15c7e89e5" dependencies = [ "bitflags 1.2.1", "cexpr", @@ -310,13 +320,14 @@ dependencies = [ "clang-sys", "clap", "env_logger", - "fxhash", "lazy_static", + "lazycell", "log 0.4.8", "peeking_take_while", - "proc-macro2 0.4.30", - "quote 0.6.13", + "proc-macro2 1.0.15", + "quote 1.0.6", "regex", + "rustc-hash", "shlex", "which", ] @@ -395,9 +406,9 @@ checksum = "40e38929add23cdf8a366df9b0e088953150724bcbe5fc330b0d8eb3b328eec8" [[package]] name = "bumpalo" -version = "3.2.1" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12ae9db68ad7fac5fe51304d20f016c911539251075a214f8e663babefa35187" +checksum = "5356f1d23ee24a1f785a56d1d1a5f0fd5b0f6a0c0fb2412ce11da71649ab78f6" [[package]] name = "bytecount" @@ -425,9 +436,9 @@ checksum = "130aac562c0dd69c56b3b1cc8ffd2e17be31d0b6c25b61c96b76231aa23e39e1" [[package]] name = "cc" -version = "1.0.52" +version = "1.0.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d87b23d6a92cd03af510a5ade527033f6aa6fa92161e2d5863a907d4c5e31d" +checksum = "7bbb73db36c1246e9034e307d0fba23f9a2e251faa47ade70c1bd252220c8311" [[package]] name = "census" @@ -437,11 +448,11 @@ checksum = "641317709904ba3c1ad137cb5d88ec9d8c03c07de087b2cff5e84ec565c7e299" [[package]] name = "cexpr" -version = "0.3.6" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fce5b5fb86b0c57c20c834c1b412fd09c77c8a59b9473f86272709e78874cd1d" +checksum = "f4aedb84272dbe89af497cf81375129abda4fc0a9e7c5d317498c15cc30c0d27" dependencies = [ - "nom 4.2.3", + "nom 5.1.1", ] [[package]] @@ -476,9 +487,9 @@ dependencies = [ [[package]] name = "clang-sys" -version = "0.28.1" +version = "0.29.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81de550971c976f176130da4b2978d3b524eaa0fd9ac31f3ceb5ae1231fb4853" +checksum = "fe6837df1d5cba2397b835c8530f51723267e16abbf83892e9e5af4f0e5dd10a" dependencies = [ "glob", "libc", @@ -487,9 +498,9 @@ dependencies = [ [[package]] name = "clap" -version = "2.33.0" +version = "2.33.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9" +checksum = "bdfa80d47f954d53a35a64987ca1422f495b8d6483c0fe9f7117b36c2a792129" dependencies = [ "ansi_term", "atty", @@ -746,7 +757,7 @@ version = "0.3.0" source = "git+https://github.com/SergioBenitez/Devise.git?rev=e58b3ac9a#e58b3ac9afc3b6ff10a8aaf02a3e768a8f530089" dependencies = [ "devise_core", - "quote 1.0.4", + "quote 1.0.6", ] [[package]] @@ -755,9 +766,9 @@ version = "0.3.0" source = "git+https://github.com/SergioBenitez/Devise.git?rev=e58b3ac9a#e58b3ac9afc3b6ff10a8aaf02a3e768a8f530089" dependencies = [ "bitflags 1.2.1", - "proc-macro2 1.0.12", - "quote 1.0.4", - "syn 1.0.19", + "proc-macro2 1.0.15", + "quote 1.0.6", + "syn 1.0.23", ] [[package]] @@ -793,9 +804,9 @@ version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "45f5098f628d02a7a0f68ddba586fb61e80edec3bdc1be3b921f4ceec60858d3" dependencies = [ - "proc-macro2 1.0.12", - "quote 1.0.4", - "syn 1.0.19", + "proc-macro2 1.0.15", + "quote 1.0.6", + "syn 1.0.23", ] [[package]] @@ -930,18 +941,18 @@ checksum = "a246d82be1c9d791c5dfde9a2bd045fc3cbba3fa2b11ad558f27d01712f00569" [[package]] name = "encoding_rs" -version = "0.8.22" +version = "0.8.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd8d03faa7fe0c1431609dfad7bbe827af30f82e1e2ae6f7ee4fca6bd764bc28" +checksum = "e8ac63f94732332f44fe654443c46f6375d1939684c17b0afb6cb56b0456e171" dependencies = [ "cfg-if", ] [[package]] name = "env_logger" -version = "0.6.2" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aafcde04e90a5226a6443b7aabdb016ba2f8307c847d524724bd9b346dd1a2d3" +checksum = "44533bbbb3bb3c1fa17d9f2e4e38bbbaf8396ba82193c4cb1b6445d711445d36" dependencies = [ "atty", "humantime", @@ -956,7 +967,7 @@ version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d371106cc88ffdfb1eabd7111e432da544f16f3e2d7bf1dfe8bf575f1df045cd" dependencies = [ - "backtrace 0.3.46", + "backtrace 0.3.48", "version_check 0.9.1", ] @@ -977,7 +988,7 @@ version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d32e9bd16cc02eae7db7ef620b392808b89f6a5e16bb3497d159c6b92a0f4f86" dependencies = [ - "backtrace 0.3.46", + "backtrace 0.3.48", "failure_derive", ] @@ -987,9 +998,9 @@ version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4" dependencies = [ - "proc-macro2 1.0.12", - "quote 1.0.4", - "syn 1.0.19", + "proc-macro2 1.0.15", + "quote 1.0.6", + "syn 1.0.23", "synstructure", ] @@ -1028,9 +1039,9 @@ dependencies = [ [[package]] name = "fnv" -version = "1.0.6" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "foreign-types" @@ -1125,9 +1136,9 @@ checksum = "1b980f2816d6ee8673b6517b52cb0e808a180efc92e5c19d02cdda79066703ef" [[package]] name = "futures" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c329ae8753502fb44ae4fc2b622fa2a94652c41e795143765ba0927f92ab780" +checksum = "1e05b85ec287aac0dc34db7d4a569323df697f9c55b99b15d6b4ef8cde49f613" dependencies = [ "futures-channel", "futures-core", @@ -1140,9 +1151,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0c77d04ce8edd9cb903932b608268b3fffec4163dc053b3b402bf47eac1f1a8" +checksum = "f366ad74c28cca6ba456d95e6422883cfb4b252a83bed929c83abfdbbf2967d5" dependencies = [ "futures-core", "futures-sink", @@ -1150,9 +1161,9 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f25592f769825e89b92358db00d26f965761e094951ac44d3663ef25b7ac464a" +checksum = "59f5fff90fd5d971f936ad674802482ba441b6f09ba5e15fd8b39145582ca399" [[package]] name = "futures-cpupool" @@ -1166,9 +1177,9 @@ dependencies = [ [[package]] name = "futures-executor" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f674f3e1bcb15b37284a90cedf55afdba482ab061c407a9c0ebbd0f3109741ba" +checksum = "10d6bb888be1153d3abeb9006b11b02cf5e9b209fda28693c31ae1e4e012e314" dependencies = [ "futures-core", "futures-task", @@ -1177,39 +1188,42 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a638959aa96152c7a4cddf50fcb1e3fede0583b27157c26e67d6f99904090dc6" +checksum = "de27142b013a8e869c14957e6d2edeef89e97c289e69d042ee3a49acd8b51789" [[package]] name = "futures-macro" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a5081aa3de1f7542a794a397cde100ed903b0630152d0973479018fd85423a7" +checksum = "d0b5a30a4328ab5473878237c447333c093297bded83a4983d10f4deea240d39" dependencies = [ "proc-macro-hack 0.5.15", - "proc-macro2 1.0.12", - "quote 1.0.4", - "syn 1.0.19", + "proc-macro2 1.0.15", + "quote 1.0.6", + "syn 1.0.23", ] [[package]] name = "futures-sink" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3466821b4bc114d95b087b850a724c6f83115e929bc88f1fa98a3304a944c8a6" +checksum = "3f2032893cb734c7a05d85ce0cc8b8c4075278e93b24b66f9de99d6eb0fa8acc" [[package]] name = "futures-task" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b0a34e53cf6cdcd0178aa573aed466b646eb3db769570841fda0c7ede375a27" +checksum = "bdb66b5f09e22019b1ab0830f7785bcea8e7a42148683f99214f73f8ec21a626" +dependencies = [ + "once_cell 1.4.0", +] [[package]] name = "futures-util" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22766cf25d64306bedf0384da004d05c9974ab104fcc4528f1236181c18004c5" +checksum = "8764574ff08b701a084482c3c7031349104b07ac897393010494beaa18ce32c6" dependencies = [ "futures-channel", "futures-core", @@ -1218,21 +1232,13 @@ dependencies = [ "futures-sink", "futures-task", "memchr", + "pin-project", "pin-utils", "proc-macro-hack 0.5.15", "proc-macro-nested", "slab", ] -[[package]] -name = "fxhash" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" -dependencies = [ - "byteorder 1.3.4", -] - [[package]] name = "generic-array" version = "0.12.3" @@ -1286,6 +1292,12 @@ name = "gettext-utils" version = "0.1.0" source = "git+https://github.com/Plume-org/gettext-macros/?rev=a7c605f7edd6bfbfbfe7778026bfefd88d82db10#a7c605f7edd6bfbfbfe7778026bfefd88d82db10" +[[package]] +name = "gimli" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bcc8e0c9bce37868955864dbecd2b1ab2bdf967e6f28066d65aaac620444b65c" + [[package]] name = "glob" version = "0.3.0" @@ -1384,9 +1396,9 @@ dependencies = [ [[package]] name = "hermit-abi" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61565ff7aaace3525556587bd2dc31d4a07071957be715e63ce7b1eccf51a8f4" +checksum = "91780f809e750b0a89f5544be56617ff6b1227ee485bcb06ebe10cdf89bd3b71" dependencies = [ "libc", ] @@ -1668,9 +1680,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.69" +version = "0.2.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99e85c08494b21a9054e7fe1374a732aeadaff3980b6990b94bfd3a70f690005" +checksum = "3baa92041a6fec78c687fa0cc2b3fae8884f743d672cf551bed1d6dac6988d0f" [[package]] name = "libloading" @@ -1838,9 +1850,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9753f12909fd8d923f75ae5c3258cae1ed3c8ec052e1b38c93c21a6d157f789c" dependencies = [ "migrations_internals", - "proc-macro2 1.0.12", - "quote 1.0.4", - "syn 1.0.19", + "proc-macro2 1.0.15", + "quote 1.0.6", + "syn 1.0.23", ] [[package]] @@ -2116,6 +2128,12 @@ dependencies = [ "libc", ] +[[package]] +name = "object" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cbca9424c482ee628fa549d9c812e2cd22f1180b9222c9200fdfa6eb31aecb2" + [[package]] name = "once_cell" version = "0.2.4" @@ -2127,9 +2145,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.3.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1c601810575c99596d4afc46f78a678c80105117c379eb3650cf99b8a21ce5b" +checksum = "0b631f7e854af39a1739f401cf34a8a013dfe09eac4fa4dba91e9768bd28168d" [[package]] name = "onig" @@ -2145,9 +2163,9 @@ dependencies = [ [[package]] name = "onig_sys" -version = "69.2.0" +version = "69.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a8d4efbf5f59cece01f539305191485b651acb3785b9d5eef05749f0496514e" +checksum = "3814583fad89f3c60ae0701d80e87e1fd3028741723deda72d0d4a0ecf0cb0db" dependencies = [ "bindgen", "cc", @@ -2365,22 +2383,22 @@ dependencies = [ [[package]] name = "pin-project" -version = "0.4.13" +version = "0.4.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82c3bfbfb5bb42f99498c7234bbd768c220eb0cea6818259d0d18a1aa3d2595d" +checksum = "edc93aeee735e60ecb40cf740eb319ff23eab1c5748abfdb5c180e4ce49f7791" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "0.4.13" +version = "0.4.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccbf6449dcfb18562c015526b085b8df1aa3cdab180af8ec2ebd300a3bd28f63" +checksum = "e58db2081ba5b4c93bd6be09c40fd36cb9193a8336c384f3b40012e531aa7e40" dependencies = [ - "proc-macro2 1.0.12", - "quote 1.0.4", - "syn 1.0.19", + "proc-macro2 1.0.15", + "quote 1.0.6", + "syn 1.0.23", ] [[package]] @@ -2421,6 +2439,7 @@ version = "0.4.0" dependencies = [ "activitypub", "askama_escape", + "async-trait", "atom_syndication", "chrono", "clap", @@ -2455,7 +2474,7 @@ dependencies = [ "tokio", "validator", "validator_derive", - "webfinger", + "webfinger 0.5.0 (git+https://github.com/Plume-org/webfinger?rev=4e8f12810c4a7ba7a07bbcb722cd265fdff512b6)", ] [[package]] @@ -2539,7 +2558,7 @@ dependencies = [ "diesel", "diesel-derive-newtype", "diesel_migrations", - "futures 0.3.4", + "futures 0.3.5", "glob", "guid-create", "heck", @@ -2562,15 +2581,15 @@ dependencies = [ "tokio", "url 2.1.1", "walkdir", - "webfinger", + "webfinger 0.5.0 (git+https://github.com/Plume-org/webfinger?rev=update-deps)", "whatlang", ] [[package]] name = "ppv-lite86" -version = "0.2.6" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74490b50b9fbe561ac330df47c08f3f33073d2d00c150f719147d7c54522fa1b" +checksum = "237a5ed80e274dbc66f86bd59c1e25edc039660be53194b5fe0a482e0f2612ea" [[package]] name = "pq-sys" @@ -2643,9 +2662,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.12" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8872cf6f48eee44265156c111456a700ab3483686b3f96df4cf5481c89157319" +checksum = "70a50b9351bfa8d65a7d93ce712dc63d2fd15ddbf2c36990fc7cac344859c04f" dependencies = [ "unicode-xid 0.2.0", ] @@ -2712,11 +2731,11 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.4" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c1f4b0efa5fc5e8ceb705136bfee52cfdb6a4e3509f770b478cd6ed434232a7" +checksum = "54a21852a652ad6f610c9510194f398ff6f8692e334fd1145fed931f7fbe44ea" dependencies = [ - "proc-macro2 1.0.12", + "proc-macro2 1.0.15", ] [[package]] @@ -2995,7 +3014,7 @@ checksum = "703516ae74571f24b465b4a1431e81e2ad51336cb0ded733a55a1aa3eccac196" dependencies = [ "cc", "libc", - "once_cell 1.3.1", + "once_cell 1.4.0", "spin", "untrusted", "web-sys", @@ -3011,7 +3030,7 @@ dependencies = [ "atty", "base16", "base64 0.11.0", - "futures 0.3.4", + "futures 0.3.5", "futures-util", "log 0.4.8", "memchr", @@ -3034,7 +3053,7 @@ source = "git+https://github.com/SergioBenitez/Rocket?rev=async#78c8ac8ccdbe85ab dependencies = [ "devise", "indexmap", - "quote 1.0.4", + "quote 1.0.6", "rocket_http", "version_check 0.9.1", "yansi 0.5.0", @@ -3134,6 +3153,12 @@ version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783" +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + [[package]] name = "rustc_version" version = "0.2.3" @@ -3166,9 +3191,9 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.18" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "039c25b130bd8c1321ee2d7de7fde2659fa9c2744e4bb29711cfc852ea53cd19" +checksum = "8f05ba609c234e60bee0d547fe94a4c7e9da733d1c962cf6e59efa4cd9c8bc75" dependencies = [ "lazy_static", "winapi 0.3.8", @@ -3214,9 +3239,9 @@ checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" [[package]] name = "security-framework" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f331b9025654145cd425b9ded0caf8f5ae0df80d418b326e2dc1c3dc5eb0620" +checksum = "64808902d7d99f78eaddd2b4e2509713babc3dc3c85ad6f4c447680f3c01e535" dependencies = [ "bitflags 1.2.1", "core-foundation", @@ -3252,29 +3277,29 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.106" +version = "1.0.110" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36df6ac6412072f67cf767ebbde4133a5b2e88e76dc6187fa7104cd16f783399" +checksum = "99e7b308464d16b56eba9964e4972a3eee817760ab60d88c3f86e1fecb08204c" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.106" +version = "1.0.110" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e549e3abf4fb8621bd1609f11dfc9f5e50320802273b12f3811a67e6716ea6c" +checksum = "818fbf6bfa9a42d3bfcaca148547aa00c7b915bec71d1757aa2d44ca68771984" dependencies = [ - "proc-macro2 1.0.12", - "quote 1.0.4", - "syn 1.0.19", + "proc-macro2 1.0.15", + "quote 1.0.6", + "syn 1.0.23", ] [[package]] name = "serde_json" -version = "1.0.52" +version = "1.0.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7894c8ed05b7a3a279aeb79025fdec1d3158080b75b98a08faf2806bb799edd" +checksum = "993948e75b189211a9b31a7528f950c6adc21f9720b6438ff80a7fa2f864cea2" dependencies = [ "itoa", "ryu", @@ -3325,9 +3350,9 @@ checksum = "83695fde96cbe9e08f0e4eb96b1b56fdbd44f2098ee27462dda964c7745fddc7" dependencies = [ "bitflags 1.2.1", "itertools", - "proc-macro2 1.0.12", - "quote 1.0.4", - "syn 1.0.19", + "proc-macro2 1.0.15", + "quote 1.0.6", + "syn 1.0.23", ] [[package]] @@ -3338,9 +3363,9 @@ checksum = "e63e6744142336dfb606fe2b068afa2e1cca1ee6a5d8377277a92945d81fa331" dependencies = [ "bitflags 1.2.1", "itertools", - "proc-macro2 1.0.12", - "quote 1.0.4", - "syn 1.0.19", + "proc-macro2 1.0.15", + "quote 1.0.6", + "syn 1.0.23", ] [[package]] @@ -3488,8 +3513,8 @@ checksum = "f0f45ed1b65bf9a4bf2f7b7dc59212d1926e9eaf00fa998988e420fd124467c6" dependencies = [ "phf_generator", "phf_shared", - "proc-macro2 1.0.12", - "quote 1.0.4", + "proc-macro2 1.0.15", + "quote 1.0.6", "string_cache_shared", ] @@ -3562,12 +3587,12 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.19" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8e5aa70697bb26ee62214ae3288465ecec0000f05182f039b477001f08f5ae7" +checksum = "95b5f192649e48a5302a13f2feb224df883b98933222369e4b3b0fe2a5447269" dependencies = [ - "proc-macro2 1.0.12", - "quote 1.0.4", + "proc-macro2 1.0.15", + "quote 1.0.6", "unicode-xid 0.2.0", ] @@ -3586,9 +3611,9 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67656ea1dc1b41b1451851562ea232ec2e5a80242139f7e679ceccfb5d61f545" dependencies = [ - "proc-macro2 1.0.12", - "quote 1.0.4", - "syn 1.0.19", + "proc-macro2 1.0.15", + "quote 1.0.6", + "syn 1.0.23", "unicode-xid 0.2.0", ] @@ -3749,9 +3774,9 @@ dependencies = [ [[package]] name = "tokio" -version = "0.2.20" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05c1d570eb1a36f0345a5ce9c6c6e665b70b73d11236912c0b477616aeec47b1" +checksum = "d099fa27b9702bed751524694adbe393e18b36b204da91eb1cbbbbb4a5ee2d58" dependencies = [ "bytes", "fnv", @@ -4068,9 +4093,9 @@ dependencies = [ "bumpalo", "lazy_static", "log 0.4.8", - "proc-macro2 1.0.12", - "quote 1.0.4", - "syn 1.0.19", + "proc-macro2 1.0.15", + "quote 1.0.6", + "syn 1.0.23", "wasm-bindgen-shared", ] @@ -4092,7 +4117,7 @@ version = "0.2.62" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2cd85aa2c579e8892442954685f0d801f9129de24fa2136b2c6a539c76b65776" dependencies = [ - "quote 1.0.4", + "quote 1.0.6", "wasm-bindgen-macro-support", ] @@ -4102,9 +4127,9 @@ version = "0.2.62" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8eb197bd3a47553334907ffd2f16507b4f4f01bbec3ac921a7719e0decdfe72a" dependencies = [ - "proc-macro2 1.0.12", - "quote 1.0.4", - "syn 1.0.19", + "proc-macro2 1.0.15", + "quote 1.0.6", + "syn 1.0.23", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -4125,6 +4150,16 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "webfinger" +version = "0.5.0" +source = "git+https://github.com/Plume-org/webfinger?rev=4e8f12810c4a7ba7a07bbcb722cd265fdff512b6#4e8f12810c4a7ba7a07bbcb722cd265fdff512b6" +dependencies = [ + "async-trait", + "reqwest", + "serde", +] + [[package]] name = "webfinger" version = "0.5.0" @@ -4136,20 +4171,19 @@ dependencies = [ [[package]] name = "whatlang" -version = "0.7.4" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5eb4694f7385e63fab02bb374e8ab39bffb5c25c2bce68a9b18c51cfd554e69a" +checksum = "3437a8cc85accfcd03f291a2d2a6ae8400fa78ad6f2b6aa6c38d2badb6e378e9" dependencies = [ "hashbrown", ] [[package]] name = "which" -version = "2.0.1" +version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b57acb10231b9493c8472b20cb57317d0679a49e0bdbee44b3b803a6473af164" +checksum = "d011071ae14a2f6671d0b74080ae0cd8ebf3a6f8c9589a2cd45f23126fe29724" dependencies = [ - "failure", "libc", ] diff --git a/plume-models/src/lib.rs b/plume-models/src/lib.rs index f652e6df..6e6810a1 100644 --- a/plume-models/src/lib.rs +++ b/plume-models/src/lib.rs @@ -76,6 +76,12 @@ impl From for Error { } } +impl From for std::option::NoneError { + fn from(_: Error) -> Self { + std::option::NoneError + } +} + impl From for Error { fn from(_: url::ParseError) -> Self { Error::Url diff --git a/src/api/mod.rs b/src/api/mod.rs index f13f5615..3ff09276 100644 --- a/src/api/mod.rs +++ b/src/api/mod.rs @@ -66,6 +66,7 @@ pub struct OAuthRequest { } #[get("/oauth2?")] +#[rocket::async_trait(?Send)] pub async fn oauth( query: Form, rockets: PlumeRocket, diff --git a/src/inbox.rs b/src/inbox.rs index 92dba541..1e554194 100644 --- a/src/inbox.rs +++ b/src/inbox.rs @@ -11,7 +11,7 @@ use rocket_contrib::json::*; use serde::Deserialize; use tokio::io::AsyncReadExt; -pub fn handle_incoming( +pub async fn handle_incoming( rockets: PlumeRocket, data: SignedJson, headers: Headers<'_>, @@ -32,6 +32,7 @@ pub fn handle_incoming( // maybe we just know an old key? actor .refetch(conn) + .await .and_then(|_| User::get(conn, actor.id)) .and_then(|u| { if verify_http_headers(&u, &headers.0, &sig).is_secure() || act.clone().verify(&u) { diff --git a/src/routes/blogs.rs b/src/routes/blogs.rs index 0fb3d3bb..2891463e 100644 --- a/src/routes/blogs.rs +++ b/src/routes/blogs.rs @@ -19,10 +19,14 @@ use plume_models::{ }; #[get("/~/?", rank = 2)] -pub fn details(name: String, page: Option, rockets: PlumeRocket) -> Result { +pub async fn details( + name: String, + page: Option, + rockets: PlumeRocket, +) -> Result { let page = page.unwrap_or_default(); let conn = &*rockets.conn; - let blog = Blog::find_by_fqn(&rockets, &name)?; + let blog = Blog::find_by_fqn(&rockets, &name).await?; let posts = Post::blog_page(conn, &blog, page.limits())?; let articles_count = Post::count_for_blog(conn, &blog)?; let authors = &blog.list_authors(conn)?; @@ -43,7 +47,7 @@ pub async fn activity_details( rockets: PlumeRocket, _ap: ApRequest, ) -> Option> { - let blog = Blog::find_by_fqn(&rockets, &name).await?.ok()?; + let blog = Blog::find_by_fqn(&rockets, &name).await?; Some(ActivityStream::new(blog.to_activity(&*rockets.conn).ok()?)) } @@ -83,7 +87,7 @@ fn valid_slug(title: &str) -> Result<(), ValidationError> { } #[post("/blogs/new", data = "")] -pub fn create(form: LenientForm, rockets: PlumeRocket) -> RespondOrRedirect { +pub async fn create(form: LenientForm, rockets: PlumeRocket) -> RespondOrRedirect { let slug = utils::make_actor_id(&form.title); let conn = &*rockets.conn; let intl = &rockets.intl.catalog; @@ -143,9 +147,11 @@ pub fn create(form: LenientForm, rockets: PlumeRocket) -> RespondOr } #[post("/~//delete")] -pub fn delete(name: String, rockets: PlumeRocket) -> RespondOrRedirect { +pub async fn delete(name: String, rockets: PlumeRocket) -> RespondOrRedirect { let conn = &*rockets.conn; - let blog = Blog::find_by_fqn(&rockets, &name).expect("blog::delete: blog not found"); + let blog = Blog::find_by_fqn(&rockets, &name) + .await + .expect("blog::delete: blog not found"); if rockets .user @@ -348,9 +354,10 @@ pub async fn outbox( name: String, rockets: PlumeRocket, ) -> Option> { - let blog = Blog::find_by_fqn(&rockets, &name).await?.ok()?; + let blog = Blog::find_by_fqn(&rockets, &name).await?; Some(blog.outbox(&*rockets.conn).ok()?) } + #[allow(unused_variables)] #[get("/~//outbox?")] pub async fn outbox_page( @@ -358,12 +365,13 @@ pub async fn outbox_page( page: Page, rockets: PlumeRocket, ) -> Option> { - let blog = Blog::find_by_fqn(&rockets, &name).await?.ok()?; + let blog = Blog::find_by_fqn(&rockets, &name).await?; Some(blog.outbox_page(&*rockets.conn, page.limits()).ok()?) } + #[get("/~//atom.xml")] pub async fn atom_feed(name: String, rockets: PlumeRocket) -> Option> { - let blog = Blog::find_by_fqn(&rockets, &name).await?.ok()?; + let blog = Blog::find_by_fqn(&rockets, &name).await?; let conn = &*rockets.conn; let entries = Post::get_recents_for_blog(&*conn, &blog, 15).ok()?; let uri = Instance::get_local() diff --git a/src/routes/comments.rs b/src/routes/comments.rs index 99ef6e57..ce05abbc 100644 --- a/src/routes/comments.rs +++ b/src/routes/comments.rs @@ -28,7 +28,7 @@ pub struct NewCommentForm { } #[post("/~///comment", data = "")] -pub fn create( +pub async fn create( blog_name: String, slug: String, form: LenientForm, @@ -39,9 +39,7 @@ pub fn create( let blog = Blog::find_by_fqn(&rockets, &blog_name) .await .expect("comments::create: blog error"); - let post = Post::find_by_slug(&*conn, &slug, blog.id) - .await - .expect("comments::create: post error"); + let post = Post::find_by_slug(&*conn, &slug, blog.id).expect("comments::create: post error"); form.validate() .map(|_| { let (html, mentions, _hashtags) = utils::md_to_html( @@ -70,6 +68,7 @@ pub fn create( .expect("comments::create: insert error"); let new_comment = comm .create_activity(&rockets) + .await .expect("comments::create: activity error"); // save mentions @@ -77,6 +76,7 @@ pub fn create( Mention::from_activity( &*conn, &Mention::build_activity(&rockets, &ment) + .await .expect("comments::create: build mention error"), comm.id, false, @@ -185,8 +185,9 @@ pub fn activity_pub( _ap: ApRequest, rockets: PlumeRocket, ) -> Option> { - Comment::get(&*rockets.conn, id) - .and_then(|c| c.to_activity(&rockets)) - .ok() - .map(ActivityStream::new) + let c = match Comment::get(&*rockets.conn, id) { + Ok(c) => c.to_activity(&rockets).await.ok(), + Err(_) => None, + }; + c.map(ActivityStream::new) } diff --git a/src/routes/errors.rs b/src/routes/errors.rs index 02d6883b..039fd0d5 100644 --- a/src/routes/errors.rs +++ b/src/routes/errors.rs @@ -41,20 +41,20 @@ impl<'r> Responder<'r> for ErrorPage { } #[catch(404)] -pub fn not_found(req: &Request<'_>) -> Ructe { - let rockets = req.guard::().unwrap(); +pub async fn not_found(req: &Request<'_>) -> Ructe { + let rockets = req.guard::().await.unwrap(); render!(errors::not_found(&rockets.to_context())) } #[catch(422)] -pub fn unprocessable_entity(req: &Request<'_>) -> Ructe { - let rockets = req.guard::().unwrap(); +pub async fn unprocessable_entity(req: &Request<'_>) -> Ructe { + let rockets = req.guard::().await.unwrap(); render!(errors::unprocessable_entity(&rockets.to_context())) } #[catch(500)] -pub fn server_error(req: &Request<'_>) -> Ructe { - let rockets = req.guard::().unwrap(); +pub async fn server_error(req: &Request<'_>) -> Ructe { + let rockets = req.guard::().await.unwrap(); render!(errors::server_error(&rockets.to_context())) } diff --git a/src/routes/posts.rs b/src/routes/posts.rs index 84658d40..16329d9b 100644 --- a/src/routes/posts.rs +++ b/src/routes/posts.rs @@ -304,11 +304,11 @@ pub async fn update( if post.published { post.update_mentions( + &conn, mentions .into_iter() .filter_map(|m| Mention::build_activity(&rockets, &m).await.ok()) .collect(), - &conn, ) .expect("post::update: mentions error"); } @@ -645,9 +645,10 @@ pub async fn remote_interact_post( let target = Blog::find_by_fqn(&rockets, &blog_name) .await .and_then(|blog| Post::find_by_slug(&rockets.conn, &slug, blog.id))?; - if let Some(uri) = User::fetch_remote_interact_uri(&remote.remote) + if let uri = User::fetch_remote_interact_uri(&remote.remote) .await - .map(|uri| uri.replace("{uri}", format!("{}", target.ap_url)).ok()) + .map(|uri| uri.replace("{uri}", &format!("{}", target.ap_url))) + .unwrap() { Ok(Redirect::to(uri).into()) } else { diff --git a/src/routes/reshares.rs b/src/routes/reshares.rs index 9fe63650..1a427f4e 100644 --- a/src/routes/reshares.rs +++ b/src/routes/reshares.rs @@ -10,14 +10,14 @@ use plume_models::{ }; #[post("/~///reshare")] -pub fn create( +pub async fn create( blog: String, slug: String, user: User, rockets: PlumeRocket, ) -> Result { let conn = &*rockets.conn; - let b = Blog::find_by_fqn(&rockets, &blog)?; + let b = Blog::find_by_fqn(&rockets, &blog).await?; let post = Post::find_by_slug(&*conn, &slug, b.id)?; if !user.has_reshared(&*conn, &post)? { diff --git a/src/routes/session.rs b/src/routes/session.rs index 4d79f6f4..5f65ddf8 100644 --- a/src/routes/session.rs +++ b/src/routes/session.rs @@ -42,14 +42,16 @@ pub struct LoginForm { } #[post("/login", data = "")] -pub fn create( +pub async fn create( form: LenientForm, mut cookies: Cookies<'_>, rockets: PlumeRocket, ) -> RespondOrRedirect { let conn = &*rockets.conn; - let user = User::find_by_email(&*conn, &form.email_or_name) - .or_else(|_| User::find_by_fqn(&rockets, &form.email_or_name)); + let user = match User::find_by_email(&*conn, &form.email_or_name) { + Ok(user) => Ok(user), + Err(_) => User::find_by_fqn(&rockets, &form.email_or_name).await, + }; let mut errors = match form.validate() { Ok(_) => ValidationErrors::new(), Err(e) => e, diff --git a/src/routes/user.rs b/src/routes/user.rs index 2a43289e..eca17a68 100644 --- a/src/routes/user.rs +++ b/src/routes/user.rs @@ -50,7 +50,7 @@ pub async fn details( update_conn: DbConn, ) -> Result { let conn = &*rockets.conn; - let user = User::find_by_fqn(&rockets, &name)?; + let user = User::find_by_fqn(&rockets, &name).await?; let recents = Post::get_recents_for_author(&*conn, &user, 6)?; let reshares = Reshare::get_recents_for_author(&*conn, &user, 6)?; let worker = &rockets.worker; @@ -149,7 +149,7 @@ pub fn dashboard_auth(i18n: I18n) -> Flash { } #[post("/@//follow")] -pub fn follow( +pub async fn follow( name: String, user: User, rockets: PlumeRocket, @@ -193,7 +193,7 @@ pub fn follow( } #[post("/@//follow", data = "", rank = 2)] -pub fn follow_not_connected( +pub async fn follow_not_connected( rockets: PlumeRocket, name: String, remote_form: Option>, @@ -205,14 +205,14 @@ pub fn follow_not_connected( .await .ok() .and_then(|uri| { - uri.replace( + Some(uri.replace( "{uri}", - format!( + &format!( "{}@{}", target.fqn, target.get_instance(&rockets.conn).ok()?.public_domain ), - ) + )) }) { Ok(Redirect::to(uri).into()) @@ -270,14 +270,14 @@ pub fn follow_auth(name: String, i18n: I18n) -> Flash { #[get("/@//followers?", rank = 2)] pub async fn followers( - String, + name: String, page: Option, rockets: PlumeRocket, ) -> Result { let conn = &*rockets.conn; let page = page.unwrap_or_default(); - let user = User::find_by_fqn(&rockets, &name).await?; - let followers_count = user.count_followers(&*; + let user: User = User::find_by_fqn(&rockets, &name).await?; + let followers_count = user.count_followers(&conn); Ok(render!(users::followers( &rockets.to_context(), @@ -296,7 +296,7 @@ pub async fn followers( } #[get("/@//followed?", rank = 2)] -pub fn followed( +pub async fn followed( name: String, page: Option, rockets: PlumeRocket, @@ -328,8 +328,8 @@ pub async fn activity_details( rockets: PlumeRocket, _ap: ApRequest, ) -> Option> { - let user = User::find_by_fqn(&rockets, &name).await?.ok()?; - Some(ActivityStream::new(user.to_activity(&*roonn).ok()?)) + let user: User = User::find_by_fqn(&rockets, &name).await?; + Some(ActivityStream::new(user.to_activity(&*rockets.conn).ok()?)) } #[get("/users/new")] @@ -595,7 +595,7 @@ pub async fn inbox( User::find_by_fqn(&rockets, &name) .await .map_err(|_| status::BadRequest(Some("User not found")))?; - inbox::handle_incoming(rockets, data, headers) + inbox::handle_incoming(rockets, data, headers).await } #[get("/@//followers", rank = 1)] @@ -604,7 +604,7 @@ pub async fn ap_followers( rockets: PlumeRocket, _ap: ApRequest, ) -> Option> { - let user = User::find_by_fqn(&rockets, &name).await?.ok()?; + let user = User::find_by_fqn(&rockets, &name).await?; let followers = user .get_followers(&*rockets.conn) .ok()? @@ -626,7 +626,7 @@ pub async fn ap_followers( #[get("/@//atom.xml")] pub async fn atom_feed(name: String, rockets: PlumeRocket) -> Option> { let conn = &*rockets.conn; - let author = User::find_by_fqn(&rockets, &name).await?.ok()?; + let author = User::find_by_fqn(&rockets, &name).await?; let entries = Post::get_recents_for_author(conn, &author, 15).ok()?; let uri = Instance::get_local() .ok()? diff --git a/src/routes/well_known.rs b/src/routes/well_known.rs index 80aa0916..fe1c7e19 100644 --- a/src/routes/well_known.rs +++ b/src/routes/well_known.rs @@ -1,3 +1,4 @@ +use async_trait; use rocket::http::ContentType; use rocket::response::Content; use serde_json; @@ -43,12 +44,14 @@ pub fn host_meta() -> String { struct WebfingerResolver; -impl Resolver for WebfingerResolver { - fn instance_domain<'a>(&self) -> &'a str { +#[async_trait::async_trait] +impl AsyncResolver for WebfingerResolver { + type Repo = PlumeRocket; + async fn instance_domain<'a>(&self) -> &'a str { CONFIG.base_url.as_str() } - fn find( + async fn find( &self, prefix: Prefix, acct: String, @@ -66,9 +69,9 @@ impl Resolver for WebfingerResolver { Prefix::Custom(_) => Err(ResolverError::NotFound), } } - fn endpoint( + async fn endpoint( &self, - resource: impl Into, + resource: impl Into + 'async_trait, resource_repo: PlumeRocket, ) -> Result { let resource = resource.into(); @@ -80,7 +83,9 @@ impl Resolver for WebfingerResolver { let user = parsed_res.next().ok_or(ResolverError::InvalidResource)?; let domain = parsed_res.next().ok_or(ResolverError::InvalidResource)?; if domain == webfinger.instance_domain() { - webfinger.find(res_prefix, user.to_string(), resource_repo) + webfinger + .find(res_prefix, user.to_string(), resource_repo) + .await } else { Err(ResolverError::WrongDomain) } @@ -88,8 +93,9 @@ impl Resolver for WebfingerResolver { } #[get("/.well-known/webfinger?")] -pub fn webfinger(resource: String, rockets: PlumeRocket) -> Content { +pub async fn webfinger(resource: String, rockets: PlumeRocket) -> Content { match WebfingerResolver::endpoint(resource, rockets) + .await .and_then(|wf| serde_json::to_string(&wf).map_err(|_| ResolverError::NotFound)) { Ok(wf) => Content(ContentType::new("application", "jrd+json"), wf), -- 2.38.5 From 18bb413011244b44d3ccdb2716e33af86ec61e76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mina=20Gali=C4=87?= Date: Sun, 24 May 2020 19:39:41 +0200 Subject: [PATCH 33/46] add async/.await until all our errors are the same: that our Connection is not Send-safe. --- src/routes/comments.rs | 2 +- src/routes/instance.rs | 12 ++++++++---- src/routes/posts.rs | 20 ++++++++++++-------- 3 files changed, 21 insertions(+), 13 deletions(-) diff --git a/src/routes/comments.rs b/src/routes/comments.rs index ce05abbc..88f553c4 100644 --- a/src/routes/comments.rs +++ b/src/routes/comments.rs @@ -178,7 +178,7 @@ pub fn delete( } #[get("/~/<_blog>/<_slug>/comment/")] -pub fn activity_pub( +pub async fn activity_pub( _blog: String, _slug: String, id: i32, diff --git a/src/routes/instance.rs b/src/routes/instance.rs index a4897cff..055ac123 100644 --- a/src/routes/instance.rs +++ b/src/routes/instance.rs @@ -387,17 +387,21 @@ fn ban( } #[post("/inbox", data = "")] -pub fn shared_inbox( +pub async fn shared_inbox( rockets: PlumeRocket, data: inbox::SignedJson, headers: Headers<'_>, ) -> Result> { - inbox::handle_incoming(rockets, data, headers) + inbox::handle_incoming(rockets, data, headers).await } #[get("/remote_interact?")] -pub fn interact(rockets: PlumeRocket, user: Option, target: String) -> Option { - if User::find_by_fqn(&rockets, &target).is_ok() { +pub async fn interact( + rockets: PlumeRocket, + user: Option, + target: String, +) -> Option { + if User::find_by_fqn(&rockets, &target).await.is_ok() { return Some(Redirect::to(uri!(super::user::details: name = target))); } diff --git a/src/routes/posts.rs b/src/routes/posts.rs index 16329d9b..e3bc3426 100644 --- a/src/routes/posts.rs +++ b/src/routes/posts.rs @@ -33,7 +33,7 @@ use plume_models::{ }; #[get("/~//?", rank = 4)] -pub fn details( +pub async fn details( blog: String, slug: String, responding_to: Option, @@ -41,7 +41,7 @@ pub fn details( ) -> Result { let conn = &*rockets.conn; let user = rockets.user.clone(); - let blog = Blog::find_by_fqn(&rockets, &blog)?; + let blog = Blog::find_by_fqn(&rockets, &blog).await?; let post = Post::find_by_slug(&*conn, &slug, blog.id)?; if !(post.published || post @@ -99,14 +99,14 @@ pub fn details( } #[get("/~//", rank = 3)] -pub fn activity_details( +pub async fn activity_details( blog: String, slug: String, _ap: ApRequest, rockets: PlumeRocket, ) -> Result, Option> { let conn = &*rockets.conn; - let blog = Blog::find_by_fqn(&rockets, &blog).map_err(|_| None)?; + let blog = Blog::find_by_fqn(&rockets, &blog).await.map_err(|_| None)?; let post = Post::find_by_slug(&*conn, &slug, blog.id).map_err(|_| None)?; if post.published { Ok(ActivityStream::new( @@ -130,9 +130,9 @@ pub fn new_auth(blog: String, i18n: I18n) -> Flash { } #[get("/~//new", rank = 1)] -pub fn new(blog: String, cl: ContentLen, rockets: PlumeRocket) -> Result { +pub async fn new(blog: String, cl: ContentLen, rockets: PlumeRocket) -> Result { let conn = &*rockets.conn; - let b = Blog::find_by_fqn(&rockets, &blog)?; + let b = Blog::find_by_fqn(&rockets, &blog).await?; let user = rockets.user.clone().unwrap(); if !user.is_author_in(&*conn, &b)? { @@ -408,7 +408,9 @@ pub fn create( rockets: PlumeRocket, ) -> Result { let conn = &*rockets.conn; - let blog = Blog::find_by_fqn(&rockets, &blog_name).expect("post::create: blog error"); + let blog = Blog::find_by_fqn(&rockets, &blog_name) + .await + .expect("post::create: blog error"); let slug = form.title.to_string().to_kebab_case(); let user = rockets.user.clone().unwrap(); @@ -522,6 +524,7 @@ pub fn create( Mention::from_activity( &*conn, &Mention::build_activity(&rockets, &m) + .await .expect("post::create: mention build error"), post.id, true, @@ -564,7 +567,7 @@ pub fn create( } #[post("/~///delete")] -pub fn delete( +pub async fn delete( blog_name: String, slug: String, rockets: PlumeRocket, @@ -572,6 +575,7 @@ pub fn delete( ) -> Result, ErrorPage> { let user = rockets.user.clone().unwrap(); let post = Blog::find_by_fqn(&rockets, &blog_name) + .await .and_then(|blog| Post::find_by_slug(&*rockets.conn, &slug, blog.id)); if let Ok(post) = post { -- 2.38.5 From 7aabb9661ec18b5cadf12c4c275e26449817d760 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mina=20Gali=C4=87?= Date: Sun, 24 May 2020 20:27:39 +0200 Subject: [PATCH 34/46] upgrade webfinger everywhere, and implement async --- Cargo.lock | 75 ++++++++++++++++++---------------------- plume-models/Cargo.toml | 2 +- src/routes/well_known.rs | 14 ++++---- 3 files changed, 41 insertions(+), 50 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 777f02f5..4a2aa0a0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -31,7 +31,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "65608fdeae5eb05485d5b71a3d2242d76b2b7413608c196d47eb4dff3eed7b85" dependencies = [ - "proc-macro2 1.0.15", + "proc-macro2 1.0.17", "quote 1.0.6", "syn 1.0.23", ] @@ -160,7 +160,7 @@ version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26c4f3195085c36ea8d24d32b2f828d23296a9370a28aa39d111f6f16bef9f3b" dependencies = [ - "proc-macro2 1.0.15", + "proc-macro2 1.0.17", "quote 1.0.6", "syn 1.0.23", ] @@ -324,7 +324,7 @@ dependencies = [ "lazycell", "log 0.4.8", "peeking_take_while", - "proc-macro2 1.0.15", + "proc-macro2 1.0.17", "quote 1.0.6", "regex", "rustc-hash", @@ -692,9 +692,9 @@ checksum = "ef8ae57c4978a2acd8b869ce6b9ca1dfe817bff704c220209fdef2c0b75a01b9" [[package]] name = "data-encoding" -version = "2.2.0" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11c0346158a19b3627234e15596f5e465c360fcdb97d817bcb255e0510f5a788" +checksum = "72aa14c04dfae8dd7d8a2b1cb7ca2152618cd01336dbfe704b8dcbf8d41dbd69" [[package]] name = "dbghelp-sys" @@ -766,7 +766,7 @@ version = "0.3.0" source = "git+https://github.com/SergioBenitez/Devise.git?rev=e58b3ac9a#e58b3ac9afc3b6ff10a8aaf02a3e768a8f530089" dependencies = [ "bitflags 1.2.1", - "proc-macro2 1.0.15", + "proc-macro2 1.0.17", "quote 1.0.6", "syn 1.0.23", ] @@ -804,7 +804,7 @@ version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "45f5098f628d02a7a0f68ddba586fb61e80edec3bdc1be3b921f4ceec60858d3" dependencies = [ - "proc-macro2 1.0.15", + "proc-macro2 1.0.17", "quote 1.0.6", "syn 1.0.23", ] @@ -968,7 +968,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d371106cc88ffdfb1eabd7111e432da544f16f3e2d7bf1dfe8bf575f1df045cd" dependencies = [ "backtrace 0.3.48", - "version_check 0.9.1", + "version_check 0.9.2", ] [[package]] @@ -998,7 +998,7 @@ version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4" dependencies = [ - "proc-macro2 1.0.15", + "proc-macro2 1.0.17", "quote 1.0.6", "syn 1.0.23", "synstructure", @@ -1199,7 +1199,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0b5a30a4328ab5473878237c447333c093297bded83a4983d10f4deea240d39" dependencies = [ "proc-macro-hack 0.5.15", - "proc-macro2 1.0.15", + "proc-macro2 1.0.17", "quote 1.0.6", "syn 1.0.23", ] @@ -1850,7 +1850,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9753f12909fd8d923f75ae5c3258cae1ed3c8ec052e1b38c93c21a6d157f789c" dependencies = [ "migrations_internals", - "proc-macro2 1.0.15", + "proc-macro2 1.0.17", "quote 1.0.6", "syn 1.0.23", ] @@ -2067,7 +2067,7 @@ checksum = "0b471253da97532da4b61552249c521e01e736071f71c1a4f7ebbfbf0a06aad6" dependencies = [ "lexical-core", "memchr", - "version_check 0.9.1", + "version_check 0.9.2", ] [[package]] @@ -2200,9 +2200,9 @@ checksum = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de" [[package]] name = "openssl-sys" -version = "0.9.56" +version = "0.9.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f02309a7f127000ed50594f0b50ecc69e7c654e16d41b4e8156d1b3df8e0b52e" +checksum = "7410fef80af8ac071d4f63755c0ab89ac3df0fd1ea91f1d1f37cf5cec4395990" dependencies = [ "autocfg 1.0.0", "cc", @@ -2396,7 +2396,7 @@ version = "0.4.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e58db2081ba5b4c93bd6be09c40fd36cb9193a8336c384f3b40012e531aa7e40" dependencies = [ - "proc-macro2 1.0.15", + "proc-macro2 1.0.17", "quote 1.0.6", "syn 1.0.23", ] @@ -2474,7 +2474,7 @@ dependencies = [ "tokio", "validator", "validator_derive", - "webfinger 0.5.0 (git+https://github.com/Plume-org/webfinger?rev=4e8f12810c4a7ba7a07bbcb722cd265fdff512b6)", + "webfinger", ] [[package]] @@ -2581,7 +2581,7 @@ dependencies = [ "tokio", "url 2.1.1", "walkdir", - "webfinger 0.5.0 (git+https://github.com/Plume-org/webfinger?rev=update-deps)", + "webfinger", "whatlang", ] @@ -2662,9 +2662,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.15" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70a50b9351bfa8d65a7d93ce712dc63d2fd15ddbf2c36990fc7cac344859c04f" +checksum = "1502d12e458c49a4c9cbff560d0fe0060c252bc29799ed94ca2ed4bb665a0101" dependencies = [ "unicode-xid 0.2.0", ] @@ -2735,7 +2735,7 @@ version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "54a21852a652ad6f610c9510194f398ff6f8692e334fd1145fed931f7fbe44ea" dependencies = [ - "proc-macro2 1.0.15", + "proc-macro2 1.0.17", ] [[package]] @@ -3042,7 +3042,7 @@ dependencies = [ "time", "tokio", "toml", - "version_check 0.9.1", + "version_check 0.9.2", "yansi 0.5.0", ] @@ -3055,7 +3055,7 @@ dependencies = [ "indexmap", "quote 1.0.6", "rocket_http", - "version_check 0.9.1", + "version_check 0.9.2", "yansi 0.5.0", ] @@ -3290,7 +3290,7 @@ version = "1.0.110" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "818fbf6bfa9a42d3bfcaca148547aa00c7b915bec71d1757aa2d44ca68771984" dependencies = [ - "proc-macro2 1.0.15", + "proc-macro2 1.0.17", "quote 1.0.6", "syn 1.0.23", ] @@ -3350,7 +3350,7 @@ checksum = "83695fde96cbe9e08f0e4eb96b1b56fdbd44f2098ee27462dda964c7745fddc7" dependencies = [ "bitflags 1.2.1", "itertools", - "proc-macro2 1.0.15", + "proc-macro2 1.0.17", "quote 1.0.6", "syn 1.0.23", ] @@ -3363,7 +3363,7 @@ checksum = "e63e6744142336dfb606fe2b068afa2e1cca1ee6a5d8377277a92945d81fa331" dependencies = [ "bitflags 1.2.1", "itertools", - "proc-macro2 1.0.15", + "proc-macro2 1.0.17", "quote 1.0.6", "syn 1.0.23", ] @@ -3513,7 +3513,7 @@ checksum = "f0f45ed1b65bf9a4bf2f7b7dc59212d1926e9eaf00fa998988e420fd124467c6" dependencies = [ "phf_generator", "phf_shared", - "proc-macro2 1.0.15", + "proc-macro2 1.0.17", "quote 1.0.6", "string_cache_shared", ] @@ -3591,7 +3591,7 @@ version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95b5f192649e48a5302a13f2feb224df883b98933222369e4b3b0fe2a5447269" dependencies = [ - "proc-macro2 1.0.15", + "proc-macro2 1.0.17", "quote 1.0.6", "unicode-xid 0.2.0", ] @@ -3611,7 +3611,7 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67656ea1dc1b41b1451851562ea232ec2e5a80242139f7e679ceccfb5d61f545" dependencies = [ - "proc-macro2 1.0.15", + "proc-macro2 1.0.17", "quote 1.0.6", "syn 1.0.23", "unicode-xid 0.2.0", @@ -3869,7 +3869,7 @@ version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" dependencies = [ - "version_check 0.9.1", + "version_check 0.9.2", ] [[package]] @@ -4035,9 +4035,9 @@ checksum = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd" [[package]] name = "version_check" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "078775d0255232fb988e6fccf26ddc9d1ac274299aaedcedce21c6f72cc533ce" +checksum = "b5a972e5669d67ba988ce3dc826706fb0a8b01471c088cb0b6110b805cc36aed" [[package]] name = "void" @@ -4093,7 +4093,7 @@ dependencies = [ "bumpalo", "lazy_static", "log 0.4.8", - "proc-macro2 1.0.15", + "proc-macro2 1.0.17", "quote 1.0.6", "syn 1.0.23", "wasm-bindgen-shared", @@ -4127,7 +4127,7 @@ version = "0.2.62" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8eb197bd3a47553334907ffd2f16507b4f4f01bbec3ac921a7719e0decdfe72a" dependencies = [ - "proc-macro2 1.0.15", + "proc-macro2 1.0.17", "quote 1.0.6", "syn 1.0.23", "wasm-bindgen-backend", @@ -4160,15 +4160,6 @@ dependencies = [ "serde", ] -[[package]] -name = "webfinger" -version = "0.5.0" -source = "git+https://github.com/Plume-org/webfinger?rev=update-deps#cdaab95ed54765cdd70c61c39f9d2d19348472a9" -dependencies = [ - "reqwest", - "serde", -] - [[package]] name = "whatlang" version = "0.7.3" diff --git a/plume-models/Cargo.toml b/plume-models/Cargo.toml index fb49cfd6..4e449355 100644 --- a/plume-models/Cargo.toml +++ b/plume-models/Cargo.toml @@ -25,7 +25,7 @@ tantivy = "0.10.1" tokio = "0.2" url = "2.1" walkdir = "2.2" -webfinger = { git = "https://github.com/Plume-org/webfinger", rev = "update-deps" } +webfinger = { git = "https://github.com/Plume-org/webfinger", rev = "4e8f12810c4a7ba7a07bbcb722cd265fdff512b6", features = ["async"] } whatlang = "0.7.1" shrinkwraprs = "0.3" diesel-derive-newtype = "0.1.2" diff --git a/src/routes/well_known.rs b/src/routes/well_known.rs index fe1c7e19..bf5a27b2 100644 --- a/src/routes/well_known.rs +++ b/src/routes/well_known.rs @@ -69,9 +69,9 @@ impl AsyncResolver for WebfingerResolver { Prefix::Custom(_) => Err(ResolverError::NotFound), } } - async fn endpoint( + async fn endpoint + Send>( &self, - resource: impl Into + 'async_trait, + resource: R, resource_repo: PlumeRocket, ) -> Result { let resource = resource.into(); @@ -82,10 +82,8 @@ impl AsyncResolver for WebfingerResolver { let mut parsed_res = res.splitn(2, '@'); let user = parsed_res.next().ok_or(ResolverError::InvalidResource)?; let domain = parsed_res.next().ok_or(ResolverError::InvalidResource)?; - if domain == webfinger.instance_domain() { - webfinger - .find(res_prefix, user.to_string(), resource_repo) - .await + if domain == self.instance_domain().await { + self.find(res_prefix, user.to_string(), resource_repo).await } else { Err(ResolverError::WrongDomain) } @@ -94,7 +92,9 @@ impl AsyncResolver for WebfingerResolver { #[get("/.well-known/webfinger?")] pub async fn webfinger(resource: String, rockets: PlumeRocket) -> Content { - match WebfingerResolver::endpoint(resource, rockets) + let wf_resolver = WebfingerResolver; + match wf_resolver + .endpoint(resource, rockets) .await .and_then(|wf| serde_json::to_string(&wf).map_err(|_| ResolverError::NotFound)) { -- 2.38.5 From de6bfca0844468368c728f91e7d726acd5b83f84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mina=20Gali=C4=87?= Date: Sun, 24 May 2020 21:01:16 +0200 Subject: [PATCH 35/46] removed a few unused imports --- plume-common/src/lib.rs | 2 -- src/api/mod.rs | 2 -- 2 files changed, 4 deletions(-) diff --git a/plume-common/src/lib.rs b/plume-common/src/lib.rs index 085f1a42..cd3d941f 100644 --- a/plume-common/src/lib.rs +++ b/plume-common/src/lib.rs @@ -2,9 +2,7 @@ #[macro_use] extern crate activitystreams_derive; -use activitystreams_traits; -use serde; #[macro_use] extern crate shrinkwraprs; #[macro_use] diff --git a/src/api/mod.rs b/src/api/mod.rs index 3ff09276..a46b3654 100644 --- a/src/api/mod.rs +++ b/src/api/mod.rs @@ -2,10 +2,8 @@ use rocket::{ request::{Form, Request}, response::{self, Responder}, - Outcome, }; use rocket_contrib::json::Json; -use serde_json; use plume_common::utils::random_hex; use plume_models::{api_tokens::*, apps::App, users::User, Error, PlumeRocket}; -- 2.38.5 From cb1c26069281435096766ccd2c01f51af1996455 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mina=20Gali=C4=87?= Date: Sun, 24 May 2020 21:03:02 +0200 Subject: [PATCH 36/46] =?UTF-8?q?remove=20an=20experiment=20of=20disabling?= =?UTF-8?q?=20Send=E2=80=A6=20it=20makes=20no=20sense?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/mod.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/api/mod.rs b/src/api/mod.rs index a46b3654..6a3e8136 100644 --- a/src/api/mod.rs +++ b/src/api/mod.rs @@ -64,7 +64,6 @@ pub struct OAuthRequest { } #[get("/oauth2?")] -#[rocket::async_trait(?Send)] pub async fn oauth( query: Form, rockets: PlumeRocket, -- 2.38.5 From 0726375859125eb159977604d285597e35bfb9e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mina=20Gali=C4=87?= Date: Sun, 24 May 2020 21:03:59 +0200 Subject: [PATCH 37/46] add another async (and correctly convert followers_count) --- src/routes/posts.rs | 2 +- src/routes/user.rs | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/routes/posts.rs b/src/routes/posts.rs index e3bc3426..9fc0ad51 100644 --- a/src/routes/posts.rs +++ b/src/routes/posts.rs @@ -401,7 +401,7 @@ pub fn valid_slug(title: &str) -> Result<(), ValidationError> { } #[post("/~//new", data = "")] -pub fn create( +pub async fn create( blog_name: String, form: LenientForm, cl: ContentLen, diff --git a/src/routes/user.rs b/src/routes/user.rs index eca17a68..1606abb1 100644 --- a/src/routes/user.rs +++ b/src/routes/user.rs @@ -277,7 +277,10 @@ pub async fn followers( let conn = &*rockets.conn; let page = page.unwrap_or_default(); let user: User = User::find_by_fqn(&rockets, &name).await?; - let followers_count = user.count_followers(&conn); + let followers_count = match user.count_followers(&conn) { + Ok(num) => num, + Err(_) => 0, + }; Ok(render!(users::followers( &rockets.to_context(), -- 2.38.5 From 07036b5fad2e78e7621db39189242f1753486e6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mina=20Gali=C4=87?= Date: Sun, 24 May 2020 22:03:26 +0200 Subject: [PATCH 38/46] upgrade validator: it now uses types! in macros!! --- Cargo.lock | 22 +++++++++++----------- Cargo.toml | 4 ++-- src/main.rs | 1 + src/routes/comments.rs | 2 +- src/routes/instance.rs | 4 ++-- src/routes/session.rs | 6 +++--- src/routes/user.rs | 8 ++++---- 7 files changed, 24 insertions(+), 23 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4a2aa0a0..cc11b3c4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1536,9 +1536,9 @@ dependencies = [ [[package]] name = "if_chain" -version = "0.1.3" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bac95d9aa0624e7b78187d6fb8ab012b41d9f6f54b1bcb61e61c4845f8357ec" +checksum = "c3360c7b59e5ffa2653671fb74b4741a5d343c03f331c0a4aeda42b5c2b0ec7d" [[package]] name = "indexmap" @@ -3981,31 +3981,31 @@ dependencies = [ [[package]] name = "validator" -version = "0.8.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "236a5eda3df2c877872e98dbc55d497d943792e6405d8fc65bd4f8a5e3b53c99" +checksum = "7ab5990ba09102e1ddc954d294f09b9ea00fc7831a5813bbe84bfdbcae44051e" dependencies = [ - "idna 0.1.5", + "idna 0.2.0", "lazy_static", "regex", "serde", "serde_derive", "serde_json", - "url 1.7.2", + "url 2.1.1", ] [[package]] name = "validator_derive" -version = "0.8.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d360d6f5754972c0c1da14fb3d5580daa31aee566e1e45e2f8d3bf5950ecd3e9" +checksum = "e668e9cd05c5009b833833aa1147e5727b5396ea401f22dd1167618eed4a10c9" dependencies = [ "if_chain", "lazy_static", - "proc-macro2 0.4.30", - "quote 0.6.13", + "proc-macro2 1.0.17", + "quote 1.0.6", "regex", - "syn 0.15.44", + "syn 1.0.23", "validator", ] diff --git a/Cargo.toml b/Cargo.toml index fac4e204..cf0b4e40 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -31,8 +31,8 @@ serde_qs = "0.5" shrinkwraprs = "0.2.1" syntect = "3.3" tokio = "0.2" -validator = "0.8" -validator_derive = "0.8" +validator = "0.10" +validator_derive = "0.10" webfinger = { git = "https://github.com/Plume-org/webfinger", rev = "4e8f12810c4a7ba7a07bbcb722cd265fdff512b6", features = ["async"] } [[bin]] diff --git a/src/main.rs b/src/main.rs index 11f18c3e..5d44e5e7 100644 --- a/src/main.rs +++ b/src/main.rs @@ -9,6 +9,7 @@ extern crate rocket; extern crate serde_json; #[macro_use] extern crate validator_derive; +extern crate validator; use clap::App; use diesel::r2d2::ConnectionManager; diff --git a/src/routes/comments.rs b/src/routes/comments.rs index 88f553c4..ca221054 100644 --- a/src/routes/comments.rs +++ b/src/routes/comments.rs @@ -22,7 +22,7 @@ use plume_models::{ #[derive(Default, FromForm, Debug, Validate)] pub struct NewCommentForm { pub responding_to: Option, - #[validate(length(min = "1", message = "Your comment can't be empty"))] + #[validate(length(min = 1, message = "Your comment can't be empty"))] pub content: String, pub warning: String, } diff --git a/src/routes/instance.rs b/src/routes/instance.rs index 055ac123..74887e48 100644 --- a/src/routes/instance.rs +++ b/src/routes/instance.rs @@ -77,12 +77,12 @@ pub fn admin_mod(_mod: Moderator, rockets: PlumeRocket) -> Ructe { #[derive(Clone, FromForm, Validate)] pub struct InstanceSettingsForm { - #[validate(length(min = "1"))] + #[validate(length(min = 1))] pub name: String, pub open_registrations: bool, pub short_description: SafeString, pub long_description: SafeString, - #[validate(length(min = "1"))] + #[validate(length(min = 1))] pub default_license: String, } diff --git a/src/routes/session.rs b/src/routes/session.rs index 5f65ddf8..5757a1f5 100644 --- a/src/routes/session.rs +++ b/src/routes/session.rs @@ -35,9 +35,9 @@ pub fn new(m: Option, rockets: PlumeRocket) -> Ructe { #[derive(Default, FromForm, Validate)] pub struct LoginForm { - #[validate(length(min = "1", message = "We need an email, or a username to identify you"))] + #[validate(length(min = 1, message = "We need an email, or a username to identify you"))] pub email_or_name: String, - #[validate(length(min = "1", message = "Your password can't be empty"))] + #[validate(length(min = 1, message = "Your password can't be empty"))] pub password: String, } @@ -199,7 +199,7 @@ pub fn password_reset_form(token: String, rockets: PlumeRocket) -> Result Date: Sun, 24 May 2020 22:16:42 +0200 Subject: [PATCH 39/46] replace .map().map_err() with a match so we can .await without worries. plus, it changes nothing about the code, other than making the intent clearer at first sight. --- src/routes/comments.rs | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/routes/comments.rs b/src/routes/comments.rs index ca221054..3aaf4e58 100644 --- a/src/routes/comments.rs +++ b/src/routes/comments.rs @@ -40,8 +40,8 @@ pub async fn create( .await .expect("comments::create: blog error"); let post = Post::find_by_slug(&*conn, &slug, blog.id).expect("comments::create: post error"); - form.validate() - .map(|_| { + match form.validate() { + Ok(_ok) => { let (html, mentions, _hashtags) = utils::md_to_html( form.content.as_ref(), Some( @@ -94,14 +94,14 @@ pub async fn create( .worker .execute(move || broadcast(&user_clone, new_comment, dest)); - Flash::success( + return Ok(Flash::success( Redirect::to( uri!(super::posts::details: blog = blog_name, slug = slug, responding_to = _), ), i18n!(&rockets.intl.catalog, "Your comment has been posted."), - ) - }) - .map_err(|errors| { + )); + } + Err(errors) => { // TODO: de-duplicate this code let comments = CommentTree::from_post(&*conn, &post, Some(&user)) .expect("comments::create: comments error"); @@ -110,7 +110,7 @@ pub async fn create( .responding_to .and_then(|r| Comment::get(&*conn, r).ok()); - render!(posts::details( + return Err(render!(posts::details( &rockets.to_context(), post.clone(), blog, @@ -137,8 +137,9 @@ pub async fn create( post.get_authors(&*conn) .expect("comments::create: authors error")[0] .clone() - )) - }) + ))); + } + } } #[post("/~///comment//delete")] -- 2.38.5 From cf3708e1c61b547187641dbba27024280143a57c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mina=20Gali=C4=87?= Date: Mon, 25 May 2020 13:40:35 +0200 Subject: [PATCH 40/46] make clippy happy by removing unused imports --- build.rs | 2 -- plume-common/src/activity_pub/mod.rs | 1 - plume-common/src/activity_pub/request.rs | 1 - plume-common/src/activity_pub/sign.rs | 3 --- plume-models/src/blogs.rs | 1 - plume-models/src/comments.rs | 1 - plume-models/src/inbox.rs | 1 - plume-models/src/lists.rs | 2 +- plume-models/src/medias.rs | 1 - plume-models/src/posts.rs | 1 - plume-models/src/users.rs | 2 -- 11 files changed, 1 insertion(+), 15 deletions(-) diff --git a/build.rs b/build.rs index 151bd668..e56fc559 100644 --- a/build.rs +++ b/build.rs @@ -1,5 +1,3 @@ -use rsass; - use ructe::Ructe; use std::process::{Command, Stdio}; use std::{ffi::OsStr, fs::*, io::Write, path::*}; diff --git a/plume-common/src/activity_pub/mod.rs b/plume-common/src/activity_pub/mod.rs index cb9d19db..ab5fc066 100644 --- a/plume-common/src/activity_pub/mod.rs +++ b/plume-common/src/activity_pub/mod.rs @@ -7,7 +7,6 @@ use rocket::{ response::{Responder, Response, Result}, Outcome, }; -use serde_json; use self::sign::Signable; diff --git a/plume-common/src/activity_pub/request.rs b/plume-common/src/activity_pub/request.rs index 795c7d11..29201180 100644 --- a/plume-common/src/activity_pub/request.rs +++ b/plume-common/src/activity_pub/request.rs @@ -1,4 +1,3 @@ -use base64; use chrono::{offset::Utc, DateTime}; use openssl::hash::{Hasher, MessageDigest}; use reqwest::header::{HeaderMap, HeaderValue, ACCEPT, CONTENT_TYPE, DATE, USER_AGENT}; diff --git a/plume-common/src/activity_pub/sign.rs b/plume-common/src/activity_pub/sign.rs index 745bb83f..496d4c6d 100644 --- a/plume-common/src/activity_pub/sign.rs +++ b/plume-common/src/activity_pub/sign.rs @@ -1,10 +1,7 @@ use super::request; -use base64; use chrono::{naive::NaiveDateTime, DateTime, Duration, Utc}; -use hex; use openssl::{pkey::PKey, rsa::Rsa, sha::sha256}; use rocket::http::HeaderMap; -use serde_json; /// Returns (public key, private key) pub fn gen_keypair() -> (Vec, Vec) { diff --git a/plume-models/src/blogs.rs b/plume-models/src/blogs.rs index 81c3d8fa..2999e31c 100644 --- a/plume-models/src/blogs.rs +++ b/plume-models/src/blogs.rs @@ -20,7 +20,6 @@ use plume_common::activity_pub::{ inbox::{AsActor, FromId}, sign, ActivityStream, ApSignature, Id, IntoId, PublicKey, Source, }; -use serde_json; use url::Url; use webfinger::*; diff --git a/plume-models/src/comments.rs b/plume-models/src/comments.rs index 99a68518..7bfc2ff3 100644 --- a/plume-models/src/comments.rs +++ b/plume-models/src/comments.rs @@ -25,7 +25,6 @@ use plume_common::{ }, utils, }; -use serde_json; use std::collections::HashSet; #[derive(Queryable, Identifiable, Clone, AsChangeset)] diff --git a/plume-models/src/inbox.rs b/plume-models/src/inbox.rs index 71bc5398..9229f0a4 100644 --- a/plume-models/src/inbox.rs +++ b/plume-models/src/inbox.rs @@ -1,5 +1,4 @@ use activitypub::activity::*; -use serde_json; use crate::{ comments::Comment, diff --git a/plume-models/src/lists.rs b/plume-models/src/lists.rs index 9ca125ce..c24fb5e5 100644 --- a/plume-models/src/lists.rs +++ b/plume-models/src/lists.rs @@ -7,8 +7,8 @@ use crate::{ use diesel::{self, ExpressionMethods, QueryDsl, RunQueryDsl}; use std::convert::{TryFrom, TryInto}; -/// Represent what a list is supposed to store. Represented in database as an integer #[derive(Copy, Clone, Debug, PartialEq, Eq)] +/// Represent what a list is supposed to store. Represented in database as an integer pub enum ListType { User, Blog, diff --git a/plume-models/src/medias.rs b/plume-models/src/medias.rs index c0c60aa8..e0480f4d 100644 --- a/plume-models/src/medias.rs +++ b/plume-models/src/medias.rs @@ -10,7 +10,6 @@ use plume_common::{ activity_pub::{inbox::FromId, Id}, utils::MediaProcessor, }; -use reqwest; use std::{fs, path::Path}; use tokio::prelude::*; diff --git a/plume-models/src/posts.rs b/plume-models/src/posts.rs index 2fcae95d..3a580a4c 100644 --- a/plume-models/src/posts.rs +++ b/plume-models/src/posts.rs @@ -19,7 +19,6 @@ use plume_common::{ }, utils::md_to_html, }; -use serde_json; use std::collections::HashSet; use tokio::runtime::Runtime; diff --git a/plume-models/src/users.rs b/plume-models/src/users.rs index 6f67a809..6135da86 100644 --- a/plume-models/src/users.rs +++ b/plume-models/src/users.rs @@ -11,7 +11,6 @@ use activitypub::{ object::{Image, Tombstone}, Activity, CustomObject, Endpoint, }; -use bcrypt; use chrono::{NaiveDateTime, Utc}; use diesel::{self, BelongingToDsl, ExpressionMethods, OptionalExtension, QueryDsl, RunQueryDsl}; use openssl::{ @@ -37,7 +36,6 @@ use rocket::{ outcome::IntoOutcome, request::{self, FromRequest, Request}, }; -use serde_json; use std::{ cmp::PartialEq, hash::{Hash, Hasher}, -- 2.38.5 From 492bbb1ba6c718c5191276f444a0232842a21f35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mina=20Gali=C4=87?= Date: Mon, 25 May 2020 15:23:55 +0200 Subject: [PATCH 41/46] make clippy happy with a weird quirk wrt return not happy about this lint or rust behaviour where the return statement must not have a `;` --- plume-models/src/db_conn.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plume-models/src/db_conn.rs b/plume-models/src/db_conn.rs index 2eceda88..1a7c7673 100644 --- a/plume-models/src/db_conn.rs +++ b/plume-models/src/db_conn.rs @@ -27,9 +27,9 @@ impl<'a, 'r> FromRequest<'a, 'r> for DbConn { async fn from_request(request: &'a Request<'r>) -> request::Outcome { match DbConn::from_request(request).await { - Outcome::Success(a) => return Outcome::Success(a), - _ => return Outcome::Failure((Status::ServiceUnavailable, ())), - }; + Outcome::Success(a) => Outcome::Success(a), + _ => Outcome::Failure((Status::ServiceUnavailable, ())), + } } } -- 2.38.5 From 7490567a217c85ac3ef41e3d6e6d5a2cc055d2dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mina=20Gali=C4=87?= Date: Mon, 25 May 2020 15:44:32 +0200 Subject: [PATCH 42/46] fix warnings about unused doc comments we do this by making the macro parse and generate doc comments --- plume-models/src/lists.rs | 78 +++++++++++++++++++++++++++++---------- 1 file changed, 59 insertions(+), 19 deletions(-) diff --git a/plume-models/src/lists.rs b/plume-models/src/lists.rs index c24fb5e5..835673fc 100644 --- a/plume-models/src/lists.rs +++ b/plume-models/src/lists.rs @@ -58,7 +58,11 @@ struct NewList<'a> { } macro_rules! func { - (@elem User $id:expr, $value:expr) => { + ( + $(#[$outer:meta])* + @elem User $id:expr, $value:expr + ) => { + $(#[$outer])* NewListElem { list_id: $id, user_id: Some(*$value), @@ -66,7 +70,11 @@ macro_rules! func { word: None, } }; - (@elem Blog $id:expr, $value:expr) => { + ( + $(#[$outer:meta])* + @elem Blog $id:expr, $value:expr + ) => { + $(#[$outer])* NewListElem { list_id: $id, user_id: None, @@ -74,7 +82,11 @@ macro_rules! func { word: None, } }; - (@elem Word $id:expr, $value:expr) => { + ( + $(#[$outer:meta])* + @elem Word $id:expr, $value:expr + ) => { + $(#[$outer])* NewListElem { list_id: $id, user_id: None, @@ -82,7 +94,11 @@ macro_rules! func { word: Some($value), } }; - (@elem Prefix $id:expr, $value:expr) => { + ( + $(#[$outer:meta])* + @elem Prefix $id:expr, $value:expr + ) => { + $(#[$outer])* NewListElem { list_id: $id, user_id: None, @@ -99,7 +115,11 @@ macro_rules! func { (@out_type Word) => { String }; (@out_type Prefix) => { String }; - (add: $fn:ident, $kind:ident) => { + ( + $(#[$outer:meta])* + add: $fn:ident, $kind:ident + ) => { + $(#[$outer])* pub fn $fn(&self, conn: &Connection, vals: &[func!(@in_type $kind)]) -> Result<()> { if self.kind() != ListType::$kind { return Err(Error::InvalidValue); @@ -116,7 +136,11 @@ macro_rules! func { } }; - (list: $fn:ident, $kind:ident, $table:ident) => { + ( + $(#[$outer:meta])* + list: $fn:ident, $kind:ident, $table:ident + ) => { + $(#[$outer])* pub fn $fn(&self, conn: &Connection) -> Result> { if self.kind() != ListType::$kind { return Err(Error::InvalidValue); @@ -132,7 +156,11 @@ macro_rules! func { - (set: $fn:ident, $kind:ident, $add:ident) => { + ( + $(#[$outer:meta])* + set: $fn:ident, $kind:ident, $add:ident + ) => { + $(#[$outer])* pub fn $fn(&self, conn: &Connection, val: &[func!(@in_type $kind)]) -> Result<()> { if self.kind() != ListType::$kind { return Err(Error::InvalidValue); @@ -246,23 +274,35 @@ impl List { private::ListElem::prefix_in_list(conn, self, word) } - /// Insert new users in a list - func! {add: add_users, User} + func! { + /// Insert new users in a list + add: add_users, User + } - /// Insert new blogs in a list - func! {add: add_blogs, Blog} + func! { + /// Insert new blogs in a list + add: add_blogs, Blog + } - /// Insert new words in a list - func! {add: add_words, Word} + func! { + /// Insert new words in a list + add: add_words, Word + } - /// Insert new prefixes in a list - func! {add: add_prefixes, Prefix} + func! { + /// Insert new prefixes in a list + add: add_prefixes, Prefix + } - /// Get all users in the list - func! {list: list_users, User, users} + func! { + /// Get all users in the list + list: list_users, User, users + } - /// Get all blogs in the list - func! {list: list_blogs, Blog, blogs} + func! { + /// Get all blogs in the list + list: list_blogs, Blog, blogs + } /// Get all words in the list pub fn list_words(&self, conn: &Connection) -> Result> { -- 2.38.5 From 25c40adf20967becc55f039bfd7ed7fc06d93ebf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mina=20Gali=C4=87?= Date: Mon, 25 May 2020 19:17:32 +0200 Subject: [PATCH 43/46] yet another dubious clippy warnings fix re returns --- src/routes/comments.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/routes/comments.rs b/src/routes/comments.rs index 3aaf4e58..2a987eab 100644 --- a/src/routes/comments.rs +++ b/src/routes/comments.rs @@ -94,12 +94,12 @@ pub async fn create( .worker .execute(move || broadcast(&user_clone, new_comment, dest)); - return Ok(Flash::success( + Ok(Flash::success( Redirect::to( uri!(super::posts::details: blog = blog_name, slug = slug, responding_to = _), ), i18n!(&rockets.intl.catalog, "Your comment has been posted."), - )); + )) } Err(errors) => { // TODO: de-duplicate this code @@ -110,7 +110,7 @@ pub async fn create( .responding_to .and_then(|r| Comment::get(&*conn, r).ok()); - return Err(render!(posts::details( + Err(render!(posts::details( &rockets.to_context(), post.clone(), blog, @@ -137,7 +137,7 @@ pub async fn create( post.get_authors(&*conn) .expect("comments::create: authors error")[0] .clone() - ))); + ))) } } } -- 2.38.5 From a508a4150cb4835964d4b874b013f4741b033f5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mina=20Gali=C4=87?= Date: Mon, 25 May 2020 19:18:24 +0200 Subject: [PATCH 44/46] remove redundant use statements --- src/routes/instance.rs | 1 - src/routes/user.rs | 1 - 2 files changed, 2 deletions(-) diff --git a/src/routes/instance.rs b/src/routes/instance.rs index 74887e48..a3be8c43 100644 --- a/src/routes/instance.rs +++ b/src/routes/instance.rs @@ -5,7 +5,6 @@ use rocket::{ use rocket_contrib::json::Json; use rocket_i18n::I18n; use scheduled_thread_pool::ScheduledThreadPool; -use serde_json; use std::path::PathBuf; use std::str::FromStr; use validator::{Validate, ValidationErrors}; diff --git a/src/routes/user.rs b/src/routes/user.rs index f3d57970..d55770e8 100644 --- a/src/routes/user.rs +++ b/src/routes/user.rs @@ -9,7 +9,6 @@ use rocket::{ response::{status, Content, Flash, Redirect}, }; use rocket_i18n::I18n; -use serde_json; use std::{borrow::Cow, collections::HashMap}; use validator::{Validate, ValidationError, ValidationErrors}; -- 2.38.5 From 41f97b01f05ef7b82a53002afca65cc014c5b551 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mina=20Gali=C4=87?= Date: Mon, 25 May 2020 20:00:28 +0200 Subject: [PATCH 45/46] unroll filter_map() to easier .await --- src/routes/posts.rs | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/routes/posts.rs b/src/routes/posts.rs index 9fc0ad51..265522b1 100644 --- a/src/routes/posts.rs +++ b/src/routes/posts.rs @@ -1,3 +1,4 @@ +use activitypub::link; use chrono::Utc; use heck::{CamelCase, KebabCase}; use rocket::request::LenientForm; @@ -303,14 +304,16 @@ pub async fn update( .expect("post::update: update error"); if post.published { - post.update_mentions( - &conn, - mentions - .into_iter() - .filter_map(|m| Mention::build_activity(&rockets, &m).await.ok()) - .collect(), - ) - .expect("post::update: mentions error"); + // NOTE: here we unroll a filter_map(), so we can use .await painlessly + let mut filtered_mentions: Vec = vec![]; + for m in mentions.into_iter() { + match Mention::build_activity(&rockets, &m).await { + Ok(m) => filtered_mentions.push(m), + Err(_) => {} + } + } + post.update_mentions(&conn, filtered_mentions) + .expect("post::update: mentions error"); } let tags = form -- 2.38.5 From b596e77f0306c4e701fe153a4e0cf97892c2741a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mina=20Gali=C4=87?= Date: Mon, 25 May 2020 20:00:57 +0200 Subject: [PATCH 46/46] remove redundant use statements --- src/routes/well_known.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/routes/well_known.rs b/src/routes/well_known.rs index bf5a27b2..8d9e9c90 100644 --- a/src/routes/well_known.rs +++ b/src/routes/well_known.rs @@ -1,7 +1,5 @@ -use async_trait; use rocket::http::ContentType; use rocket::response::Content; -use serde_json; use webfinger::*; use plume_models::{ap_url, blogs::Blog, users::User, PlumeRocket, CONFIG}; -- 2.38.5