diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..98547cd9 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,5 @@ +docs +data +Dockerfile +docker-compose.yml +.env diff --git a/Cargo.lock b/Cargo.lock index 9f8595b6..8398ce09 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,14 +1,14 @@ [[package]] name = "activitypub" -version = "0.1.1" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "activitystreams-derive 0.1.0 (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.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.42 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.43 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)", + "activitystreams-types 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.77 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.77 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -16,9 +16,9 @@ name = "activitystreams-derive" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro2 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", + "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.1 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.13.11 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -26,49 +26,49 @@ name = "activitystreams-traits" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "failure 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.42 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)", + "failure 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.77 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "activitystreams-types" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "activitystreams-derive 0.1.0 (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.2 (registry+https://github.com/rust-lang/crates.io-index)", - "mime 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.42 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.43 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)", + "chrono 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "mime 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.77 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.77 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "adler32" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "aho-corasick" -version = "0.6.4" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "memchr 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "ammonia" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "html5ever 0.22.3 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "maplit 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "matches 0.1.6 (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.0 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -100,8 +100,8 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "derive_builder 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", - "failure 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "quick-xml 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)", + "failure 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "quick-xml 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -109,34 +109,34 @@ name = "backtrace" version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "backtrace-sys 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "backtrace-sys 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.5 (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.40 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "backtrace" -version = "0.3.6" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "backtrace-sys 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-demangle 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "backtrace-sys 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-demangle 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "backtrace-sys" -version = "0.1.16" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cc 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.24 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -144,16 +144,16 @@ name = "base64" version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "byteorder 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.2.6 (registry+https://github.com/rust-lang/crates.io-index)", "safemem 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "base64" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "byteorder 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.2.6 (registry+https://github.com/rust-lang/crates.io-index)", "safemem 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -162,11 +162,11 @@ name = "bcrypt" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "base64 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "base64 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)", "blowfish 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "byte-tools 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -181,12 +181,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "bitflags" -version = "1.0.1" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "block-cipher-trait" -version = "0.5.0" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "generic-array 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -197,7 +197,7 @@ name = "blowfish" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "block-cipher-trait 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", + "block-cipher-trait 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", "byte-tools 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "opaque-debug 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -207,7 +207,7 @@ name = "buf_redux" version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "memchr 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)", "safemem 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "slice-deque 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -224,26 +224,26 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "byteorder" -version = "1.2.2" +version = "1.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "bytes" -version = "0.4.7" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "byteorder 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.2.6 (registry+https://github.com/rust-lang/crates.io-index)", "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "cc" -version = "1.0.10" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "cfg-if" -version = "0.1.2" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -259,12 +259,12 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.2" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "num-integer 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.42 (registry+https://github.com/rust-lang/crates.io-index)", + "num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.77 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -278,15 +278,15 @@ name = "cloudabi" version = "0.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "bitflags 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "colored" -version = "1.6.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -300,12 +300,12 @@ dependencies = [ [[package]] name = "cookie" version = "0.11.0-dev" -source = "git+https://github.com/alexcrichton/cookie-rs?rev=0365a18#0365a18e4518e498ac6a508dab6b006add7f162e" +source = "git+https://github.com/alexcrichton/cookie-rs?rev=f191ca50#f191ca50cc91a4bf268b7eb254ebc78b73a94ffc" dependencies = [ - "base64 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", - "ring 0.13.0-alpha5 (registry+https://github.com/rust-lang/crates.io-index)", + "base64 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)", + "ring 0.13.2 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -314,7 +314,7 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "core-foundation-sys 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -322,7 +322,7 @@ name = "core-foundation-sys" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -335,49 +335,38 @@ dependencies = [ [[package]] name = "crossbeam-deque" -version = "0.3.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "crossbeam-epoch 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-epoch 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "crossbeam-epoch" -version = "0.4.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "arrayvec 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.1.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)", ] [[package]] name = "crossbeam-utils" -version = "0.2.2" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "crossbeam-utils" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", -] [[package]] name = "csrf" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "byteorder 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "chrono 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "chrono 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", "data-encoding 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)", @@ -416,17 +405,6 @@ dependencies = [ "backtrace 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "derive-error-chain" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 0.3.6 (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.1 (registry+https://github.com/rust-lang/crates.io-index)", - "syntex_fmt_macros 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "derive_builder" version = "0.5.1" @@ -446,42 +424,76 @@ dependencies = [ "syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "derive_utils" +version = "0.1.0" +source = "git+https://github.com/SergioBenitez/derive-utils?rev=160da392#160da39233d19e6302272d409a0aea14932b25f2" +dependencies = [ + "derive_utils_codegen 0.1.0 (git+https://github.com/SergioBenitez/derive-utils?rev=160da392)", + "derive_utils_core 0.1.0 (git+https://github.com/SergioBenitez/derive-utils?rev=160da392)", +] + +[[package]] +name = "derive_utils_codegen" +version = "0.1.0" +source = "git+https://github.com/SergioBenitez/derive-utils?rev=160da392#160da39233d19e6302272d409a0aea14932b25f2" +dependencies = [ + "derive_utils_core 0.1.0 (git+https://github.com/SergioBenitez/derive-utils?rev=160da392)", + "quote 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "derive_utils_core" +version = "0.1.0" +source = "git+https://github.com/SergioBenitez/derive-utils?rev=160da392#160da39233d19e6302272d409a0aea14932b25f2" +dependencies = [ + "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.4.18 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.14.9 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "deunicode" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "diesel" -version = "1.2.2" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "bitflags 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "byteorder 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "chrono 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "diesel_derives 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "pq-sys 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "chrono 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "diesel_derives 1.3.0 (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.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "diesel_derives" -version = "1.2.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" 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)", - "syn 0.12.15 (registry+https://github.com/rust-lang/crates.io-index)", + "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)", ] [[package]] name = "dotenv" -version = "0.11.0" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "derive-error-chain 0.11.1 (registry+https://github.com/rust-lang/crates.io-index)", - "error-chain 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "failure 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "dtoa" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -548,10 +560,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "encoding_rs" -version = "0.7.2" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -559,26 +571,37 @@ name = "error-chain" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "backtrace 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", + "backtrace 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "failure" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "backtrace 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", - "failure_derive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "backtrace 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "failure_derive 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "failure_derive" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" 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)", - "synstructure 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.4.18 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.14.9 (registry+https://github.com/rust-lang/crates.io-index)", + "synstructure 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "filetime" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cfg-if 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", + "redox_syscall 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -594,12 +617,30 @@ name = "foreign-types-shared" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "fsevent" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "fsevent-sys 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "fsevent-sys" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "fuchsia-zircon" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "bitflags 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -619,7 +660,7 @@ dependencies = [ [[package]] name = "futures" -version = "0.1.21" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -627,7 +668,7 @@ name = "futures-cpupool" version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)", "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -646,7 +687,7 @@ dependencies = [ [[package]] name = "gettext-rs" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "gettext-sys 0.19.8 (registry+https://github.com/rust-lang/crates.io-index)", @@ -658,7 +699,7 @@ name = "gettext-sys" version = "0.19.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cc 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.24 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -677,11 +718,11 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "chomp 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "failure 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "failure_derive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "failure 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "failure_derive 0.1.2 (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.0 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro-hack 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -690,12 +731,12 @@ name = "guid-create" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "byteorder 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.2.6 (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.2 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -705,7 +746,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" 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.0 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro-hack 0.4.1 (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)", ] @@ -724,7 +765,7 @@ name = "heck" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "unicode-segmentation 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-segmentation 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -737,17 +778,17 @@ name = "html5ever" version = "0.22.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", "mac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "markup5ever 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", + "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.1 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.13.11 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "httparse" -version = "1.2.4" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -761,7 +802,7 @@ version = "0.10.13" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "base64 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "httparse 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "httparse 1.3.2 (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)", @@ -770,60 +811,62 @@ dependencies = [ "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.0 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "hyper" -version = "0.11.25" +version = "0.11.27" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "base64 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", - "bytes 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", + "base64 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)", "futures-cpupool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", - "httparse 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "httparse 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "iovec 0.1.2 (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.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "mime 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", + "mime 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", "percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "relay 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-core 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-proto 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-service 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "unicase 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "want 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "hyper-tls" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper 0.11.25 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper 0.11.27 (registry+https://github.com/rust-lang/crates.io-index)", "native-tls 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-core 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-service 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-tls 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "idna" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "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.5 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-normalization 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "if_chain" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -831,12 +874,34 @@ name = "indexmap" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "inotify" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.24 (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.43 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-reactor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "inotify-sys" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "iovec" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -852,28 +917,23 @@ dependencies = [ "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", "plugin 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", "typemap 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "isatty" -version = "0.1.7" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", - "redox_syscall 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", + "redox_syscall 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "itoa" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "itoa" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -897,26 +957,29 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "lazy_static" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "version_check 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "lazycell" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "lazycell" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "libc" -version = "0.2.40" +version = "0.2.43" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "libflate" -version = "0.1.14" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "adler32 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "byteorder 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "adler32 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.2.6 (registry+https://github.com/rust-lang/crates.io-index)", "crc 1.8.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -927,24 +990,33 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "lock_api" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "log" version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "log" -version = "0.4.1" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -957,7 +1029,7 @@ name = "mach" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -970,11 +1042,11 @@ name = "markup5ever" version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "phf 0.7.22 (registry+https://github.com/rust-lang/crates.io-index)", - "phf_codegen 0.7.22 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.42 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.43 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)", + "phf 0.7.23 (registry+https://github.com/rust-lang/crates.io-index)", + "phf_codegen 0.7.23 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.77 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.77 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)", "string_cache 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", "string_cache_codegen 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "tendril 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -982,15 +1054,15 @@ dependencies = [ [[package]] name = "matches" -version = "0.1.6" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "memchr" -version = "2.0.1" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1008,7 +1080,7 @@ dependencies = [ [[package]] name = "mime" -version = "0.3.5" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "unicase 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1020,47 +1092,68 @@ version = "1.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "mime 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", - "phf 0.7.22 (registry+https://github.com/rust-lang/crates.io-index)", - "phf_codegen 0.7.22 (registry+https://github.com/rust-lang/crates.io-index)", + "phf 0.7.23 (registry+https://github.com/rust-lang/crates.io-index)", + "phf_codegen 0.7.23 (registry+https://github.com/rust-lang/crates.io-index)", "unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "mime_guess" -version = "2.0.0-alpha.4" +version = "2.0.0-alpha.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "mime 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", - "phf 0.7.22 (registry+https://github.com/rust-lang/crates.io-index)", - "phf_codegen 0.7.22 (registry+https://github.com/rust-lang/crates.io-index)", + "mime 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "phf 0.7.23 (registry+https://github.com/rust-lang/crates.io-index)", + "phf_codegen 0.7.23 (registry+https://github.com/rust-lang/crates.io-index)", "unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "mio" -version = "0.6.14" +version = "0.6.16" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "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.2 (registry+https://github.com/rust-lang/crates.io-index)", "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "lazycell 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "lazycell 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.5 (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.32 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.0 (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.1 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "mio-extras" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "lazycell 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", + "slab 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "mio-uds" +version = "0.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "miow" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "net2 0.2.32 (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)", ] @@ -1076,15 +1169,15 @@ version = "0.15.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "buf_redux 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", - "httparse 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "httparse 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "hyper 0.10.13 (registry+https://github.com/rust-lang/crates.io-index)", "iron 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.5 (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.6 (registry+https://github.com/rust-lang/crates.io-index)", "nickel 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)", "quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", "safemem 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", "tiny_http 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1106,9 +1199,9 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", "openssl 0.9.24 (registry+https://github.com/rust-lang/crates.io-index)", - "schannel 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "schannel 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", "security-framework 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", "security-framework-sys 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", "tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1116,12 +1209,12 @@ dependencies = [ [[package]] name = "net2" -version = "0.2.32" +version = "0.2.33" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1139,16 +1232,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "groupable 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "hyper 0.10.13 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", "modifier 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "mustache 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", "plugin 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", "typemap 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1157,16 +1250,34 @@ version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] -name = "num-integer" -version = "0.1.36" +name = "notify" +version = "4.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "num-traits 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "filetime 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "fsevent 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)", + "fsevent-sys 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "inotify 0.6.1 (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.43 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", + "mio-extras 2.0.5 (registry+https://github.com/rust-lang/crates.io-index)", + "walkdir 2.2.5 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "num-integer" +version = "0.1.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "num-traits 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "num-traits" -version = "0.2.2" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -1174,7 +1285,7 @@ name = "num_cpus" version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1189,51 +1300,80 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bitflags 0.9.1 (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.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", - "openssl-sys 0.9.28 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", + "openssl-sys 0.9.35 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "openssl" -version = "0.10.6" +version = "0.10.11" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "bitflags 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.5 (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.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", - "openssl-sys 0.9.28 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", + "openssl-sys 0.9.35 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "openssl-sys" -version = "0.9.28" +version = "0.9.35" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cc 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", - "pkg-config 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)", - "vcpkg 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.24 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", + "pkg-config 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", + "vcpkg 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "owning_ref" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "parking_lot" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "lock_api 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "parking_lot_core" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", + "smallvec 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "pear" version = "0.1.0" -source = "git+http://github.com/SergioBenitez/Pear?rev=54667ae#54667aefef084f2411e86392402a955770f1e7aa" +source = "git+http://github.com/SergioBenitez/Pear?rev=b475140#b4751403ed9a06bc813b662334f0a555eccae6a0" dependencies = [ - "pear_codegen 0.1.0 (git+http://github.com/SergioBenitez/Pear?rev=54667ae)", + "pear_codegen 0.1.0 (git+http://github.com/SergioBenitez/Pear?rev=b475140)", ] [[package]] name = "pear_codegen" version = "0.1.0" -source = "git+http://github.com/SergioBenitez/Pear?rev=54667ae#54667aefef084f2411e86392402a955770f1e7aa" +source = "git+http://github.com/SergioBenitez/Pear?rev=b475140#b4751403ed9a06bc813b662334f0a555eccae6a0" dependencies = [ - "proc-macro2 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.14.2 (registry+https://github.com/rust-lang/crates.io-index)", - "version_check 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.4.18 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.14.9 (registry+https://github.com/rust-lang/crates.io-index)", + "version_check 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "yansi 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1249,7 +1389,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "pest_derive" -version = "1.0.7" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "pest 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1259,42 +1399,42 @@ dependencies = [ [[package]] name = "phf" -version = "0.7.22" +version = "0.7.23" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "phf_shared 0.7.22 (registry+https://github.com/rust-lang/crates.io-index)", + "phf_shared 0.7.23 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "phf_codegen" -version = "0.7.22" +version = "0.7.23" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "phf_generator 0.7.22 (registry+https://github.com/rust-lang/crates.io-index)", - "phf_shared 0.7.22 (registry+https://github.com/rust-lang/crates.io-index)", + "phf_generator 0.7.23 (registry+https://github.com/rust-lang/crates.io-index)", + "phf_shared 0.7.23 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "phf_generator" -version = "0.7.22" +version = "0.7.23" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "phf_shared 0.7.22 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "phf_shared 0.7.23 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "phf_shared" -version = "0.7.22" +version = "0.7.23" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "siphasher 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "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)", ] [[package]] name = "pkg-config" -version = "0.3.11" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -1309,29 +1449,31 @@ dependencies = [ name = "plume" version = "0.1.0" dependencies = [ - "activitypub 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "activitypub 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "atom_syndication 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "colored 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "diesel 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "dotenv 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", - "failure 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "gettext-rs 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "chrono 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "colored 1.6.1 (registry+https://github.com/rust-lang/crates.io-index)", + "diesel 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "dotenv 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)", + "failure 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "gettext-rs 0.4.1 (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.0 (registry+https://github.com/rust-lang/crates.io-index)", "multipart 0.15.3 (registry+https://github.com/rust-lang/crates.io-index)", "plume-common 0.1.0", "plume-models 0.1.0", - "rocket 0.4.0-dev (git+https://github.com/SergioBenitez/Rocket?rev=df7111143e466c18d1f56377a8d9530a5a306aba)", - "rocket_codegen 0.4.0-dev (git+https://github.com/SergioBenitez/Rocket?rev=df7111143e466c18d1f56377a8d9530a5a306aba)", - "rocket_contrib 0.4.0-dev (git+https://github.com/SergioBenitez/Rocket?rev=df7111143e466c18d1f56377a8d9530a5a306aba)", - "rocket_csrf 0.1.0 (git+https://github.com/fdb-hiroshima/rocket_csrf?rev=896fcaf14bd85b3f8266c0201e5f61937d05aec9)", - "rocket_i18n 0.1.1 (git+https://github.com/BaptisteGelez/rocket_i18n?rev=5b4225d5bed5769482dc926a7e6d6b79f1217be6)", + "rocket 0.4.0-dev (git+https://github.com/SergioBenitez/Rocket?rev=55459db7732b9a240826a5c120c650f87e3372ce)", + "rocket_codegen 0.4.0-dev (git+https://github.com/SergioBenitez/Rocket?rev=55459db7732b9a240826a5c120c650f87e3372ce)", + "rocket_contrib 0.4.0-dev (git+https://github.com/SergioBenitez/Rocket?rev=55459db7732b9a240826a5c120c650f87e3372ce)", + "rocket_csrf 0.1.0 (git+https://github.com/fdb-hiroshima/rocket_csrf?rev=5d23ba4c6c2ee4c41040d428d24344db3d29997f)", + "rocket_i18n 0.1.1 (git+https://github.com/BaptisteGelez/rocket_i18n?rev=75a3bfd7b847324c078a355a7f101f8241a9f59b)", "rpassword 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.42 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.43 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)", - "validator 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "validator_derive 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.77 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.77 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)", + "tera 0.11.7 (registry+https://github.com/rust-lang/crates.io-index)", + "validator 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "validator_derive 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", "webfinger 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "workerpool 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1340,55 +1482,55 @@ dependencies = [ name = "plume-common" version = "0.1.0" dependencies = [ - "activitypub 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "activitypub 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "activitystreams-derive 0.1.0 (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.9.1 (registry+https://github.com/rust-lang/crates.io-index)", - "chrono 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "failure 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "failure_derive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "gettext-rs 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "base64 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)", + "chrono 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "failure 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "failure_derive 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "gettext-rs 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "heck 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "hex 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper 0.11.25 (registry+https://github.com/rust-lang/crates.io-index)", - "openssl 0.10.6 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper 0.11.27 (registry+https://github.com/rust-lang/crates.io-index)", + "openssl 0.10.11 (registry+https://github.com/rust-lang/crates.io-index)", "pulldown-cmark 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "reqwest 0.8.5 (registry+https://github.com/rust-lang/crates.io-index)", - "rocket 0.4.0-dev (git+https://github.com/SergioBenitez/Rocket?rev=df7111143e466c18d1f56377a8d9530a5a306aba)", - "serde 1.0.42 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.43 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)", + "reqwest 0.8.8 (registry+https://github.com/rust-lang/crates.io-index)", + "rocket 0.4.0-dev (git+https://github.com/SergioBenitez/Rocket?rev=55459db7732b9a240826a5c120c650f87e3372ce)", + "serde 1.0.77 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.77 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "plume-models" version = "0.1.0" dependencies = [ - "activitypub 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "ammonia 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "activitypub 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "ammonia 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "bcrypt 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "chrono 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "diesel 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "chrono 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "diesel 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "heck 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "openssl 0.10.6 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "openssl 0.10.11 (registry+https://github.com/rust-lang/crates.io-index)", "plume-common 0.1.0", - "reqwest 0.8.5 (registry+https://github.com/rust-lang/crates.io-index)", - "rocket 0.4.0-dev (git+https://github.com/SergioBenitez/Rocket?rev=df7111143e466c18d1f56377a8d9530a5a306aba)", - "serde 1.0.42 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.43 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "reqwest 0.8.8 (registry+https://github.com/rust-lang/crates.io-index)", + "rocket 0.4.0-dev (git+https://github.com/SergioBenitez/Rocket?rev=55459db7732b9a240826a5c120c650f87e3372ce)", + "serde 1.0.77 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.77 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)", "webfinger 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "pq-sys" -version = "0.4.4" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "vcpkg 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "vcpkg 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1398,15 +1540,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "proc-macro-hack" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro-hack-impl 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro-hack-impl 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "proc-macro-hack-impl" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -1419,7 +1561,7 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "0.3.6" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1427,7 +1569,7 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "0.4.6" +version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1448,12 +1590,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "quick-xml" -version = "0.12.1" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "encoding_rs 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", - "failure 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "memchr 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "encoding_rs 0.8.6 (registry+https://github.com/rust-lang/crates.io-index)", + "failure 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1474,15 +1617,15 @@ name = "quote" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro2 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "quote" -version = "0.6.3" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro2 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.4.18 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1491,7 +1634,7 @@ version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "antidote 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", "scheduled-thread-pool 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1501,30 +1644,30 @@ version = "0.3.22" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "rand" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "rand" -version = "0.5.2" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", "rand_core 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1534,36 +1677,36 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "redox_syscall" -version = "0.1.37" +version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "regex" -version = "0.2.10" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "aho-corasick 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", - "memchr 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "regex-syntax 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", - "thread_local 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", - "utf8-ranges 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "aho-corasick 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "regex-syntax 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)", + "thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", + "utf8-ranges 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "regex" -version = "1.0.1" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "aho-corasick 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", - "memchr 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "regex-syntax 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", - "thread_local 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", - "utf8-ranges 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "aho-corasick 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "regex-syntax 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", + "thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", + "utf8-ranges 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "regex-syntax" -version = "0.5.5" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "ucd-util 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1571,7 +1714,7 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "ucd-util 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1582,7 +1725,7 @@ name = "relay" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1590,133 +1733,136 @@ name = "remove_dir_all" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "reqwest" -version = "0.8.5" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "bytes 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", - "encoding_rs 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper 0.11.25 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper-tls 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "libflate 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "mime_guess 2.0.0-alpha.4 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", + "encoding_rs 0.8.6 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper 0.11.27 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper-tls 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libflate 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", + "mime_guess 2.0.0-alpha.6 (registry+https://github.com/rust-lang/crates.io-index)", "native-tls 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.42 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_urlencoded 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.77 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_urlencoded 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-core 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-tls 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "uuid 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "uuid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "ring" -version = "0.13.0-alpha5" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cc 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.24 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", "untrusted 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "rocket" version = "0.4.0-dev" -source = "git+https://github.com/SergioBenitez/Rocket?rev=df7111143e466c18d1f56377a8d9530a5a306aba#df7111143e466c18d1f56377a8d9530a5a306aba" +source = "git+https://github.com/SergioBenitez/Rocket?rev=55459db7732b9a240826a5c120c650f87e3372ce#55459db7732b9a240826a5c120c650f87e3372ce" dependencies = [ - "base64 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", - "isatty 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "memchr 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "base64 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)", + "isatty 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)", "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "pear 0.1.0 (git+http://github.com/SergioBenitez/Pear?rev=54667ae)", - "rocket_codegen_next 0.4.0-dev (git+https://github.com/SergioBenitez/Rocket?rev=df7111143e466c18d1f56377a8d9530a5a306aba)", - "rocket_http 0.4.0-dev (git+https://github.com/SergioBenitez/Rocket?rev=df7111143e466c18d1f56377a8d9530a5a306aba)", + "pear 0.1.0 (git+http://github.com/SergioBenitez/Pear?rev=b475140)", + "rocket_codegen_next 0.4.0-dev (git+https://github.com/SergioBenitez/Rocket?rev=55459db7732b9a240826a5c120c650f87e3372ce)", + "rocket_http 0.4.0-dev (git+https://github.com/SergioBenitez/Rocket?rev=55459db7732b9a240826a5c120c650f87e3372ce)", "state 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", "toml 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "version_check 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "version_check 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "yansi 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "rocket_codegen" version = "0.4.0-dev" -source = "git+https://github.com/SergioBenitez/Rocket?rev=df7111143e466c18d1f56377a8d9530a5a306aba#df7111143e466c18d1f56377a8d9530a5a306aba" +source = "git+https://github.com/SergioBenitez/Rocket?rev=55459db7732b9a240826a5c120c650f87e3372ce#55459db7732b9a240826a5c120c650f87e3372ce" dependencies = [ "indexmap 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rocket_http 0.4.0-dev (git+https://github.com/SergioBenitez/Rocket?rev=df7111143e466c18d1f56377a8d9530a5a306aba)", - "version_check 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "rocket_http 0.4.0-dev (git+https://github.com/SergioBenitez/Rocket?rev=55459db7732b9a240826a5c120c650f87e3372ce)", + "version_check 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "yansi 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "rocket_codegen_next" version = "0.4.0-dev" -source = "git+https://github.com/SergioBenitez/Rocket?rev=df7111143e466c18d1f56377a8d9530a5a306aba#df7111143e466c18d1f56377a8d9530a5a306aba" +source = "git+https://github.com/SergioBenitez/Rocket?rev=55459db7732b9a240826a5c120c650f87e3372ce#55459db7732b9a240826a5c120c650f87e3372ce" dependencies = [ - "proc-macro2 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.14.2 (registry+https://github.com/rust-lang/crates.io-index)", + "derive_utils 0.1.0 (git+https://github.com/SergioBenitez/derive-utils?rev=160da392)", + "quote 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)", + "rocket_http 0.4.0-dev (git+https://github.com/SergioBenitez/Rocket?rev=55459db7732b9a240826a5c120c650f87e3372ce)", ] [[package]] name = "rocket_contrib" version = "0.4.0-dev" -source = "git+https://github.com/SergioBenitez/Rocket?rev=df7111143e466c18d1f56377a8d9530a5a306aba#df7111143e466c18d1f56377a8d9530a5a306aba" +source = "git+https://github.com/SergioBenitez/Rocket?rev=55459db7732b9a240826a5c120c650f87e3372ce#55459db7732b9a240826a5c120c650f87e3372ce" dependencies = [ "glob 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rocket 0.4.0-dev (git+https://github.com/SergioBenitez/Rocket?rev=df7111143e466c18d1f56377a8d9530a5a306aba)", - "serde 1.0.42 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", + "notify 4.0.6 (registry+https://github.com/rust-lang/crates.io-index)", + "rocket 0.4.0-dev (git+https://github.com/SergioBenitez/Rocket?rev=55459db7732b9a240826a5c120c650f87e3372ce)", + "serde 1.0.77 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)", "tera 0.11.7 (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=896fcaf14bd85b3f8266c0201e5f61937d05aec9#896fcaf14bd85b3f8266c0201e5f61937d05aec9" +source = "git+https://github.com/fdb-hiroshima/rocket_csrf?rev=5d23ba4c6c2ee4c41040d428d24344db3d29997f#5d23ba4c6c2ee4c41040d428d24344db3d29997f" dependencies = [ "csrf 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "data-encoding 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rocket 0.4.0-dev (git+https://github.com/SergioBenitez/Rocket?rev=df7111143e466c18d1f56377a8d9530a5a306aba)", - "serde 1.0.42 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", + "rocket 0.4.0-dev (git+https://github.com/SergioBenitez/Rocket?rev=55459db7732b9a240826a5c120c650f87e3372ce)", + "rocket_codegen 0.4.0-dev (git+https://github.com/SergioBenitez/Rocket?rev=55459db7732b9a240826a5c120c650f87e3372ce)", + "serde 1.0.77 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "rocket_http" version = "0.4.0-dev" -source = "git+https://github.com/SergioBenitez/Rocket?rev=df7111143e466c18d1f56377a8d9530a5a306aba#df7111143e466c18d1f56377a8d9530a5a306aba" +source = "git+https://github.com/SergioBenitez/Rocket?rev=55459db7732b9a240826a5c120c650f87e3372ce#55459db7732b9a240826a5c120c650f87e3372ce" dependencies = [ - "cookie 0.11.0-dev (git+https://github.com/alexcrichton/cookie-rs?rev=0365a18)", + "cookie 0.11.0-dev (git+https://github.com/alexcrichton/cookie-rs?rev=f191ca50)", "hyper 0.10.13 (registry+https://github.com/rust-lang/crates.io-index)", "indexmap 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "pear 0.1.0 (git+http://github.com/SergioBenitez/Pear?rev=54667ae)", + "pear 0.1.0 (git+http://github.com/SergioBenitez/Pear?rev=b475140)", "percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "smallvec 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", + "smallvec 0.6.5 (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.40 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "rocket_i18n" version = "0.1.1" -source = "git+https://github.com/BaptisteGelez/rocket_i18n?rev=5b4225d5bed5769482dc926a7e6d6b79f1217be6#5b4225d5bed5769482dc926a7e6d6b79f1217be6" +source = "git+https://github.com/BaptisteGelez/rocket_i18n?rev=75a3bfd7b847324c078a355a7f101f8241a9f59b#75a3bfd7b847324c078a355a7f101f8241a9f59b" dependencies = [ - "gettext-rs 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rocket 0.4.0-dev (git+https://github.com/SergioBenitez/Rocket?rev=df7111143e466c18d1f56377a8d9530a5a306aba)", - "serde_json 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)", + "gettext-rs 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rocket 0.4.0-dev (git+https://github.com/SergioBenitez/Rocket?rev=55459db7732b9a240826a5c120c650f87e3372ce)", + "serde_json 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)", "tera 0.11.7 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1726,7 +1872,7 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1736,7 +1882,7 @@ version = "0.2.36" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1744,7 +1890,7 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.7" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -1752,6 +1898,11 @@ name = "rustc-serialize" version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "ryu" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "safemem" version = "0.2.0" @@ -1763,12 +1914,20 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] -name = "schannel" -version = "0.1.12" +name = "same-file" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-util 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "schannel" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1781,7 +1940,7 @@ dependencies = [ [[package]] name = "scoped-tls" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -1796,7 +1955,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "core-foundation 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "core-foundation-sys 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", "security-framework-sys 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1806,58 +1965,48 @@ version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "core-foundation-sys 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "serde" -version = "1.0.42" +version = "1.0.77" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "serde_derive" -version = "1.0.43" +version = "1.0.77" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro2 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive_internals 0.23.1 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "serde_derive_internals" -version = "0.23.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.4.18 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.15.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "serde_json" -version = "1.0.16" +version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "dtoa 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "itoa 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.42 (registry+https://github.com/rust-lang/crates.io-index)", + "itoa 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "ryu 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.77 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "serde_urlencoded" -version = "0.5.1" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "dtoa 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "itoa 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.42 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "dtoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "itoa 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.77 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "siphasher" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -1867,7 +2016,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "slab" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -1875,17 +2024,17 @@ name = "slice-deque" version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", "mach 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "slug" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "unidecode 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "deunicode 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1895,12 +2044,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "smallvec" -version = "0.6.3" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "stable_deref_trait" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "state" version = "0.4.1" @@ -1911,11 +2065,11 @@ name = "string_cache" version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "new_debug_unreachable 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "phf_shared 0.7.22 (registry+https://github.com/rust-lang/crates.io-index)", + "phf_shared 0.7.23 (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.42 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.77 (registry+https://github.com/rust-lang/crates.io-index)", "string_cache_codegen 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "string_cache_shared 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1925,9 +2079,9 @@ name = "string_cache_codegen" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "phf_generator 0.7.22 (registry+https://github.com/rust-lang/crates.io-index)", - "phf_shared 0.7.22 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", + "phf_generator 0.7.23 (registry+https://github.com/rust-lang/crates.io-index)", + "phf_shared 0.7.23 (registry+https://github.com/rust-lang/crates.io-index)", + "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)", "string_cache_shared 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1959,21 +2113,31 @@ dependencies = [ [[package]] name = "syn" -version = "0.13.1" +version = "0.13.11" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro2 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", + "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)", ] [[package]] name = "syn" -version = "0.14.2" +version = "0.14.9" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro2 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.4.18 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "syn" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.18 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)", "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1987,18 +2151,12 @@ dependencies = [ [[package]] name = "synstructure" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -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)", -] - -[[package]] -name = "syntex_fmt_macros" -version = "0.5.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ + "proc-macro2 0.4.18 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.14.9 (registry+https://github.com/rust-lang/crates.io-index)", "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2012,7 +2170,7 @@ name = "tempdir" version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", "remove_dir_all 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2023,7 +2181,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" 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.2 (registry+https://github.com/rust-lang/crates.io-index)", + "utf-8 0.7.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2031,27 +2189,26 @@ name = "tera" version = "0.11.7" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "chrono 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "chrono 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", "error-chain 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", "glob 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", "humansize 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "pest 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "pest_derive 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.42 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)", - "slug 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "pest_derive 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.77 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)", + "slug 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "thread_local" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2059,9 +2216,9 @@ name = "time" version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", - "redox_syscall 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", + "redox_syscall 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2070,27 +2227,41 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "ascii 0.8.7 (registry+https://github.com/rust-lang/crates.io-index)", - "chrono 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "chrono 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", "chunked_transfer 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "encoding 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "tokio" -version = "0.1.5" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.14 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-tcp 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-threadpool 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-timer 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-udp 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-codec 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-current-thread 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-fs 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-reactor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-tcp 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-threadpool 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-timer 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-udp 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-uds 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-codec" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2098,35 +2269,54 @@ name = "tokio-core" version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "bytes 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)", "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.14 (registry+https://github.com/rust-lang/crates.io-index)", - "scoped-tls 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-timer 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", + "scoped-tls 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-reactor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-timer 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-current-thread" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "futures 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "tokio-executor" -version = "0.1.2" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-fs" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "futures 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-threadpool 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "tokio-io" -version = "0.1.6" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "bytes 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2134,29 +2324,33 @@ name = "tokio-proto" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "net2 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)", + "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)", "slab 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "take 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-core 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-service 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "tokio-reactor" -version = "0.1.1" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.14 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", + "slab 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2164,42 +2358,45 @@ name = "tokio-service" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "tokio-tcp" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "bytes 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)", "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.14 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-reactor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "tokio-threadpool" -version = "0.1.2" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "crossbeam-deque 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-deque 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "tokio-timer" -version = "0.2.1" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)", + "slab 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2207,23 +2404,40 @@ name = "tokio-tls" version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)", "native-tls 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-core 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "tokio-udp" -version = "0.1.0" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "bytes 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.14 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-codec 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-reactor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-uds" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)", + "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", + "mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-reactor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2231,7 +2445,7 @@ name = "toml" version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "serde 1.0.42 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.77 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2239,12 +2453,17 @@ name = "traitobject" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "try-lock" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "twoway" version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "memchr 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2275,7 +2494,7 @@ name = "unicase" version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "version_check 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "version_check 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2283,7 +2502,7 @@ name = "unicase" version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "version_check 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "version_check 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2291,17 +2510,17 @@ name = "unicode-bidi" version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "unicode-normalization" -version = "0.1.5" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "unicode-segmentation" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -2314,11 +2533,6 @@ name = "unicode-xid" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "unidecode" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "unreachable" version = "1.0.0" @@ -2342,66 +2556,69 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "url" -version = "1.7.0" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "idna 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "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)", ] [[package]] name = "utf-8" -version = "0.7.2" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "utf8-ranges" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "uuid" -version = "0.5.1" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "validator" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "idna 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.42 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.43 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.77 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.77 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "validator_derive" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "if_chain 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.14.2 (registry+https://github.com/rust-lang/crates.io-index)", - "validator 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "if_chain 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.4.18 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.14.9 (registry+https://github.com/rust-lang/crates.io-index)", + "validator 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "vcpkg" -version = "0.2.3" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "version_check" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -2409,15 +2626,35 @@ name = "void" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "walkdir" +version = "2.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "same-file 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-util 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "want" +version = "0.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "futures 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", + "try-lock 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "webfinger" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "reqwest 0.8.5 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.42 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.43 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)", + "reqwest 0.8.8 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.77 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.77 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2427,7 +2664,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "winapi" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2444,6 +2681,14 @@ name = "winapi-i686-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "winapi-util" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" @@ -2472,63 +2717,65 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" [metadata] -"checksum activitypub 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ab73fd715ad1e74fb44e4b2356db91a158793a2472a0c19e9002ab3184773d87" +"checksum activitypub 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "0ee1a18ca5e4056ca90c7698ba0505ecc91454e8e6b57d3572ad5675979bfcdd" "checksum activitystreams-derive 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "48db826c588a009960d74530e7c215e21fae130f585362504dc6b6357e5ce86b" "checksum activitystreams-traits 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "670ef03168e704b0cae242e7a5d8b40506772b339687e01a3496fc4afe2e8542" -"checksum activitystreams-types 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "14806b3c88c439e1670fdc99d9b18bf1a47d4fa7152fe8a3bd7da08b6ced3e95" -"checksum adler32 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6cbd0b9af8587c72beadc9f72d35b9fbb070982c9e6203e46e93f10df25f8f45" -"checksum aho-corasick 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "d6531d44de723825aa81398a6415283229725a00fa30713812ab9323faa82fc4" -"checksum ammonia 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fd4c682378117e4186a492b2252b9537990e1617f44aed9788b9a1149de45477" +"checksum activitystreams-types 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "71a093765d662b91305b95c2ff51a036e1b4c830d3c643679f0e986e200a1368" +"checksum adler32 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7e522997b529f05601e05166c07ed17789691f562762c7f3b987263d2dedee5c" +"checksum aho-corasick 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)" = "68f56c7353e5a9547cbd76ed90f7bb5ffc3ba09d4ea9bd1d8c06c8b1142eeb5a" +"checksum ammonia 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a8b93ecb80665873703bf3b0a77f369c96b183d8e0afaf30a3ff5ff07dfc6409" "checksum antidote 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "34fde25430d87a9388dadbe6e34d7f72a462c8b43ac8d309b42b0a8505d7e2a5" "checksum array_tool 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8f8cb5d814eb646a863c4f24978cff2880c4be96ad8cde2c0f0678732902e271" "checksum arrayvec 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)" = "a1e964f9e24d588183fcb43503abda40d288c8657dfc27311516ce2f05675aef" "checksum ascii 0.8.7 (registry+https://github.com/rust-lang/crates.io-index)" = "97be891acc47ca214468e09425d02cef3af2c94d0d82081cd02061f996802f14" "checksum atom_syndication 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0a9a7ab83635ff7a3b04856f4ad95324dccc9b947ab1e790fc5c769ee6d6f60c" "checksum backtrace 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "150ae7828afa7afb6d474f909d64072d21de1f3365b6e8ad8029bf7b1c6350a0" -"checksum backtrace 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "ebbe525f66f42d207968308ee86bc2dd60aa5fab535b22e616323a173d097d8e" -"checksum backtrace-sys 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "44585761d6161b0f57afc49482ab6bd067e4edef48c12a152c237eb0203f7661" +"checksum backtrace 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "89a47830402e9981c5c41223151efcced65a0510c13097c769cede7efb34782a" +"checksum backtrace-sys 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)" = "c66d56ac8dabd07f6aacdaf633f4b8262f5b3601a810a0dcddffd5c22c69daa0" "checksum base64 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "96434f987501f0ed4eb336a411e0631ecd1afa11574fe148587adc4ff96143c9" -"checksum base64 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9263aa6a38da271eec5c91a83ce1e800f093c8535788d403d626d8d5c3f8f007" +"checksum base64 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)" = "85415d2594767338a74a30c1d370b2f3262ec1b4ed2d7bba5b3faf4de40467d9" "checksum bcrypt 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1a1512813db09170b44a00870b58421876d797b77b085c5205a24db90905f758" "checksum bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "aad18937a628ec6abcd26d1489012cc0e18c21798210f491af69ded9b881106d" "checksum bitflags 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4efd02e230a02e18f92fc2735f44597385ed02ad8f831e7c1c1156ee5e1ab3a5" -"checksum bitflags 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b3c30d3802dfb7281680d6285f2ccdaa8c2d8fee41f93805dba5c4cf50dc23cf" -"checksum block-cipher-trait 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d6136d803280ae3532efa36114335255ea94f3d75d735ddedd66b0d7cd30bad3" +"checksum bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "228047a76f468627ca71776ecdebd732a3423081fcf5125585bcd7c49886ce12" +"checksum block-cipher-trait 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "370424437b9459f3dfd68428ed9376ddfe03d8b70ede29cc533b3557df186ab4" "checksum blowfish 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "95ede07672d9f4144c578439aa352604ec5c67a80c940fe8d382ddbeeeb3c6d8" "checksum buf_redux 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "20c6687a26c9ce967594b78038c06139a0d3a5b3005d16572284d543924a01aa" "checksum build_const 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "39092a32794787acd8525ee150305ff051b0aa6cc2abaf193924f5ab05425f39" "checksum byte-tools 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "560c32574a12a89ecd91f5e742165893f86e3ab98d21f8ea548658eb9eef5f40" -"checksum byteorder 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "73b5bdfe7ee3ad0b99c9801d58807a9dbc9e09196365b0203853b99889ab3c87" -"checksum bytes 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)" = "2f1d50c876fb7545f5f289cd8b2aee3f359d073ae819eed5d6373638e2c61e59" -"checksum cc 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)" = "8b9d2900f78631a5876dc5d6c9033ede027253efcd33dd36b1309fc6cab97ee0" -"checksum cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d4c819a1287eb618df47cc647173c5c4c66ba19d888a6e50d605672aed3140de" +"checksum byteorder 1.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "90492c5858dd7d2e78691cfb89f90d273a2800fc11d98f60786e5d87e2f83781" +"checksum bytes 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "0ce55bd354b095246fc34caf4e9e242f5297a7fd938b090cadfea6eee614aa62" +"checksum cc 1.0.24 (registry+https://github.com/rust-lang/crates.io-index)" = "70f2a88c2e69ceee91c209d8ef25b81fc1a65f42c7f14dfd59d1fed189e514d1" +"checksum cfg-if 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "0c4e7bb64a8ebb0d856483e1e682ea3422f883c5f5615a90d51a2c82fe87fdd3" "checksum chomp 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9f74ad218e66339b11fd23f693fb8f1d621e80ba6ac218297be26073365d163d" -"checksum chrono 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1cce36c92cb605414e9b824f866f5babe0a0368e39ea07393b9b63cf3844c0e6" +"checksum chrono 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "45912881121cb26fad7c38c17ba7daa18764771836b34fab7d3fbd93ed633878" "checksum chunked_transfer 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "498d20a7aaf62625b9bf26e637cf7736417cde1d0c99f1d04d1170229a85cf87" "checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" -"checksum colored 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b0aa3473e85a3161b59845d6096b289bb577874cafeaf75ea1b1beaa6572c7fc" +"checksum colored 1.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dc0a60679001b62fb628c4da80e574b9645ab4646056d7c9018885efffe45533" "checksum conv 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "78ff10625fd0ac447827aa30ea8b861fead473bb60aeb73af6c1c58caf0d1299" -"checksum cookie 0.11.0-dev (git+https://github.com/alexcrichton/cookie-rs?rev=0365a18)" = "" +"checksum cookie 0.11.0-dev (git+https://github.com/alexcrichton/cookie-rs?rev=f191ca50)" = "" "checksum core-foundation 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "25bfd746d203017f7d5cbd31ee5d8e17f94b6521c7af77ece6c9e4b2d4b16c67" "checksum core-foundation-sys 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "065a5d7ffdcbc8fa145d6f0746f3555025b9097a9e9cda59f7467abae670c78d" "checksum crc 1.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d663548de7f5cca343f1e0a48d14dcfb0e9eb4e079ec58883b7251539fa10aeb" -"checksum crossbeam-deque 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c1bdc73742c36f7f35ebcda81dbb33a7e0d33757d03a06d9ddca762712ec5ea2" -"checksum crossbeam-epoch 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9b4e2817eb773f770dcb294127c011e22771899c21d18fce7dd739c0b9832e81" -"checksum crossbeam-utils 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2760899e32a1d58d5abb31129f8fae5de75220bc2176e77ff7c627ae45c918d9" -"checksum crossbeam-utils 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d636a8b3bcc1b409d7ffd3facef8f21dcb4009626adbd0c5e6c4305c07253c7b" +"checksum crossbeam-deque 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3486aefc4c0487b9cb52372c97df0a48b8c249514af1ee99703bf70d2f2ceda1" +"checksum crossbeam-epoch 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "30fecfcac6abfef8771151f8be4abc9e4edc112c2bcb233314cafde2680536e9" +"checksum crossbeam-utils 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "677d453a17e8bd2b913fa38e8b9cf04bcdbb5be790aa294f2389661d72036015" "checksum csrf 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "38f2ee2a7e76740d81de006e61eff53206c56448a30d8017b4ac97b5486682bd" "checksum custom_derive 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "ef8ae57c4978a2acd8b869ce6b9ca1dfe817bff704c220209fdef2c0b75a01b9" "checksum data-encoding 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "67df0571a74bf0d97fb8b2ed22abdd9a48475c96bd327db968b7d9cace99655e" "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-error-chain 0.11.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cb4450afbe280461e78299b39182a085b70e3e71be049cf4a588ad72f1e44d33" "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 diesel 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "24815a0c2094f2c8dafe74ab3b9e975892f44acbb94b4d4b4898025a7615efa4" -"checksum diesel_derives 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6471a2b637b414d3ee1504cf230409a550381c79204282f8fe06c527e4ae56be" -"checksum dotenv 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a70de3c590ce18df70743cace1cf12565637a0b26fd8b04ef10c7d33fdc66cdc" -"checksum dtoa 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "09c3753c3db574d215cba4ea76018483895d7bff25a31b49ba45db21c48e50ab" +"checksum derive_utils 0.1.0 (git+https://github.com/SergioBenitez/derive-utils?rev=160da392)" = "" +"checksum derive_utils_codegen 0.1.0 (git+https://github.com/SergioBenitez/derive-utils?rev=160da392)" = "" +"checksum derive_utils_core 0.1.0 (git+https://github.com/SergioBenitez/derive-utils?rev=160da392)" = "" +"checksum deunicode 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "5c28b432033d2f8130dac32a1605520b58c2b26fc538297ed28e7c1eab3cb84f" +"checksum diesel 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e71e7a348ae6064e86c4cf0709f0e4c3ef6f30e8e7d3dc05737164af4ebd3511" +"checksum diesel_derives 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "03bcaf77491f53e400d5ee3bdd57142ea4e1c47fe9217b3361ff9a76ca0e3d37" +"checksum dotenv 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c0d0a1279c96732bc6800ce6337b6a614697b0e74ae058dc03c62ebeb78b4d86" +"checksum dtoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "6d301140eb411af13d3115f9a562c85cc6b541ade9dfa314132244aaee7489dd" "checksum either 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "a39bffec1e2015c5d8a6773cb0cf48d0d758c842398f624c34969071f5499ea7" "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" @@ -2537,20 +2784,23 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "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.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "98fd0f24d1fb71a4a6b9330c8ca04cbd4e7cc5d846b54ca74ff376bc7c9f798d" +"checksum encoding_rs 0.8.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2a91912d6f37c6a8fef8a2316a862542d036f13c923ad518b5aca7bcaac7544c" "checksum error-chain 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ff511d5dc435d703f4971bc399647c9bc38e20cb41452e3b9feb4765419ed3f3" -"checksum failure 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "934799b6c1de475a012a02dab0ace1ace43789ee4b99bcfbf1a2e3e8ced5de82" -"checksum failure_derive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c7cdda555bb90c9bb67a3b670a0f42de8e73f5981524123ad8578aafec8ddb8b" +"checksum failure 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7efb22686e4a466b1ec1a15c2898f91fa9cb340452496dca654032de20ff95b9" +"checksum failure_derive 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "946d0e98a50d9831f5d589038d2ca7f8f455b1c21028c0db0e84116a12696426" +"checksum filetime 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "da4b9849e77b13195302c174324b5ba73eec9b236b24c221a61000daefb95c5f" "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 fsevent 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)" = "c4bbbf71584aeed076100b5665ac14e3d85eeb31fdbb45fbd41ef9a682b5ec05" +"checksum fsevent-sys 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "1a772d36c338d07a032d5375a36f15f9a7043bf0cb8ce7cee658e037c6032874" "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.21 (registry+https://github.com/rust-lang/crates.io-index)" = "1a70b146671de62ec8c8ed572219ca5d594d9b06c0b364d5e67b722fc559b48c" +"checksum futures 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)" = "0c84b40c7e2de99ffd70602db314a7a8c26b2b3d830e6f7f7a142a8860ab3ca4" "checksum futures-cpupool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "ab90cde24b3319636588d0c35fe03b1333857621051837ed769faefb4c2162e4" "checksum gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)" = "5e33ec290da0d127825013597dbdfc28bee4964690c7ce1166cbc2a7bd08b1bb" "checksum generic-array 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ef25c5683767570c2bbd7deba372926a55eaae9982d7726ee2a1050239d45b9d" -"checksum gettext-rs 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3b8c2412d5758f68a9eeba161f9ecb9a55f56bfdbf17857650b98f2b9b281a47" +"checksum gettext-rs 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b2502071e088651bd5fec87a896be2a5b908e817070d350a534a305abc9c6048" "checksum gettext-sys 0.19.8 (registry+https://github.com/rust-lang/crates.io-index)" = "62c644c0b8b73706fb8c7420533fd30abf6f41c2703994bc6f0826fceb7fb3d6" "checksum glob 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "8be18de09a56b60ed0edf84bc9df007e30040691af7acd1c41874faac5895bfb" "checksum groupable 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "32619942b8be646939eaf3db0602b39f5229b74575b67efc897811ded1db4e57" @@ -2561,159 +2811,174 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum heck 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ea04fa3ead4e05e51a7c806fc07271fdbde4e246a6c6d1efd52e72230b771b82" "checksum hex 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "805026a5d0141ffc30abb3be3173848ad46a1b1664fe632428479619a3644d77" "checksum html5ever 0.22.3 (registry+https://github.com/rust-lang/crates.io-index)" = "b04478cf718862650a0bf66acaf8f2f8c906fbc703f35c916c1f4211b069a364" -"checksum httparse 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "c2f407128745b78abc95c0ffbe4e5d37427fdc0d45470710cfef8c44522a2e37" +"checksum httparse 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7b6288d7db100340ca12873fd4d08ad1b8f206a9457798dfb17c018a33fee540" "checksum humansize 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b6cab2627acfc432780848602f3f558f7e9dd427352224b0d9324025796d2a5e" "checksum hyper 0.10.13 (registry+https://github.com/rust-lang/crates.io-index)" = "368cb56b2740ebf4230520e2b90ebb0461e69034d85d1945febd9b3971426db2" -"checksum hyper 0.11.25 (registry+https://github.com/rust-lang/crates.io-index)" = "549dbb86397490ce69d908425b9beebc85bbaad25157d67479d4995bb56fdf9a" -"checksum hyper-tls 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a5aa51f6ae9842239b0fac14af5f22123b8432b4cc774a44ff059fcba0f675ca" -"checksum idna 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "014b298351066f1512874135335d62a789ffe78a9974f94b43ed5621951eaf7d" -"checksum if_chain 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "61bb90bdd39e3af69b0172dfc6130f6cd6332bf040fbb9bdd4401d37adbd48b8" +"checksum hyper 0.11.27 (registry+https://github.com/rust-lang/crates.io-index)" = "34a590ca09d341e94cddf8e5af0bbccde205d5fbc2fa3c09dd67c7f85cea59d7" +"checksum hyper-tls 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "ffb1bd5e518d3065840ab315dbbf44e4420e5f7d80e2cb93fa6ffffc50522378" +"checksum idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e" +"checksum if_chain 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "4bac95d9aa0624e7b78187d6fb8ab012b41d9f6f54b1bcb61e61c4845f8357ec" "checksum indexmap 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "08173ba1e906efb6538785a8844dd496f5d34f0a2d88038e95195172fc667220" +"checksum inotify 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "40b54539f3910d6f84fbf9a643efd6e3aa6e4f001426c0329576128255994718" +"checksum inotify-sys 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e74a1aa87c59aeff6ef2cc2fa62d41bc43f54952f55652656b18a02fd5e356c0" "checksum iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dbe6e417e7d0975db6512b90796e8ce223145ac4e33c377e4a42882a0e88bb08" "checksum iron 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d8e17268922834707e1c29e8badbf9c712c9c43378e1b6a3388946baff10be2" -"checksum isatty 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "a118a53ba42790ef25c82bb481ecf36e2da892646cccd361e69a6bb881e19398" -"checksum itoa 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8324a32baf01e2ae060e9de58ed0bc2320c9a2833491ee36cd3b4c414de4db8c" -"checksum itoa 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c069bbec61e1ca5a596166e55dfe4773ff745c3d16b700013bcaff9a6df2c682" +"checksum isatty 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "e31a8281fc93ec9693494da65fbf28c0c2aa60a2eaec25dc58e2f31952e95edc" +"checksum itoa 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "5adb58558dcd1d786b5f0bd15f3226ee23486e24b7b58304b60f64dc68e62606" "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 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "76f033c7ad61445c5b347c7382dd1237847eb1bce590fe50365dcb33d546be73" -"checksum lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c8f31047daa365f19be14b47c29df4f7c3b581832407daabe6ae77397619237d" -"checksum lazycell 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a6f08839bc70ef4a3fe1d566d5350f519c5912ea86be0df1740a7d247c7fc0ef" -"checksum libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)" = "6fd41f331ac7c5b8ac259b8bf82c75c0fb2e469bbf37d2becbba9a6a2221965b" -"checksum libflate 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "1a429b86418868c7ea91ee50e9170683f47fd9d94f5375438ec86ec3adb74e8e" +"checksum lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ca488b89a5657b0a2ecd45b95609b3e848cf1755da332a0da46e2b2b1cb371a7" +"checksum lazycell 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d33a48d0365c96081958cc663eef834975cb1e8d8bea3378513fc72bdbf11e50" +"checksum libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)" = "76e3a3ef172f1a0b9a9ff0dd1491ae5e6c948b94479a3021819ba7d860c8645d" +"checksum libflate 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "7d4b4c7aff5bac19b956f693d0ea0eade8066deb092186ae954fa6ba14daab98" "checksum locale_config 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "14fbee0e39bc2dd6a2427c4fdea66e9826cc1fd09b0a0b7550359f5f6efe1dab" +"checksum lock_api 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "949826a5ccf18c1b3a7c3d57692778d21768b79e46eb9dd07bfc4c2160036c54" "checksum log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b" -"checksum log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "89f010e843f2b1a31dbd316b3b8d443758bc634bed37aabade59c686d644e0a2" +"checksum log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "d4fcce5fa49cc693c312001daf1d13411c4a5283796bac1084299ea3e567113f" "checksum mac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" "checksum mach 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "977262a11cfd76b94da10b8898cea6e9ac391301ab74741e6da6bee13d7df46d" "checksum maplit 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "08cbb6b4fef96b6d77bfc40ec491b1690c779e77b05cd9f07f787ed376fd4c43" "checksum markup5ever 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "bfedc97d5a503e96816d10fedcd5b42f760b2e525ce2f7ec71f6a41780548475" -"checksum matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "100aabe6b8ff4e4a7e32c1c13523379802df0772b82466207ac25b013f193376" -"checksum memchr 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "796fba70e76612589ed2ce7f45282f5af869e0fdd7cc6199fa1aa1f1d591ba9d" +"checksum matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" +"checksum memchr 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a3b4142ab8738a78c51896f704f83c11df047ff1bda9a92a661aa6361552d93d" "checksum memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0f9dc261e2b62d7a622bf416ea3c5245cdd5d9a7fcc428c0d06804dfce1775b3" "checksum mime 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "ba626b8a6de5da682e1caa06bdb42a335aee5a84db8e5046a3e8ab17ba0a3ae0" -"checksum mime 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "e2e00e17be181010a91dbfefb01660b17311059dc8c7f48b9017677721e732bd" +"checksum mime 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "4b082692d3f6cf41b453af73839ce3dfc212c4411cbb2441dff80a716e38bd79" "checksum mime_guess 1.8.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2d4c0961143b8efdcfa29c3ae63281601b446a4a668165454b6c90f8024954c5" -"checksum mime_guess 2.0.0-alpha.4 (registry+https://github.com/rust-lang/crates.io-index)" = "130ea3c9c1b65dba905ab5a4d9ac59234a9585c24d135f264e187fe7336febbd" -"checksum mio 0.6.14 (registry+https://github.com/rust-lang/crates.io-index)" = "6d771e3ef92d58a8da8df7d6976bfca9371ed1de6619d9d5a5ce5b1f29b85bfe" +"checksum mime_guess 2.0.0-alpha.6 (registry+https://github.com/rust-lang/crates.io-index)" = "30de2e4613efcba1ec63d8133f344076952090c122992a903359be5a4f99c3ed" +"checksum mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)" = "71646331f2619b1026cc302f87a2b8b648d5c6dd6937846a16cc8ce0f347f432" +"checksum mio-extras 2.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "46e73a04c2fa6250b8d802134d56d554a9ec2922bf977777c805ea5def61ce40" +"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 modifier 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "41f5c9112cb662acd3b204077e0de5bc66305fa8df65c8019d5adb10e9ab6e58" "checksum multipart 0.15.3 (registry+https://github.com/rust-lang/crates.io-index)" = "b3bd50d71866514b14d2ca09823d81390d92daa40bc835f83a908c52ab0a802e" "checksum mustache 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "ddb004e419334fc9172d0a5ff91c0770bdd6239091b0b343eb5926101f0a7d13" "checksum native-tls 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "f74dbadc8b43df7864539cedb7bc91345e532fdd913cfdc23ad94f4d2d40fbc0" -"checksum net2 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)" = "9044faf1413a1057267be51b5afba8eb1090bd2231c693664aa1db716fe1eae0" +"checksum net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88" "checksum new_debug_unreachable 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0cdc457076c78ab54d5e0d6fa7c47981757f1e34dc39ff92787f217dede586c4" "checksum nickel 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "22b40e35b9f46a076dcbd8193125cea0e4130b1c015f68655038010f3e826e04" "checksum nodrop 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "9a2228dca57108069a5262f2ed8bd2e82496d2e074a06d1ccc7ce1687b6ae0a2" -"checksum num-integer 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)" = "f8d26da319fb45674985c78f1d1caf99aa4941f785d384a2ae36d0740bc3e2fe" -"checksum num-traits 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dee092fcdf725aee04dd7da1d21debff559237d49ef1cb3e69bcb8ece44c7364" +"checksum notify 4.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "873ecfd8c174964ae30f401329d140142312c8e5590719cf1199d5f1717d8078" +"checksum num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)" = "e83d528d2677f0518c570baf2b7abdcf0cd2d248860b68507bdcb3e91d4c0cea" +"checksum num-traits 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "630de1ef5cc79d0cdd78b7e33b81f083cbfe90de0f4b2b2f07f905867c70e9fe" "checksum num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c51a3322e4bca9d212ad9a158a02abc6934d005490c054a2778df73a70aa0a30" "checksum opaque-debug 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d620c9c26834b34f039489ac0dfdb12c7ac15ccaf818350a64c9b5334a452ad7" -"checksum openssl 0.10.6 (registry+https://github.com/rust-lang/crates.io-index)" = "63246f69962e8d5ef865f82a65241d6483c8a2905a1801e2f7feb5d187d51320" +"checksum openssl 0.10.11 (registry+https://github.com/rust-lang/crates.io-index)" = "6c24d3508b4fb6da175c10baac54c578b33f09c89ae90c6fe9788b3b4768efdc" "checksum openssl 0.9.24 (registry+https://github.com/rust-lang/crates.io-index)" = "a3605c298474a3aa69de92d21139fb5e2a81688d308262359d85cdd0d12a7985" -"checksum openssl-sys 0.9.28 (registry+https://github.com/rust-lang/crates.io-index)" = "0bbd90640b148b46305c1691eed6039b5c8509bed16991e3562a01eeb76902a3" -"checksum pear 0.1.0 (git+http://github.com/SergioBenitez/Pear?rev=54667ae)" = "" -"checksum pear_codegen 0.1.0 (git+http://github.com/SergioBenitez/Pear?rev=54667ae)" = "" +"checksum openssl-sys 0.9.35 (registry+https://github.com/rust-lang/crates.io-index)" = "912f301a749394e1025d9dcddef6106ddee9252620e6d0a0e5f8d0681de9b129" +"checksum owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "cdf84f41639e037b484f93433aa3897863b561ed65c6e59c7073d7c561710f37" +"checksum parking_lot 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "f0802bff09003b291ba756dc7e79313e51cc31667e94afbe847def490424cde5" +"checksum parking_lot_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "06a2b6aae052309c2fd2161ef58f5067bc17bb758377a0de9d4b279d603fdd8a" +"checksum pear 0.1.0 (git+http://github.com/SergioBenitez/Pear?rev=b475140)" = "" +"checksum pear_codegen 0.1.0 (git+http://github.com/SergioBenitez/Pear?rev=b475140)" = "" "checksum percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" "checksum pest 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0fce5d8b5cc33983fc74f78ad552b5522ab41442c4ca91606e4236eb4b5ceefc" -"checksum pest_derive 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)" = "ab94faafeb93f4c5e3ce81ca0e5a779529a602ad5d09ae6d21996bfb8b6a52bf" -"checksum phf 0.7.22 (registry+https://github.com/rust-lang/crates.io-index)" = "7d37a244c75a9748e049225155f56dbcb98fe71b192fd25fd23cb914b5ad62f2" -"checksum phf_codegen 0.7.22 (registry+https://github.com/rust-lang/crates.io-index)" = "4e4048fe7dd7a06b8127ecd6d3803149126e9b33c7558879846da3a63f734f2b" -"checksum phf_generator 0.7.22 (registry+https://github.com/rust-lang/crates.io-index)" = "05a079dd052e7b674d21cb31cbb6c05efd56a2cd2827db7692e2f1a507ebd998" -"checksum phf_shared 0.7.22 (registry+https://github.com/rust-lang/crates.io-index)" = "c2261d544c2bb6aa3b10022b0be371b9c7c64f762ef28c6f5d4f1ef6d97b5930" -"checksum pkg-config 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)" = "110d5ee3593dbb73f56294327fe5668bcc997897097cbc76b51e7aed3f52452f" +"checksum pest_derive 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)" = "ca3294f437119209b084c797604295f40227cffa35c57220b1e99a6ff3bf8ee4" +"checksum phf 0.7.23 (registry+https://github.com/rust-lang/crates.io-index)" = "cec29da322b242f4c3098852c77a0ca261c9c01b806cae85a5572a1eb94db9a6" +"checksum phf_codegen 0.7.23 (registry+https://github.com/rust-lang/crates.io-index)" = "7d187f00cd98d5afbcd8898f6cf181743a449162aeb329dcd2f3849009e605ad" +"checksum phf_generator 0.7.23 (registry+https://github.com/rust-lang/crates.io-index)" = "03dc191feb9b08b0dc1330d6549b795b9d81aec19efe6b4a45aec8d4caee0c4b" +"checksum phf_shared 0.7.23 (registry+https://github.com/rust-lang/crates.io-index)" = "b539898d22d4273ded07f64a05737649dc69095d92cb87c7097ec68e3f150b93" +"checksum pkg-config 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)" = "676e8eb2b1b4c9043511a9b7bea0915320d7e502b0a079fb03f9635a5252b18c" "checksum plugin 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "1a6a0dc3910bc8db877ffed8e457763b317cf880df4ae19109b9f77d277cf6e0" -"checksum pq-sys 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "4dfb5e575ef93a1b7b2a381d47ba7c5d4e4f73bff37cee932195de769aad9a54" +"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.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3ba8d4f9257b85eb6cdf13f055cea3190520aab1409ca2ab43493ea4820c25f0" -"checksum proc-macro-hack-impl 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d5cb6f960ad471404618e9817c0e5d10b1ae74cfdf01fab89ea0641fe7fb2892" +"checksum proc-macro-hack 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2c725b36c99df7af7bf9324e9c999b9e37d92c8f8caf106d82e1d7953218d2d8" +"checksum proc-macro-hack-impl 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2b753ad9ed99dd8efeaa7d2fb8453c8f6bc3e54b97966d35f1bc77ca6865254a" "checksum proc-macro2 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "cd07deb3c6d1d9ff827999c7f9b04cdfd66b1b17ae508e14fe47b620f2282ae0" -"checksum proc-macro2 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "49b6a521dc81b643e9a51e0d1cf05df46d5a2f3c0280ea72bcb68276ba64a118" -"checksum proc-macro2 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "effdb53b25cdad54f8f48843d67398f7ef2e14f12c1b4cb4effc549a6462a4d6" +"checksum proc-macro2 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "1b06e2f335f48d24442b35a19df506a835fb3547bc3c06ef27340da9acf5cae7" +"checksum proc-macro2 0.4.18 (registry+https://github.com/rust-lang/crates.io-index)" = "afa4d377067cc02eb5e0b491d3f7cfbe145ad4da778535bfb13c444413dd35b9" "checksum pulldown-cmark 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d6fdf85cda6cadfae5428a54661d431330b312bc767ddbc57adbedc24da66e32" "checksum quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9274b940887ce9addde99c4eee6b5c44cc494b182b97e73dc8ffdcb3397fd3f0" -"checksum quick-xml 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b14c27e04216596a49f2b82398a24f67ed9f131a5c0e0235496ea446bdacfb12" +"checksum quick-xml 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7fabc3b4b39f1ac835f364a1f21cbe1d4059770d4e07a9590e9aaf229596907e" "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.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e44651a0dc4cdd99f71c83b561e221f714912d11af1a4dff0631f923d53af035" +"checksum quote 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)" = "dd636425967c33af890042c483632d33fa7a18f19ad1d7ea72e8998c6ef8dea5" "checksum r2d2 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f9078ca6a8a5568ed142083bb2f7dc9295b69d16f867ddcc9849e51b17d8db46" "checksum rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)" = "15a732abf9d20f0ad8eeb6f909bf6868722d9a06e1e50802b6a70351f40b4eb1" -"checksum rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "eba5f8cb59cc50ed56be8880a5c7b496bfd9bd26394e176bc67884094145c2c5" -"checksum rand 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d0d9f869af32e387d9e0f2bdb64326b8ac84c81d5e55459d0bc7526b0fdb3671" +"checksum rand 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8356f47b32624fef5b3301c1be97e5944ecdd595409cc5da11d05f211db6cfbd" +"checksum rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)" = "e464cd887e869cddcae8792a4ee31d23c7edd516700695608f5b98c67ee0131c" "checksum rand_core 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "edecf0f94da5551fc9b492093e30b041a891657db7940ee221f9d2f66e82eef2" -"checksum redox_syscall 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)" = "0d92eecebad22b767915e4d529f89f28ee96dbbf5a4810d2b844373f136417fd" -"checksum regex 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)" = "aec3f58d903a7d2a9dc2bf0e41a746f4530e0cab6b615494e058f67a3ef947fb" -"checksum regex 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "13c93d55961981ba9226a213b385216f83ab43bd6ac53ab16b2eeb47e337cf4e" -"checksum regex-syntax 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)" = "bd90079345f4a4c3409214734ae220fd773c6f2e8a543d07370c6c1c369cfbfb" -"checksum regex-syntax 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05b06a75f5217880fc5e905952a42750bf44787e56a6c6d6852ed0992f5e1d54" +"checksum redox_syscall 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)" = "c214e91d3ecf43e9a4e41e578973adeb14b474f2bee858742d127af75a0112b1" +"checksum regex 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "9329abc99e39129fcceabd24cf5d85b4671ef7c29c50e972bc5afe32438ec384" +"checksum regex 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "2069749032ea3ec200ca51e4a31df41759190a88edca0d2d86ee8bedf7073341" +"checksum regex-syntax 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)" = "7d707a4fa2637f2dca2ef9fd02225ec7661fe01a53623c1e6515b6916511f7a7" +"checksum regex-syntax 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "747ba3b235651f6e2f67dfa8bcdcd073ddb7c243cb21c442fc12395dfcac212d" "checksum relay 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1576e382688d7e9deecea24417e350d3062d97e32e45d70b1cde65994ff1489a" "checksum remove_dir_all 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3488ba1b9a2084d38645c4c08276a1752dcbf2c7130d74f1569681ad5d2799c5" -"checksum reqwest 0.8.5 (registry+https://github.com/rust-lang/crates.io-index)" = "241faa9a8ca28a03cbbb9815a5d085f271d4c0168a19181f106aa93240c22ddb" -"checksum ring 0.13.0-alpha5 (registry+https://github.com/rust-lang/crates.io-index)" = "3845516753f91b4511f9b17c917ea6fa4bc5a7853a9947b0f66731aff51cdef5" -"checksum rocket 0.4.0-dev (git+https://github.com/SergioBenitez/Rocket?rev=df7111143e466c18d1f56377a8d9530a5a306aba)" = "" -"checksum rocket_codegen 0.4.0-dev (git+https://github.com/SergioBenitez/Rocket?rev=df7111143e466c18d1f56377a8d9530a5a306aba)" = "" -"checksum rocket_codegen_next 0.4.0-dev (git+https://github.com/SergioBenitez/Rocket?rev=df7111143e466c18d1f56377a8d9530a5a306aba)" = "" -"checksum rocket_contrib 0.4.0-dev (git+https://github.com/SergioBenitez/Rocket?rev=df7111143e466c18d1f56377a8d9530a5a306aba)" = "" -"checksum rocket_csrf 0.1.0 (git+https://github.com/fdb-hiroshima/rocket_csrf?rev=896fcaf14bd85b3f8266c0201e5f61937d05aec9)" = "" -"checksum rocket_http 0.4.0-dev (git+https://github.com/SergioBenitez/Rocket?rev=df7111143e466c18d1f56377a8d9530a5a306aba)" = "" -"checksum rocket_i18n 0.1.1 (git+https://github.com/BaptisteGelez/rocket_i18n?rev=5b4225d5bed5769482dc926a7e6d6b79f1217be6)" = "" +"checksum reqwest 0.8.8 (registry+https://github.com/rust-lang/crates.io-index)" = "738769ec83daf6c1929dc9dae7d69ed3779b55ae5c356e989dcd3aa677d8486e" +"checksum ring 0.13.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dbe642b9dd1ba0038d78c4a3999d1ee56178b4d415c1e1fbaba83b06dce012f0" +"checksum rocket 0.4.0-dev (git+https://github.com/SergioBenitez/Rocket?rev=55459db7732b9a240826a5c120c650f87e3372ce)" = "" +"checksum rocket_codegen 0.4.0-dev (git+https://github.com/SergioBenitez/Rocket?rev=55459db7732b9a240826a5c120c650f87e3372ce)" = "" +"checksum rocket_codegen_next 0.4.0-dev (git+https://github.com/SergioBenitez/Rocket?rev=55459db7732b9a240826a5c120c650f87e3372ce)" = "" +"checksum rocket_contrib 0.4.0-dev (git+https://github.com/SergioBenitez/Rocket?rev=55459db7732b9a240826a5c120c650f87e3372ce)" = "" +"checksum rocket_csrf 0.1.0 (git+https://github.com/fdb-hiroshima/rocket_csrf?rev=5d23ba4c6c2ee4c41040d428d24344db3d29997f)" = "" +"checksum rocket_http 0.4.0-dev (git+https://github.com/SergioBenitez/Rocket?rev=55459db7732b9a240826a5c120c650f87e3372ce)" = "" +"checksum rocket_i18n 0.1.1 (git+https://github.com/BaptisteGelez/rocket_i18n?rev=75a3bfd7b847324c078a355a7f101f8241a9f59b)" = "" "checksum rpassword 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d127299b02abda51634f14025aec43ae87a7aa7a95202b6a868ec852607d1451" "checksum rust-crypto 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)" = "f76d05d3993fd5f4af9434e8e436db163a12a9d40e1a58a726f27a01dfd12a2a" -"checksum rustc-demangle 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "11fb43a206a04116ffd7cfcf9bcb941f8eb6cc7ff667272246b0a1c74259a3cb" +"checksum rustc-demangle 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "bcfe5b13211b4d78e5c2cadfebd7769197d95c639c35a50057eb4c05de811395" "checksum rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)" = "dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda" +"checksum ryu 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "7153dd96dade874ab973e098cb62fcdbb89a03682e46b144fd09550998d4a4a7" "checksum safemem 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e27a8b19b835f7aea908818e871f5cc3a5a186550c30773be987e155e8163d8f" "checksum safemem 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8dca453248a96cb0749e36ccdfe2b0b4e54a61bfef89fb97ec621eb8e0a93dd9" -"checksum schannel 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "85fd9df495640643ad2d00443b3d78aae69802ad488debab4f1dd52fc1806ade" +"checksum same-file 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "10f7794e2fda7f594866840e95f5c5962e886e228e68b6505885811a94dd728c" +"checksum schannel 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "dc1fabf2a7b6483a141426e1afd09ad543520a77ac49bd03c286e7696ccfd77f" "checksum scheduled-thread-pool 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1a2ff3fc5223829be817806c6441279c676e454cc7da608faf03b0ccc09d3889" -"checksum scoped-tls 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8674d439c964889e2476f474a3bf198cc9e199e77499960893bac5de7e9218a4" +"checksum scoped-tls 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "332ffa32bf586782a3efaeb58f127980944bbc8c4d6913a86107ac2a5ab24b28" "checksum scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27" "checksum security-framework 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "dfa44ee9c54ce5eecc9de7d5acbad112ee58755239381f687e564004ba4a2332" "checksum security-framework-sys 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "5421621e836278a0b139268f36eee0dc7e389b784dc3f79d8f11aabadf41bead" -"checksum serde 1.0.42 (registry+https://github.com/rust-lang/crates.io-index)" = "a73973861352c932ed1365ce22b32467ce260ac4c8db11cf750ce56334ff2dcf" -"checksum serde_derive 1.0.43 (registry+https://github.com/rust-lang/crates.io-index)" = "aa113e5fc4b008a626ba2bbd41330b56c9987d667f79f7b243e5a2d03d91ed1c" -"checksum serde_derive_internals 0.23.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9d30c4596450fd7bbda79ef15559683f9a79ac0193ea819db90000d7e1cae794" -"checksum serde_json 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)" = "8c6c4e049dc657a99e394bd85c22acbf97356feeec6dbf44150f2dcf79fb3118" -"checksum serde_urlencoded 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ce0fd303af908732989354c6f02e05e2e6d597152870f2c6990efb0577137480" -"checksum siphasher 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0df90a788073e8d0235a67e50441d47db7c8ad9debd91cbf43736a2a92d36537" +"checksum serde 1.0.77 (registry+https://github.com/rust-lang/crates.io-index)" = "c6e67977d7523ce4d9284ed58918af99392de8edb6192c44afefcf634654ab7f" +"checksum serde_derive 1.0.77 (registry+https://github.com/rust-lang/crates.io-index)" = "5569c52faae3e21b9abae2cc5cfbb56ed008bfcac480ad62bc241b828f0b0aee" +"checksum serde_json 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)" = "59790990c5115d16027f00913e2e66de23a51f70422e549d2ad68c8c5f268f1c" +"checksum serde_urlencoded 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "aaed41d9fb1e2f587201b863356590c90c1157495d811430a0c0325fe8169650" +"checksum siphasher 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "0b8de496cf83d4ed58b6be86c3a275b8602f6ffe98d3024a869e124147a9a3ac" "checksum slab 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "17b4fcaed89ab08ef143da37bc52adbcc04d4a69014f4c1208d6b51f0c47bc23" -"checksum slab 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fdeff4cd9ecff59ec7e3744cbca73dfe5ac35c2aedb2cfba8a1c715a18912e9d" +"checksum slab 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5f9776d6b986f77b35c6cf846c11ad986ff128fe0b2b63a3628e3755e8d3102d" "checksum slice-deque 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "79e5bb98247a0eb0cfdedb7e792962ec71ac1003033f70558bd9961f8912e487" -"checksum slug 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "797bcb4d24e91239a8615415814f4afb2d8ca400c472de3c73f803a5a7689e11" +"checksum slug 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b3bc762e6a4b6c6fcaade73e77f9ebc6991b676f88bb2358bddb56560f073373" "checksum smallvec 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4c8cbcd6df1e117c2210e13ab5109635ad68a929fcbb8964dc965b76cb5ee013" -"checksum smallvec 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "26df3bb03ca5eac2e64192b723d51f56c1b1e0860e7c766281f4598f181acdc8" +"checksum smallvec 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "153ffa32fd170e9944f7e0838edf824a754ec4c1fc64746fcc9fe1f8fa602e5d" +"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 string_cache 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "25d70109977172b127fe834e5449e5ab1740b9ba49fa18a2020f509174f25423" "checksum string_cache_codegen 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "35293b05cf1494e8ddd042a7df6756bf18d07f42d234f32e71dce8a7aabb0191" "checksum string_cache_shared 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b1884d1bc09741d466d9b14e6d37ac89d6909cbcac41dd9ae982d4d063bbedfc" "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.1 (registry+https://github.com/rust-lang/crates.io-index)" = "91b52877572087400e83d24b9178488541e3d535259e04ff17a63df1e5ceff59" -"checksum syn 0.14.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c67da57e61ebc7b7b6fff56bb34440ca3a83db037320b0507af4c10368deda7d" +"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.1 (registry+https://github.com/rust-lang/crates.io-index)" = "85fb2f7f9b7a4c8df2c913a852de570efdb40f0d2edd39c8245ad573f5c7fbcc" "checksum synom 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a393066ed9010ebaed60b9eafa373d4b1baac186dd7e008555b0f702b51945b6" -"checksum synstructure 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3a761d12e6d8dcb4dcf952a7a89b475e3a9d69e4a69307e01a470977642914bd" -"checksum syntex_fmt_macros 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5e5386bdc48758d136af85b3880548e1f3a9fad8d7dc2b38bdb48c36a9cdefc0" +"checksum synstructure 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "85bb9b7550d063ea184027c9b8c20ac167cd36d3e06b3a40bceb9d746dc1a7b7" "checksum take 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b157868d8ac1f56b64604539990685fa7611d8fa9e5476cf0c02cf34d32917c5" "checksum tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "15f2b5fb00ccdf689e0149d1b1b3c03fead81c2b37735d812fa8bddbbf41b6d8" "checksum tendril 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9de21546595a0873061940d994bbbc5c35f024ae4fd61ec5c5b159115684f508" "checksum tera 0.11.7 (registry+https://github.com/rust-lang/crates.io-index)" = "e815b67d44c26feb06630011fb58b5b243f4e9585aac1ed0592c5795de64cd75" -"checksum thread_local 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "279ef31c19ededf577bfd12dfae728040a21f635b06a24cd670ff510edd38963" +"checksum thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b" "checksum time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)" = "d825be0eb33fda1a7e68012d51e9c7f451dc1a69391e7fdc197060bb8c56667b" "checksum tiny_http 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a442681f9f72e440be192700eeb2861e4174b9983f16f4877c93a134cb5e5f63" -"checksum tokio 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "be15ef40f675c9fe66e354d74c73f3ed012ca1aa14d65846a33ee48f1ae8d922" +"checksum tokio 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "fbb6a6e9db2702097bfdfddcb09841211ad423b86c75b5ddaca1d62842ac492c" +"checksum tokio-codec 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "881e9645b81c2ce95fcb799ded2c29ffb9f25ef5bef909089a420e5961dd8ccb" "checksum tokio-core 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)" = "aeeffbbb94209023feaef3c196a41cbcdafa06b4a6f893f68779bb5e53796f71" -"checksum tokio-executor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "8cac2a7883ff3567e9d66bb09100d09b33d90311feca0206c7ca034bc0c55113" -"checksum tokio-io 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "6af9eb326f64b2d6b68438e1953341e00ab3cf54de7e35d92bfc73af8555313a" +"checksum tokio-current-thread 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8fdfb899688ac16f618076bd09215edbfda0fd5dfecb375b6942636cb31fa8a7" +"checksum tokio-executor 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "84823b932d566bc3c6aa644df4ca36cb38593c50b7db06011fd4e12e31e4047e" +"checksum tokio-fs 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "b5cbe4ca6e71cb0b62a66e4e6f53a8c06a6eefe46cc5f665ad6f274c9906f135" +"checksum tokio-io 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8d6cc2de7725863c86ac71b0b9068476fec50834f055a243558ef1655bbd34cb" "checksum tokio-proto 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8fbb47ae81353c63c487030659494b295f6cb6576242f907f203473b191b0389" -"checksum tokio-reactor 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b3cedc8e5af5131dc3423ffa4f877cce78ad25259a9a62de0613735a13ebc64b" +"checksum tokio-reactor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "4bfbaf9f260635649ec26b6fb4aded03887295ffcd999f6e43fd2c4758f758ea" "checksum tokio-service 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "24da22d077e0f15f55162bdbdc661228c1581892f52074fb242678d015b45162" -"checksum tokio-tcp 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ec9b094851aadd2caf83ba3ad8e8c4ce65a42104f7b94d9e6550023f0407853f" -"checksum tokio-threadpool 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "bf3d05cdd6a78005e535d2b27c21521bdf91fbb321027a62d8e178929d18966d" -"checksum tokio-timer 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "29a89e4ad0c8f1e4c9860e605c38c69bfdad3cccd4ea446e58ff588c1c07a397" +"checksum tokio-tcp 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5b4c329b47f071eb8a746040465fa751bd95e4716e98daef6a9b4e434c17d565" +"checksum tokio-threadpool 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "a5758cecb6e0633cea5d563ac07c975e04961690b946b04fd84e7d6445a8f6af" +"checksum tokio-timer 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "d03fa701f9578a01b7014f106b47f0a363b4727a7f3f75d666e312ab7acbbf1c" "checksum tokio-tls 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "772f4b04e560117fe3b0a53e490c16ddc8ba6ec437015d91fa385564996ed913" -"checksum tokio-udp 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "137bda266504893ac4774e0ec4c2108f7ccdbcb7ac8dced6305fe9e4e0b5041a" +"checksum tokio-udp 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "da941144b816d0dcda4db3a1ba87596e4df5e860a72b70783fe435891f80601c" +"checksum tokio-uds 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "424c1ed15a0132251813ccea50640b224c809d6ceafb88154c1a8775873a0e89" "checksum toml 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "a0263c6c02c4db6c8f7681f9fd35e90de799ebd4cfdeab77a38f4ff6b3d8c0d9" "checksum traitobject 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "efd1f82c56340fdf16f2a953d7bda4f8fdffba13d93b00844c25572110b26079" +"checksum try-lock 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee2aa4715743892880f70885373966c83d73ef1b0838a664ef0c76fffd35e7c2" "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 typemap 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "653be63c80a3296da5551e1bfd2cca35227e13cdd08c6668903ae2f4f77aa1f6" @@ -2722,28 +2987,30 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7f4765f83163b74f957c797ad9253caf97f103fb064d3999aea9568d09fc8a33" "checksum unicase 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "284b6d3db520d67fbe88fd778c21510d1b0ba4a551e5d0fbb023d33405f6de8a" "checksum unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" -"checksum unicode-normalization 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "51ccda9ef9efa3f7ef5d91e8f9b83bbe6955f9bf86aec89d5cce2c874625920f" -"checksum unicode-segmentation 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a8083c594e02b8ae1654ae26f0ade5158b119bd88ad0e8227a5d8fcd72407946" +"checksum unicode-normalization 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "6a0180bc61fc5a987082bfa111f4cc95c4caff7f9799f3e46df09163a937aa25" +"checksum unicode-segmentation 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "aa6024fc12ddfd1c6dbc14a80fa2324d4568849869b779f6bd37e5e4c03344d1" "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 unidecode 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "402bb19d8e03f1d1a7450e2bd613980869438e0666331be3e073089124aa1adc" "checksum unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "382810877fe448991dfc7f0dd6e3ae5d58088fd0ea5e35189655f84e6814fa56" "checksum unsafe-any 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f30360d7979f5e9c6e6cea48af192ea8fab4afb3cf72597154b8f08935bc9c7f" "checksum untrusted 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "55cd1f4b4e96b46aeb8d4855db4a7a9bd96eeeb5c6a1ab54593328761642ce2f" -"checksum url 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f808aadd8cfec6ef90e4a14eb46f24511824d1ac596b9682703c87056c8678b7" -"checksum utf-8 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f1262dfab4c30d5cb7c07026be00ee343a6cf5027fdc0104a9160f354e5db75c" -"checksum utf8-ranges 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "662fab6525a98beff2921d7f61a39e7d59e0b425ebc7d0d9e66d316e55124122" -"checksum uuid 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "bcc7e3b898aa6f6c08e5295b6c89258d1331e9ac578cc992fb818759951bdc22" -"checksum validator 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "4a8c44fecf027a477e70a86cd7f4863410adf120ca2cb13408cb099057b8e2d0" -"checksum validator_derive 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "708ee89305635499f793d0e2dd9d0b1b5d00daba90fdfb1392b87c7279521fab" -"checksum vcpkg 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7ed0f6789c8a85ca41bbc1c9d175422116a9869bd1cf31bb08e1493ecce60380" -"checksum version_check 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "6b772017e347561807c1aa192438c5fd74242a670a6cffacc40f2defd1dc069d" +"checksum url 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2a321979c09843d272956e73700d12c4e7d3d92b2ee112b31548aef0d4efc5a6" +"checksum utf-8 0.7.4 (registry+https://github.com/rust-lang/crates.io-index)" = "bab35f71693630bb1953dce0f2bcd780e7cde025027124a202ac08a45ba25141" +"checksum utf8-ranges 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "fd70f467df6810094968e2fce0ee1bd0e87157aceb026a8c083bcf5e25b9efe4" +"checksum uuid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "e1436e58182935dcd9ce0add9ea0b558e8a87befe01c1a301e6020aeb0876363" +"checksum validator 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a3f0d7368156daa506d6e42bd110857ee42d320dd1edd8e77f81b44fb00bb844" +"checksum validator_derive 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2b50b766d1588742f67db0d5df7d5394473234fbc60a382da81bd666a99db41e" +"checksum vcpkg 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "def296d3eb3b12371b2c7d0e83bfe1403e4db2d7a0bba324a12b21c4ee13143d" +"checksum version_check 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "7716c242968ee87e5542f8021178248f267f295a5c4803beae8b8b7fd9bc6051" "checksum void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" +"checksum walkdir 2.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "af464bc7be7b785c7ac72e266a6b67c4c9070155606f51655a650a6686204e35" +"checksum want 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "a05d9d966753fa4b5c8db73fcab5eed4549cfe0e1e4e66911e5564a0085c35d1" "checksum webfinger 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e34ffa5f00fedd30b71718a02b973df00a66e8059ad041bc597b455b22a2aba2" "checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" -"checksum winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "04e3bd221fcbe8a271359c04f21a76db7d0c6028862d1bb5512d85e1e2eb5bb3" +"checksum winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "773ef9dcc5f24b7d850d0ff101e542ff24c3b090a9768e03ff889fdef41f00fd" "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.1 (registry+https://github.com/rust-lang/crates.io-index)" = "afc5508759c5bf4285e61feb862b6083c8480aec864fa17a81fdec6f69b461ab" "checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" "checksum workerpool 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4f49756646617bde19ff95b370cfa5c0f7ead17a90c90d7cb62dc31dfaa8c625" "checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" diff --git a/Cargo.toml b/Cargo.toml index c61f2cc9..08d9608a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,10 +3,10 @@ authors = ["Bat' "] name = "plume" version = "0.1.0" [dependencies] -activitypub = "0.1.1" +activitypub = "0.1.3" atom_syndication = "0.6" colored = "1.6" -dotenv = "*" +dotenv = "0.13" failure = "0.1" gettext-rs = "0.4" guid-create = "0.1" @@ -16,11 +16,16 @@ rpassword = "2.0" serde = "1.0" serde_derive = "1.0" serde_json = "1.0" +tera = "0.11" validator = "0.7" validator_derive = "0.7" webfinger = "0.3" workerpool = "1.1" +[dependencies.chrono] +features = ["serde"] +version = "0.4" + [dependencies.diesel] features = ["postgres", "r2d2", "chrono"] version = "*" @@ -33,24 +38,24 @@ path = "plume-models" [dependencies.rocket] git = "https://github.com/SergioBenitez/Rocket" -rev = "df7111143e466c18d1f56377a8d9530a5a306aba" +rev = "55459db7732b9a240826a5c120c650f87e3372ce" [dependencies.rocket_codegen] git = "https://github.com/SergioBenitez/Rocket" -rev = "df7111143e466c18d1f56377a8d9530a5a306aba" +rev = "55459db7732b9a240826a5c120c650f87e3372ce" [dependencies.rocket_contrib] features = ["tera_templates", "json"] git = "https://github.com/SergioBenitez/Rocket" -rev = "df7111143e466c18d1f56377a8d9530a5a306aba" +rev = "55459db7732b9a240826a5c120c650f87e3372ce" [dependencies.rocket_csrf] git = "https://github.com/fdb-hiroshima/rocket_csrf" -rev = "896fcaf14bd85b3f8266c0201e5f61937d05aec9" +rev = "5d23ba4c6c2ee4c41040d428d24344db3d29997f" [dependencies.rocket_i18n] git = "https://github.com/BaptisteGelez/rocket_i18n" -rev = "5b4225d5bed5769482dc926a7e6d6b79f1217be6" +rev = "75a3bfd7b847324c078a355a7f101f8241a9f59b" [workspace] members = ["plume-models", "plume-common"] diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..a13a2f7a --- /dev/null +++ b/Dockerfile @@ -0,0 +1,20 @@ +FROM rust:1-stretch + +RUN apt-get update && apt-get install -y --no-install-recommends \ + gettext \ + postgresql-client \ + libpq-dev \ + git \ + curl \ + gcc \ + make \ + openssl \ + libssl-dev +WORKDIR /app +COPY Cargo.toml Cargo.lock ./ +RUN cargo install diesel_cli --no-default-features --features postgres --version '=1.2.0' +COPY . . +RUN cargo build +RUN rm -rf target/debug/incremental +CMD ["cargo", "run"] +EXPOSE 7878 diff --git a/docs/ENV-VARS.md b/docs/ENV-VARS.md new file mode 100644 index 00000000..e1037212 --- /dev/null +++ b/docs/ENV-VARS.md @@ -0,0 +1,22 @@ +# Useful Environment Variables + +Plume relies on some environment variables for some configuration options. You can either set them before +starting the app with `cargo run` or write them in a `.env` file to have automatically loaded. + +Here are the variables that Plume uses: + +- `BASE_URL`: the domain name, or IP and port on which Plume is listening. It is used in all federation-related code. +- `DB_URL`: the URL of the PostgreSQL database, used by Plume (`postgres://plume:plume@localhost/plume` by default). +- `POSTGRES_USER`: if you just want to use a different PostgreSQL user name, and keep the rest of the default URL. +- `POSTGRES_PASSWORD`: same as `POSTGRES_USER`, but for the password. +- `USE_HTTPS`: if it is `0`, federation and medias will be using HTTP by default (`1` by default). +- `ROCKET_ADDRESS`: the adress on which Plume should listen (`0.0.0.0` by default). +- `ROCKET_PORT`: the port on which Plume should listen ([`7878` by default](https://twitter.com/ag_dubs/status/852559264510070784)) +- `ROCKET_SECRET_KEY`: key used to sign private cookies and for CSRF protection. If it is not set, it will be regenerated everytime you restart Plume, +meaning that all your users will get disconnected. You can generate one with `openssl rand -base64 32`. + +## Diesel + +Diesel, the tool we use to run migrations may be configured with the `DATABASE_URL` which should contain the URL of the +PostgreSQL database. Otherwise, you can specify `--database-url YOUR-URL` everytime you run a `diesel` command. + diff --git a/docs/INSTALL.md b/docs/INSTALL.md index 19ec3b3f..0a398e4f 100644 --- a/docs/INSTALL.md +++ b/docs/INSTALL.md @@ -17,6 +17,9 @@ All the following instructions will need a terminal. Here are the commands to install PostgreSQL and GetText on various operating systems. Some of them may need root permissions. +You can also install the project using Docker and docker-compose, please refer +to the `Docker install` section. + On **Debian**: ```bash @@ -58,7 +61,7 @@ Creating a new user will let you use systemd to manage Plume if you want (see th ## Installing Rust and Cargo -We said that Plume needed Rust and Cargo to work, but we didn't installed them at the same time as PostgreSQL and GetText, because there is an universal installation method called RustUp. +We said that Plume needed Rust and Cargo to work, but we didn't install them at the same time as PostgreSQL and GetText, because there is an universal installation method called RustUp. You can install it on **GNU/Linux** and **Mac OS X** with: @@ -90,7 +93,7 @@ cd Plume cargo build ``` -We may provide precompiled packages and Docker images in the future (if you have experience in these fields and want to help, you're welcome). +We may provide precompiled packages and Docker images in the future; if you have experience in these fields and want to help, feel free to discuss this in issues and to propose pull-requests! ## Configuring PostgreSQL @@ -102,7 +105,7 @@ In the first case, just run this command after the PostgreSQL installation, to s service postgresql start ``` -If you want to have two separate machines, run these commands on the database server after you installed the dependencies mentionned above on both servers: +If you want to have two separate machines, run these commands on the database server once you've installed the dependencies mentioned above on both servers: ```bash service postgresql start @@ -114,13 +117,13 @@ createdb -O plume plume ## Running migrations -Migrations are scripts to update the database. They are run by a tool called Diesel, which can be installed with: +Migrations are scripts used to update the database. They are run by a tool called Diesel, which can be installed with: ```bash cargo install diesel_cli --no-default-features --features postgres --version '=1.2.0' ``` -Plume should normally run migrations for you when needed, but if you want to run them manually, the command is: +Plume should normally run migrations on your behalf as needed, but if you want to run them manually, use the following command: ```bash diesel migration run --database-url postgres://USER:PASSWORD@IP:PORT/plume @@ -144,6 +147,35 @@ mkdir media cargo run ``` +## Docker install + +You can use `docker` and `docker-compose` in order to manage your Plume instance and +have it isolated from your host: + +``` +git clone git@github.com:Plume-org/Plume.git +cd Plume +cp docs/docker-compose.sample.yml docker-compose.yml +cp docs/docker.sample.env .env +# build the containers +docker-compose build +# launch the database +docker-compose up -d postgres +# run the migrations +docker-compose run --rm plume diesel migration run +# run interactive setup +docker-compose run --rm plume bash +cargo run +# copy the env file and paste it in your host .env file +cat .env +# leave the container +exit +# launch your instance for good +docker-compose up -d +``` + +Then, you can configure your reverse proxy. + ## Configuring Nginx Here is a sample Nginx configuration for a Plume instance (replace `blog.example.com` with your domain name): @@ -151,6 +183,7 @@ Here is a sample Nginx configuration for a Plume instance (replace `blog.example ```nginx server { listen 80; + listen [::]:80; server_name blog.example.com; location /.well-known/acme-challenge {} @@ -160,11 +193,13 @@ server { } server { + listen 443 ssl http2; + listen [::]:443 ssl http2; server_name blog.example.org; + access_log /var/log/nginx/access.log; root /home/plume/Plume/ ; - listen [::]:443 ssl; # managed by Certbot SSLCertificateFile /etc/letsencrypt/live/blog.example.com/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/blog.example.com/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/blog.example.com/chain.pem @@ -207,7 +242,7 @@ server { ## Configuring Apache -If you prefer Apache, you can use this configuration (here too replace `blog.example.com` with your domain): +If you prefer Apache, you can use this configuration (here too, replace `blog.example.com` with your domain): ```apache @@ -379,10 +414,10 @@ exit 0 ## Caveats: -- Pgbouncer is not yet supported (named transactions are used). +- Pgbouncer is not supported yet (named transactions are used). - Rust nightly is a moving target, dependancies can break and sometimes you need to check a few versions to find the one working (run `rustup override set nightly-2018-05-15` or `rustup override set nightly-2018-05-31` in the Plume directory if you have issues during the compilation) - Rust nightly 2018-06-28 is known to be failing to compile diesel 1.3.2 ## Acknowledgements -Most of this documentation have been written by *gled-rs*. The systemd unit file, Nginx and Apache configurations have been written by *nonbinaryanargeek*. Some parts (especially the instructions to install native dependencies) are from the [Aardwolf project](https://github.com/Aardwolf-Social/aardwolf). +Most of this documentation has been written by *gled-rs*. The systemd unit file, Nginx and Apache configurations have been written by *nonbinaryanargeek*. Some parts (especially the instructions to install native dependencies) are from the [Aardwolf project](https://github.com/Aardwolf-Social/aardwolf). diff --git a/docs/README.md b/docs/README.md index 2133ad71..b7497597 100644 --- a/docs/README.md +++ b/docs/README.md @@ -2,5 +2,6 @@ - [Installing Plume (for development or production)](INSTALL.md) - [Updating your instance](UPDATE.md) +- [Useful Environment Variables](ENV-VARS.md) - [Development Guide](DEVELOPMENT.md) - [Making Plume available in your language](INTERNATIONALIZATION.md) diff --git a/docs/docker-compose.sample.yml b/docs/docker-compose.sample.yml new file mode 100644 index 00000000..65150e5a --- /dev/null +++ b/docs/docker-compose.sample.yml @@ -0,0 +1,18 @@ +version: '3' + +services: + postgres: + image: postgres:10.5 + env_file: .env + restart: unless-stopped + volumes: + - "./data/postgres:/var/lib/postgresql/data" + plume: + build: . + env_file: .env + restart: unless-stopped + volumes: + - "./data/plume/static/media:/app/media" + - "./.env:/app/.env" + ports: + - "127.0.0.1:7878:7878" diff --git a/docs/docker.sample.env b/docs/docker.sample.env new file mode 100644 index 00000000..97085734 --- /dev/null +++ b/docs/docker.sample.env @@ -0,0 +1,12 @@ +BASE_URL=yourdomain.com +# generate one with openssl rand -base64 45 +ROCKET_SECRET_KEY=randomstringhere + +# you can safely leave those defaults +POSTGRES_USER=plume +POSTGRES_PASSWORD=plume +DB_URL=postgres://plume:plume@postgres:5432/plume +DATABASE_URL=postgres://plume:plume@postgres:5432/plume +USE_HTTPS=1 +ROCKET_ADDRESS=0.0.0.0 +ROCKET_PORT=7878 diff --git a/migrations/2018-09-04-103017_follows_add_ap_url/down.sql b/migrations/2018-09-04-103017_follows_add_ap_url/down.sql new file mode 100644 index 00000000..a1d36e37 --- /dev/null +++ b/migrations/2018-09-04-103017_follows_add_ap_url/down.sql @@ -0,0 +1,2 @@ +-- This file should undo anything in `up.sql` +ALTER TABLE follows DROP COLUMN ap_url; diff --git a/migrations/2018-09-04-103017_follows_add_ap_url/up.sql b/migrations/2018-09-04-103017_follows_add_ap_url/up.sql new file mode 100644 index 00000000..e4c7d949 --- /dev/null +++ b/migrations/2018-09-04-103017_follows_add_ap_url/up.sql @@ -0,0 +1,2 @@ +-- Your SQL goes here +ALTER TABLE follows ADD COLUMN ap_url TEXT NOT NULL DEFAULT ''; diff --git a/migrations/2018-09-04-104828_posts_add_subtitle/down.sql b/migrations/2018-09-04-104828_posts_add_subtitle/down.sql new file mode 100644 index 00000000..0c39127b --- /dev/null +++ b/migrations/2018-09-04-104828_posts_add_subtitle/down.sql @@ -0,0 +1,2 @@ +-- This file should undo anything in `up.sql` +ALTER TABLE posts DROP COLUMN subtitle; diff --git a/migrations/2018-09-04-104828_posts_add_subtitle/up.sql b/migrations/2018-09-04-104828_posts_add_subtitle/up.sql new file mode 100644 index 00000000..17ab4754 --- /dev/null +++ b/migrations/2018-09-04-104828_posts_add_subtitle/up.sql @@ -0,0 +1,2 @@ +-- Your SQL goes here +ALTER TABLE posts ADD COLUMN subtitle TEXT NOT NULL DEFAULT ''; diff --git a/migrations/2018-09-05-174106_create_tags/down.sql b/migrations/2018-09-05-174106_create_tags/down.sql new file mode 100644 index 00000000..43c79a4b --- /dev/null +++ b/migrations/2018-09-05-174106_create_tags/down.sql @@ -0,0 +1,2 @@ +-- This file should undo anything in `up.sql` +DROP TABLE tags; diff --git a/migrations/2018-09-05-174106_create_tags/up.sql b/migrations/2018-09-05-174106_create_tags/up.sql new file mode 100644 index 00000000..9ef32855 --- /dev/null +++ b/migrations/2018-09-05-174106_create_tags/up.sql @@ -0,0 +1,7 @@ +-- Your SQL goes here +CREATE TABLE tags ( + id SERIAL PRIMARY KEY, + tag TEXT NOT NULL DEFAULT '', + is_hastag BOOLEAN NOT NULL DEFAULT 'f', + post_id INTEGER REFERENCES posts(id) ON DELETE CASCADE NOT NULL +) diff --git a/migrations/2018-09-06-182637_posts_add_source/down.sql b/migrations/2018-09-06-182637_posts_add_source/down.sql new file mode 100644 index 00000000..43773773 --- /dev/null +++ b/migrations/2018-09-06-182637_posts_add_source/down.sql @@ -0,0 +1,2 @@ +-- This file should undo anything in `up.sql` +ALTER TABLE posts DROP COLUMN source; diff --git a/migrations/2018-09-06-182637_posts_add_source/up.sql b/migrations/2018-09-06-182637_posts_add_source/up.sql new file mode 100644 index 00000000..a880b5ba --- /dev/null +++ b/migrations/2018-09-06-182637_posts_add_source/up.sql @@ -0,0 +1,2 @@ +-- Your SQL goes here +ALTER TABLE posts ADD COLUMN source TEXT NOT NULL DEFAULT ''; diff --git a/migrations/2018-09-07-212003_fix_avatar_deletion/down.sql b/migrations/2018-09-07-212003_fix_avatar_deletion/down.sql new file mode 100644 index 00000000..a3f0047d --- /dev/null +++ b/migrations/2018-09-07-212003_fix_avatar_deletion/down.sql @@ -0,0 +1,7 @@ +-- This file should undo anything in `up.sql` +ALTER TABLE users + DROP CONSTRAINT users_avatar_id_fkey, + ADD CONSTRAINT users_avatar_id_fkey + FOREIGN KEY (avatar_id) + REFERENCES medias(id) + ON DELETE CASCADE; diff --git a/migrations/2018-09-07-212003_fix_avatar_deletion/up.sql b/migrations/2018-09-07-212003_fix_avatar_deletion/up.sql new file mode 100644 index 00000000..780af5ab --- /dev/null +++ b/migrations/2018-09-07-212003_fix_avatar_deletion/up.sql @@ -0,0 +1,7 @@ +-- Your SQL goes here +ALTER TABLE users + DROP CONSTRAINT users_avatar_id_fkey, + ADD CONSTRAINT users_avatar_id_fkey + FOREIGN KEY (avatar_id) + REFERENCES medias(id) + ON DELETE SET NULL; diff --git a/plume-common/Cargo.toml b/plume-common/Cargo.toml index 27cc3121..eae12811 100644 --- a/plume-common/Cargo.toml +++ b/plume-common/Cargo.toml @@ -14,10 +14,10 @@ failure_derive = "0.1" gettext-rs = "0.4" heck = "0.3.0" hex = "0.3" -hyper = "*" -openssl = "0.10.6" +hyper = "0.11.27" +openssl = "0.10.11" reqwest = "0.8" -serde = "*" +serde = "1.0" serde_derive = "1.0" serde_json = "1.0" @@ -31,4 +31,4 @@ version = "0.1.2" [dependencies.rocket] git = "https://github.com/SergioBenitez/Rocket" -rev = "df7111143e466c18d1f56377a8d9530a5a306aba" +rev = "55459db7732b9a240826a5c120c650f87e3372ce" diff --git a/plume-common/src/activity_pub/mod.rs b/plume-common/src/activity_pub/mod.rs index 626bdc18..fbaf3c1a 100644 --- a/plume-common/src/activity_pub/mod.rs +++ b/plume-common/src/activity_pub/mod.rs @@ -91,7 +91,7 @@ impl<'a, 'r> FromRequest<'a, 'r> for ApRequest { } } -pub fn broadcast(sender: &S, act: A, to: Vec) { +pub fn broadcast(sender: &S, act: A, to: Vec) { let boxes = to.into_iter() .filter(|u| !u.is_local()) .map(|u| u.get_shared_inbox_url().unwrap_or(u.get_inbox_url())) @@ -158,3 +158,30 @@ pub struct PublicKey { #[activitystreams(concrete(String), functional)] pub public_key_pem: Option } + +#[derive(Clone, Debug, Default, UnitString)] +#[activitystreams(Hashtag)] +pub struct HashtagType; + +#[derive(Clone, Debug, Default, Deserialize, Serialize, Properties)] +#[serde(rename_all = "camelCase")] +pub struct Hashtag { + #[serde(rename = "type")] + kind: HashtagType, + + #[activitystreams(concrete(String), functional)] + pub href: Option, + + #[activitystreams(concrete(String), functional)] + pub name: Option, +} + +#[derive(Clone, Debug, Default, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct Source { + pub media_type: String, + + pub content: String, +} + +impl Object for Source {} diff --git a/plume-common/src/lib.rs b/plume-common/src/lib.rs index edf731ae..6625b0a8 100644 --- a/plume-common/src/lib.rs +++ b/plume-common/src/lib.rs @@ -19,6 +19,7 @@ extern crate openssl; extern crate pulldown_cmark; extern crate reqwest; extern crate rocket; +extern crate serde; #[macro_use] extern crate serde_derive; #[macro_use] diff --git a/plume-common/src/utils.rs b/plume-common/src/utils.rs index 8e1acbaa..d425fa5c 100644 --- a/plume-common/src/utils.rs +++ b/plume-common/src/utils.rs @@ -17,7 +17,7 @@ pub fn make_actor_id(name: String) -> String { } pub fn requires_login(message: &str, url: Uri) -> Flash { - Flash::new(Redirect::to(Uri::new(format!("/login?m={}", gettext(message.to_string())))), "callback", url.as_str()) + Flash::new(Redirect::to(format!("/login?m={}", gettext(message.to_string()))), "callback", url.to_string()) } /// Returns (HTML, mentions) diff --git a/plume-models/Cargo.toml b/plume-models/Cargo.toml index 8d795719..cf2f6568 100644 --- a/plume-models/Cargo.toml +++ b/plume-models/Cargo.toml @@ -5,13 +5,13 @@ authors = ["Baptiste Gelez "] [dependencies] activitypub = "0.1.1" -ammonia = "1.1.0" +ammonia = "1.2.0" bcrypt = "0.2" heck = "0.3.0" lazy_static = "*" -openssl = "0.10.6" +openssl = "0.10.11" reqwest = "0.8" -serde = "*" +serde = "1.0" serde_derive = "1.0" serde_json = "1.0" url = "1.7" @@ -23,11 +23,11 @@ version = "0.4" [dependencies.diesel] features = ["postgres", "r2d2", "chrono"] -version = "*" +version = "1.3.2" [dependencies.plume-common] path = "../plume-common" [dependencies.rocket] git = "https://github.com/SergioBenitez/Rocket" -rev = "df7111143e466c18d1f56377a8d9530a5a306aba" +rev = "55459db7732b9a240826a5c120c650f87e3372ce" diff --git a/plume-models/src/comments.rs b/plume-models/src/comments.rs index b7511d8d..040193e0 100644 --- a/plume-models/src/comments.rs +++ b/plume-models/src/comments.rs @@ -12,7 +12,6 @@ use plume_common::activity_pub::{ inbox::{FromActivity, Notify} }; use plume_common::utils; -use {get_next_id, ap_url}; use instance::Instance; use mentions::Mention; use notifications::*; @@ -57,7 +56,7 @@ impl Comment { } pub fn get_post(&self, conn: &PgConnection) -> Post { - Post::get(conn, self.post_id).unwrap() + Post::get(conn, self.post_id).unwrap() } pub fn count_local(conn: &PgConnection) -> usize { @@ -83,8 +82,54 @@ impl Comment { json } + pub fn update_ap_url(&self, conn: &PgConnection) -> Comment { + if self.ap_url.is_none() { + diesel::update(self) + .set(comments::ap_url.eq(self.compute_id(conn))) + .get_result(conn) + .expect("Failed to update comment AP URL") + } else { + self.clone() + } + } + pub fn compute_id(&self, conn: &PgConnection) -> String { - ap_url(format!("{}#comment-{}", self.get_post(conn).ap_url, self.id)) + format!("{}comment/{}", self.get_post(conn).ap_url, self.id) + } + + pub fn into_activity(&self, conn: &PgConnection) -> Note { + let (html, mentions) = utils::md_to_html(self.content.get().as_ref()); + + let author = User::get(conn, self.author_id).unwrap(); + let mut note = Note::default(); + let to = vec![Id::new(PUBLIC_VISIBILTY.to_string())]; + + note.object_props.set_id_string(self.ap_url.clone().unwrap_or(String::new())).expect("NewComment::create: note.id error"); + note.object_props.set_summary_string(self.spoiler_text.clone()).expect("NewComment::create: note.summary error"); + note.object_props.set_content_string(html).expect("NewComment::create: note.content error"); + note.object_props.set_in_reply_to_link(Id::new(self.in_response_to_id.map_or_else(|| Post::get(conn, self.post_id).unwrap().ap_url, |id| { + let comm = Comment::get(conn, id).unwrap(); + comm.ap_url.clone().unwrap_or(comm.compute_id(conn)) + }))).expect("NewComment::create: note.in_reply_to error"); + note.object_props.set_published_string(chrono::Utc::now().to_rfc3339()).expect("NewComment::create: note.published error"); + note.object_props.set_attributed_to_link(author.clone().into_id()).expect("NewComment::create: note.attributed_to error"); + note.object_props.set_to_link_vec(to.clone()).expect("NewComment::create: note.to error"); + note.object_props.set_tag_link_vec(mentions.into_iter().map(|m| Mention::build_activity(conn, m)).collect::>()) + .expect("NewComment::create: note.tag error"); + note + } + + pub fn create_activity(&self, conn: &PgConnection) -> Create { + let author = User::get(conn, self.author_id).unwrap(); + + let note = self.into_activity(conn); + let mut act = Create::default(); + act.create_props.set_actor_link(author.into_id()).expect("NewComment::create_acitivity: actor error"); + act.create_props.set_object_object(note.clone()).expect("NewComment::create_acitivity: object error"); + act.object_props.set_id_string(format!("{}/activity", self.ap_url.clone().unwrap())).expect("NewComment::create_acitivity: id error"); + act.object_props.set_to_link_vec(note.object_props.to_link_vec::().expect("WTF")).expect("NewComment::create_acitivity: to error"); + act.object_props.set_cc_link_vec::(vec![]).expect("NewComment::create_acitivity: cc error"); + act } } @@ -105,12 +150,15 @@ impl FromActivity for Comment { sensitive: false // "sensitive" is not a standard property, we need to think about how to support it with the activitypub crate }); - // save mentionsd + // save mentions if let Some(serde_json::Value::Array(tags)) = note.object_props.tag.clone() { for tag in tags.into_iter() { serde_json::from_value::(tag) - .map(|m| Mention::from_activity(conn, m, comm.id, false)) - .ok(); + .map(|m| { + let author = &Post::get(conn, comm.post_id).unwrap().get_authors(conn)[0]; + let not_author = m.link_props.href_string().expect("Comment mention: no href") != author.ap_url.clone(); + Mention::from_activity(conn, m, comm.id, false, not_author) + }).ok(); } } @@ -130,72 +178,3 @@ impl Notify for Comment { } } } - -impl NewComment { - pub fn build() -> Self { - NewComment::default() - } - - pub fn content>(mut self, val: T) -> Self { - self.content = SafeString::new(val.as_ref()); - self - } - - pub fn in_response_to_id(mut self, val: Option) -> Self { - self.in_response_to_id = val; - self - } - - pub fn post(mut self, post: Post) -> Self { - self.post_id = post.id; - self - } - - pub fn author(mut self, author: User) -> Self { - self.author_id = author.id; - self - } - - pub fn create(mut self, conn: &PgConnection) -> (Create, i32) { - let post = Post::get(conn, self.post_id).unwrap(); - // We have to manually compute it since the new comment haven't been inserted yet, and it needs the activity we are building to be created - let next_id = get_next_id(conn, "comments_id_seq"); - self.ap_url = Some(format!("{}#comment-{}", post.ap_url, next_id)); - self.sensitive = false; - self.spoiler_text = String::new(); - - let (html, mentions) = utils::md_to_html(self.content.get().as_ref()); - - let author = User::get(conn, self.author_id).unwrap(); - let mut note = Note::default(); - let mut to = author.get_followers(conn).into_iter().map(User::into_id).collect::>(); - to.append(&mut post - .get_authors(conn) - .into_iter() - .flat_map(|a| a.get_followers(conn)) - .map(User::into_id) - .collect::>()); - to.push(Id::new(PUBLIC_VISIBILTY.to_string())); - - note.object_props.set_id_string(self.ap_url.clone().unwrap_or(String::new())).expect("NewComment::create: note.id error"); - note.object_props.set_summary_string(self.spoiler_text.clone()).expect("NewComment::create: note.summary error"); - note.object_props.set_content_string(html).expect("NewComment::create: note.content error"); - note.object_props.set_in_reply_to_link(Id::new(self.in_response_to_id.map_or_else(|| Post::get(conn, self.post_id).unwrap().ap_url, |id| { - let comm = Comment::get(conn, id).unwrap(); - comm.ap_url.clone().unwrap_or(comm.compute_id(conn)) - }))).expect("NewComment::create: note.in_reply_to error"); - note.object_props.set_published_string(chrono::Utc::now().to_rfc3339()).expect("NewComment::create: note.published error"); - note.object_props.set_attributed_to_link(author.clone().into_id()).expect("NewComment::create: note.attributed_to error"); - note.object_props.set_to_link_vec(to.clone()).expect("NewComment::create: note.to error"); - note.object_props.set_tag_link_vec(mentions.into_iter().map(|m| Mention::build_activity(conn, m)).collect::>()) - .expect("NewComment::create: note.tag error"); - - let mut act = Create::default(); - act.create_props.set_actor_link(author.into_id()).expect("NewComment::create: actor error"); - act.create_props.set_object_object(note).expect("NewComment::create: object error"); - act.object_props.set_id_string(format!("{}/activity", self.ap_url.clone().unwrap())).expect("NewComment::create: id error"); - act.object_props.set_to_link_vec(to).expect("NewComment::create: to error"); - act.object_props.set_cc_link_vec::(vec![]).expect("NewComment::create: cc error"); - (act, next_id) - } -} diff --git a/plume-models/src/follows.rs b/plume-models/src/follows.rs index 57e26fa4..9c29aacc 100644 --- a/plume-models/src/follows.rs +++ b/plume-models/src/follows.rs @@ -1,7 +1,7 @@ -use activitypub::{Actor, activity::{Accept, Follow as FollowAct}, actor::Person}; +use activitypub::{Actor, activity::{Accept, Follow as FollowAct, Undo}, actor::Person}; use diesel::{self, PgConnection, ExpressionMethods, QueryDsl, RunQueryDsl}; -use plume_common::activity_pub::{broadcast, Id, IntoId, inbox::{FromActivity, Notify, WithInbox}, sign::Signer}; +use plume_common::activity_pub::{broadcast, Id, IntoId, inbox::{FromActivity, Notify, WithInbox, Deletable}, sign::Signer}; use blogs::Blog; use notifications::*; use users::User; @@ -12,19 +12,42 @@ use schema::follows; pub struct Follow { pub id: i32, pub follower_id: i32, - pub following_id: i32 + pub following_id: i32, + pub ap_url: String, } #[derive(Insertable)] #[table_name = "follows"] pub struct NewFollow { pub follower_id: i32, - pub following_id: i32 + pub following_id: i32, + pub ap_url: String, } impl Follow { insert!(follows, NewFollow); get!(follows); + find_by!(follows, find_by_ap_url, ap_url as String); + + pub fn find(conn: &PgConnection, from: i32, to: i32) -> Option { + follows::table.filter(follows::follower_id.eq(from)) + .filter(follows::following_id.eq(to)) + .get_result(conn) + .ok() + } + + pub fn into_activity(&self, conn: &PgConnection) -> FollowAct { + let user = User::get(conn, self.follower_id).unwrap(); + let target = User::get(conn, self.following_id).unwrap(); + + let mut act = FollowAct::default(); + act.follow_props.set_actor_link::(user.clone().into_id()).expect("Follow::into_activity: actor error"); + act.follow_props.set_object_object(user.into_activity(&*conn)).unwrap(); + act.object_props.set_id_string(self.ap_url.clone()).unwrap(); + act.object_props.set_to_link(target.clone().into_id()).expect("New Follow error while setting 'to'"); + act.object_props.set_cc_link_vec::(vec![]).expect("New Follow error while setting 'cc'"); + act + } /// from -> The one sending the follow request /// target -> The target of the request, responding with Accept @@ -36,9 +59,12 @@ impl Follow { from_id: i32, target_id: i32 ) -> Follow { + let from_url: String = from.clone().into_id().into(); + let target_url: String = target.clone().into_id().into(); let res = Follow::insert(conn, NewFollow { follower_id: from_id, - following_id: target_id + following_id: target_id, + ap_url: format!("{}/follow/{}", from_url, target_url), }); let mut accept = Accept::default(); @@ -77,3 +103,26 @@ impl Notify for Follow { }); } } + +impl Deletable for Follow { + fn delete(&self, conn: &PgConnection) -> Undo { + diesel::delete(self).execute(conn).expect("Coudn't delete follow"); + + // delete associated notification if any + if let Some(notif) = Notification::find(conn, notification_kind::FOLLOW, self.id) { + diesel::delete(¬if).execute(conn).expect("Couldn't delete follow notification"); + } + + let mut undo = Undo::default(); + undo.undo_props.set_actor_link(User::get(conn, self.follower_id).unwrap().into_id()).expect("Follow::delete: actor error"); + undo.object_props.set_id_string(format!("{}/undo", self.ap_url)).expect("Follow::delete: id error"); + undo.undo_props.set_object_object(self.into_activity(conn)).expect("Follow::delete: object error"); + undo + } + + fn delete_id(id: String, conn: &PgConnection) { + if let Some(follow) = Follow::find_by_ap_url(conn, id) { + follow.delete(conn); + } + } +} diff --git a/plume-models/src/instance.rs b/plume-models/src/instance.rs index d0d553ed..52830aa6 100644 --- a/plume-models/src/instance.rs +++ b/plume-models/src/instance.rs @@ -52,6 +52,14 @@ impl Instance { .expect("Error loading remote instances infos") } + pub fn page(conn: &PgConnection, (min, max): (i32, i32)) -> Vec { + instances::table.order(instances::public_domain.asc()) + .offset(min.into()) + .limit((max - min).into()) + .load::(conn) + .expect("Error loading a page of instances") + } + pub fn local_id(conn: &PgConnection) -> i32 { Instance::get_local(conn).unwrap().id } @@ -60,8 +68,24 @@ impl Instance { get!(instances); find_by!(instances, find_by_domain, public_domain as String); - pub fn block(&self) { - unimplemented!() + pub fn toggle_block(&self, conn: &PgConnection) { + diesel::update(self) + .set(instances::blocked.eq(!self.blocked)) + .get_result::(conn) + .expect("Couldn't block/unblock instance"); + } + + /// id: AP object id + pub fn is_blocked(conn: &PgConnection, id: String) -> bool { + for block in instances::table.filter(instances::blocked.eq(true)) + .get_results::(conn) + .expect("Error listing blocked instances") { + if id.starts_with(format!("https://{}", block.public_domain).as_str()) { + return true; + } + } + + false } pub fn has_admin(&self, conn: &PgConnection) -> bool { diff --git a/plume-models/src/lib.rs b/plume-models/src/lib.rs index f2c80c62..c44dfa58 100644 --- a/plume-models/src/lib.rs +++ b/plume-models/src/lib.rs @@ -1,3 +1,5 @@ +#![allow(proc_macro_derive_resolution_fallback)] // This can be removed after diesel-1.4 + extern crate activitypub; extern crate ammonia; extern crate bcrypt; @@ -19,7 +21,6 @@ extern crate serde_json; extern crate url; extern crate webfinger; -use diesel::{PgConnection, RunQueryDsl, select}; use std::env; macro_rules! find_by { @@ -71,19 +72,17 @@ macro_rules! insert { }; } -sql_function!(nextval, nextval_t, (seq: ::diesel::sql_types::Text) -> ::diesel::sql_types::BigInt); -sql_function!(setval, setval_t, (seq: ::diesel::sql_types::Text, val: ::diesel::sql_types::BigInt) -> ::diesel::sql_types::BigInt); - -fn get_next_id(conn: &PgConnection, seq: &str) -> i32 { - // We cant' use currval because it may fail if nextval have never been called before - let next = select(nextval(seq)).get_result::(conn).expect("Next ID fail"); - if next > 1 { - select(setval(seq, next - 1)).get_result::(conn).expect("Reset ID fail"); - } - next as i32 +macro_rules! update { + ($table:ident) => { + pub fn update(&self, conn: &PgConnection) -> Self { + diesel::update(self) + .set(self) + .get_result(conn) + .expect(concat!("Error updating ", stringify!($table))) + } + }; } - lazy_static! { pub static ref BASE_URL: String = env::var("BASE_URL") .unwrap_or(format!("127.0.0.1:{}", env::var("ROCKET_PORT").unwrap_or(String::from("8000")))); @@ -119,4 +118,5 @@ pub mod posts; pub mod reshares; pub mod safe_string; pub mod schema; +pub mod tags; pub mod users; diff --git a/plume-models/src/likes.rs b/plume-models/src/likes.rs index f0a3973c..9bf1bec3 100644 --- a/plume-models/src/likes.rs +++ b/plume-models/src/likes.rs @@ -91,6 +91,11 @@ impl Deletable for Like { fn delete(&self, conn: &PgConnection) -> activity::Undo { diesel::delete(self).execute(conn).unwrap(); + // delete associated notification if any + if let Some(notif) = Notification::find(conn, notification_kind::LIKE, self.id) { + diesel::delete(¬if).execute(conn).expect("Couldn't delete like notification"); + } + let mut act = activity::Undo::default(); act.undo_props.set_actor_link(User::get(conn, self.user_id).unwrap().into_id()).expect("Like::delete: actor error"); act.undo_props.set_object_object(self.into_activity(conn)).expect("Like::delete: object error"); @@ -100,7 +105,7 @@ impl Deletable for Like { act } - + fn delete_id(id: String, conn: &PgConnection) { if let Some(like) = Like::find_by_ap_url(conn, id.into()) { like.delete(conn); diff --git a/plume-models/src/mentions.rs b/plume-models/src/mentions.rs index c338a5cb..237a49a7 100644 --- a/plume-models/src/mentions.rs +++ b/plume-models/src/mentions.rs @@ -69,7 +69,7 @@ impl Mention { mention } - pub fn from_activity(conn: &PgConnection, ment: link::Mention, inside: i32, in_post: bool) -> Option { + pub fn from_activity(conn: &PgConnection, ment: link::Mention, inside: i32, in_post: bool, notify: bool) -> Option { let ap_url = ment.link_props.href_string().ok()?; let mentioned = User::find_by_ap_url(conn, ap_url)?; @@ -81,7 +81,9 @@ impl Mention { comment_id: None, ap_url: ment.link_props.href_string().unwrap_or(String::new()) }); - res.notify(conn); + if notify { + res.notify(conn); + } res }) } else { @@ -92,7 +94,9 @@ impl Mention { comment_id: Some(comment.id), ap_url: ment.link_props.href_string().unwrap_or(String::new()) }); - res.notify(conn); + if notify { + res.notify(conn); + } res }) } diff --git a/plume-models/src/notifications.rs b/plume-models/src/notifications.rs index 33b06c1a..c30d16d2 100644 --- a/plume-models/src/notifications.rs +++ b/plume-models/src/notifications.rs @@ -56,6 +56,13 @@ impl Notification { .expect("Couldn't load user notifications page") } + pub fn find>(conn: &PgConnection, kind: S, obj: i32) -> Option { + notifications::table.filter(notifications::kind.eq(kind.into())) + .filter(notifications::object_id.eq(obj)) + .get_result::(conn) + .ok() + } + pub fn to_json(&self, conn: &PgConnection) -> serde_json::Value { let mut json = json!(self); json["object"] = json!(match self.kind.as_ref() { diff --git a/plume-models/src/posts.rs b/plume-models/src/posts.rs index 5b67a66d..3d1f6219 100644 --- a/plume-models/src/posts.rs +++ b/plume-models/src/posts.rs @@ -1,5 +1,5 @@ use activitypub::{ - activity::{Create, Delete}, + activity::{Create, Delete, Update}, link, object::{Article, Tombstone} }; @@ -9,6 +9,7 @@ use heck::KebabCase; use serde_json; use plume_common::activity_pub::{ + Hashtag, Source, PUBLIC_VISIBILTY, Id, IntoId, inbox::{Deletable, FromActivity} }; @@ -19,11 +20,12 @@ use likes::Like; use mentions::Mention; use post_authors::*; use reshares::Reshare; +use tags::Tag; use users::User; use schema::posts; use safe_string::SafeString; -#[derive(Queryable, Identifiable, Serialize, Clone)] +#[derive(Queryable, Identifiable, Serialize, Clone, AsChangeset)] pub struct Post { pub id: i32, pub blog_id: i32, @@ -33,45 +35,75 @@ pub struct Post { pub published: bool, pub license: String, pub creation_date: NaiveDateTime, - pub ap_url: String + pub ap_url: String, + pub subtitle: String, + pub source: String, } #[derive(Insertable)] #[table_name = "posts"] pub struct NewPost { - pub blog_id: i32, + pub blog_id: i32, pub slug: String, pub title: String, pub content: SafeString, pub published: bool, pub license: String, pub creation_date: Option, - pub ap_url: String + pub ap_url: String, + pub subtitle: String, + pub source: String, } impl Post { insert!(posts, NewPost); get!(posts); + update!(posts); find_by!(posts, find_by_slug, slug as String, blog_id as i32); find_by!(posts, find_by_ap_url, ap_url as String); + pub fn list_by_tag(conn: &PgConnection, tag: String, (min, max): (i32, i32)) -> Vec { + use schema::tags; + + let ids = tags::table.filter(tags::tag.eq(tag)).select(tags::post_id); + posts::table.filter(posts::id.eq(any(ids))) + .filter(posts::published.eq(true)) + .order(posts::creation_date.desc()) + .offset(min.into()) + .limit((max - min).into()) + .get_results::(conn) + .expect("Error loading posts by tag") + } + + pub fn count_for_tag(conn: &PgConnection, tag: String) -> i64 { + use schema::tags; + let ids = tags::table.filter(tags::tag.eq(tag)).select(tags::post_id); + posts::table.filter(posts::id.eq(any(ids))) + .filter(posts::published.eq(true)) + .count() + .get_result(conn) + .expect("Error counting posts by tag") + } + pub fn count_local(conn: &PgConnection) -> usize { use schema::post_authors; use schema::users; let local_authors = users::table.filter(users::instance_id.eq(Instance::local_id(conn))).select(users::id); let local_posts_id = post_authors::table.filter(post_authors::author_id.eq(any(local_authors))).select(post_authors::post_id); posts::table.filter(posts::id.eq(any(local_posts_id))) + .filter(posts::published.eq(true)) .load::(conn) .expect("Couldn't load local posts") .len() } pub fn count(conn: &PgConnection) -> i64 { - posts::table.count().get_result(conn).expect("Couldn't count posts") + posts::table.filter(posts::published.eq(true)).count().get_result(conn).expect("Couldn't count posts") } pub fn get_recents(conn: &PgConnection, limit: i64) -> Vec { posts::table.order(posts::creation_date.desc()) + .filter(posts::published.eq(true)) .limit(limit) .load::(conn) .expect("Error loading recent posts") @@ -82,6 +114,7 @@ impl Post { let posts = PostAuthor::belonging_to(author).select(post_authors::post_id); posts::table.filter(posts::id.eq(any(posts))) + .filter(posts::published.eq(true)) .order(posts::creation_date.desc()) .limit(limit) .load::(conn) @@ -90,6 +123,7 @@ impl Post { pub fn get_recents_for_blog(conn: &PgConnection, blog: &Blog, limit: i64) -> Vec { posts::table.filter(posts::blog_id.eq(blog.id)) + .filter(posts::published.eq(true)) .order(posts::creation_date.desc()) .limit(limit) .load::(conn) @@ -98,12 +132,14 @@ impl Post { pub fn get_for_blog(conn: &PgConnection, blog:&Blog) -> Vec { posts::table.filter(posts::blog_id.eq(blog.id)) + .filter(posts::published.eq(true)) .load::(conn) .expect("Error loading posts for blog") } pub fn blog_page(conn: &PgConnection, blog: &Blog, (min, max): (i32, i32)) -> Vec { posts::table.filter(posts::blog_id.eq(blog.id)) + .filter(posts::published.eq(true)) .order(posts::creation_date.desc()) .offset(min.into()) .limit((max - min).into()) @@ -111,14 +147,57 @@ impl Post { .expect("Error loading a page of posts for blog") } + /// Give a page of all the recent posts known to this instance (= federated timeline) pub fn get_recents_page(conn: &PgConnection, (min, max): (i32, i32)) -> Vec { posts::table.order(posts::creation_date.desc()) + .filter(posts::published.eq(true)) .offset(min.into()) .limit((max - min).into()) .load::(conn) .expect("Error loading recent posts page") } + /// Give a page of posts from a specific instance + pub fn get_instance_page(conn: &PgConnection, instance_id: i32, (min, max): (i32, i32)) -> Vec { + use schema::blogs; + + let blog_ids = blogs::table.filter(blogs::instance_id.eq(instance_id)).select(blogs::id); + + posts::table.order(posts::creation_date.desc()) + .filter(posts::published.eq(true)) + .filter(posts::blog_id.eq(any(blog_ids))) + .offset(min.into()) + .limit((max - min).into()) + .load::(conn) + .expect("Error loading local posts page") + } + + /// Give a page of customized user feed, based on a list of followed users + pub fn user_feed_page(conn: &PgConnection, followed: Vec, (min, max): (i32, i32)) -> Vec { + use schema::post_authors; + let post_ids = post_authors::table.filter(post_authors::author_id.eq(any(followed))) + .select(post_authors::post_id); + + posts::table.order(posts::creation_date.desc()) + .filter(posts::published.eq(true)) + .filter(posts::id.eq(any(post_ids))) + .offset(min.into()) + .limit((max - min).into()) + .load::(conn) + .expect("Error loading user feed page") + } + + pub fn drafts_by_author(conn: &PgConnection, author: &User) -> Vec { + use schema::post_authors; + + let posts = PostAuthor::belonging_to(author).select(post_authors::post_id); + posts::table.order(posts::creation_date.desc()) + .filter(posts::published.eq(false)) + .filter(posts::id.eq(any(posts))) + .load::(conn) + .expect("Error listing drafts") + } + pub fn get_authors(&self, conn: &PgConnection) -> Vec { use schema::users; use schema::post_authors; @@ -174,37 +253,85 @@ impl Post { let mut to = self.get_receivers_urls(conn); to.push(PUBLIC_VISIBILTY.to_string()); - let mentions = Mention::list_for_post(conn, self.id).into_iter().map(|m| m.to_activity(conn)).collect::>(); + let mut mentions_json = Mention::list_for_post(conn, self.id).into_iter().map(|m| json!(m.to_activity(conn))).collect::>(); + let mut tags_json = Tag::for_post(conn, self.id).into_iter().map(|t| json!(t.into_activity(conn))).collect::>(); + mentions_json.append(&mut tags_json); let mut article = Article::default(); - article.object_props.set_name_string(self.title.clone()).expect("Article::into_activity: name error"); - article.object_props.set_id_string(self.ap_url.clone()).expect("Article::into_activity: id error"); + article.object_props.set_name_string(self.title.clone()).expect("Post::into_activity: name error"); + article.object_props.set_id_string(self.ap_url.clone()).expect("Post::into_activity: id error"); let mut authors = self.get_authors(conn).into_iter().map(|x| Id::new(x.ap_url)).collect::>(); authors.push(self.get_blog(conn).into_id()); // add the blog URL here too - article.object_props.set_attributed_to_link_vec::(authors).expect("Article::into_activity: attributedTo error"); - article.object_props.set_content_string(self.content.get().clone()).expect("Article::into_activity: content error"); - article.object_props.set_published_utctime(Utc.from_utc_datetime(&self.creation_date)).expect("Article::into_activity: published error"); - article.object_props.set_tag_link_vec(mentions).expect("Article::into_activity: tag error"); - article.object_props.set_url_string(self.ap_url.clone()).expect("Article::into_activity: url error"); - article.object_props.set_to_link_vec::(to.into_iter().map(Id::new).collect()).expect("Article::into_activity: to error"); - article.object_props.set_cc_link_vec::(vec![]).expect("Article::into_activity: cc error"); + article.object_props.set_attributed_to_link_vec::(authors).expect("Post::into_activity: attributedTo error"); + article.object_props.set_content_string(self.content.get().clone()).expect("Post::into_activity: content error"); + article.ap_object_props.set_source_object(Source { + content: self.source.clone(), + media_type: String::from("text/markdown"), + }).expect("Post::into_activity: source error"); + article.object_props.set_published_utctime(Utc.from_utc_datetime(&self.creation_date)).expect("Post::into_activity: published error"); + article.object_props.set_summary_string(self.subtitle.clone()).expect("Post::into_activity: summary error"); + article.object_props.tag = Some(json!(mentions_json)); + article.object_props.set_url_string(self.ap_url.clone()).expect("Post::into_activity: url error"); + article.object_props.set_to_link_vec::(to.into_iter().map(Id::new).collect()).expect("Post::into_activity: to error"); + article.object_props.set_cc_link_vec::(vec![]).expect("Post::into_activity: cc error"); article } pub fn create_activity(&self, conn: &PgConnection) -> Create { let article = self.into_activity(conn); let mut act = Create::default(); - act.object_props.set_id_string(format!("{}/activity", self.ap_url)).expect("Article::create_activity: id error"); - act.object_props.set_to_link_vec::(article.object_props.to_link_vec().expect("Article::create_activity: Couldn't copy 'to'")) - .expect("Article::create_activity: to error"); - act.object_props.set_cc_link_vec::(article.object_props.cc_link_vec().expect("Article::create_activity: Couldn't copy 'cc'")) - .expect("Article::create_activity: cc error"); - act.create_props.set_actor_link(Id::new(self.get_authors(conn)[0].clone().ap_url)).expect("Article::create_activity: actor error"); - act.create_props.set_object_object(article).expect("Article::create_activity: object error"); + act.object_props.set_id_string(format!("{}activity", self.ap_url)).expect("Post::create_activity: id error"); + act.object_props.set_to_link_vec::(article.object_props.to_link_vec().expect("Post::create_activity: Couldn't copy 'to'")) + .expect("Post::create_activity: to error"); + act.object_props.set_cc_link_vec::(article.object_props.cc_link_vec().expect("Post::create_activity: Couldn't copy 'cc'")) + .expect("Post::create_activity: cc error"); + act.create_props.set_actor_link(Id::new(self.get_authors(conn)[0].clone().ap_url)).expect("Post::create_activity: actor error"); + act.create_props.set_object_object(article).expect("Post::create_activity: object error"); act } + pub fn update_activity(&self, conn: &PgConnection) -> Update { + let article = self.into_activity(conn); + let mut act = Update::default(); + act.object_props.set_id_string(format!("{}/update-{}", self.ap_url, Utc::now().timestamp())).expect("Post::update_activity: id error"); + act.object_props.set_to_link_vec::(article.object_props.to_link_vec().expect("Post::update_activity: Couldn't copy 'to'")) + .expect("Post::update_activity: to error"); + act.object_props.set_cc_link_vec::(article.object_props.cc_link_vec().expect("Post::update_activity: Couldn't copy 'cc'")) + .expect("Post::update_activity: cc error"); + act.update_props.set_actor_link(Id::new(self.get_authors(conn)[0].clone().ap_url)).expect("Post::update_activity: actor error"); + act.update_props.set_object_object(article).expect("Article::update_activity: object error"); + act + } + + pub fn handle_update(conn: &PgConnection, updated: Article) { + let id = updated.object_props.id_string().expect("Post::handle_update: id error"); + let mut post = Post::find_by_ap_url(conn, id).unwrap(); + + if let Ok(title) = updated.object_props.name_string() { + post.slug = title.to_kebab_case(); + post.title = title; + } + + if let Ok(content) = updated.object_props.content_string() { + post.content = SafeString::new(&content); + } + + if let Ok(subtitle) = updated.object_props.summary_string() { + post.subtitle = subtitle; + } + + if let Ok(ap_url) = updated.object_props.url_string() { + post.ap_url = ap_url; + } + + if let Ok(source) = updated.ap_object_props.source_object::() { + post.source = source.content; + } + + post.update(conn); + } + pub fn to_json(&self, conn: &PgConnection) -> serde_json::Value { let blog = self.get_blog(conn); json!({ @@ -212,7 +339,8 @@ impl Post { "author": self.get_authors(conn)[0].to_json(conn), "url": format!("/~/{}/{}/", blog.get_fqn(conn), self.slug), "date": self.creation_date.timestamp(), - "blog": blog.to_json(conn) + "blog": blog.to_json(conn), + "tags": Tag::for_post(&*conn, self.id) }) } @@ -250,7 +378,9 @@ impl FromActivity for Post { license: String::from("CC-0"), // TODO // FIXME: This is wrong: with this logic, we may use the display URL as the AP ID. We need two different fields ap_url: article.object_props.url_string().unwrap_or(article.object_props.id_string().expect("Post::from_activity: url + id error")), - creation_date: Some(article.object_props.published_utctime().expect("Post::from_activity: published error").naive_utc()) + creation_date: Some(article.object_props.published_utctime().expect("Post::from_activity: published error").naive_utc()), + subtitle: article.object_props.summary_string().expect("Post::from_activity: summary error"), + source: article.ap_object_props.source_object::().expect("Post::from_activity: source error").content }); for author in authors.into_iter() { @@ -260,11 +390,15 @@ impl FromActivity for Post { }); } - // save mentions + // save mentions and tags if let Some(serde_json::Value::Array(tags)) = article.object_props.tag.clone() { for tag in tags.into_iter() { - serde_json::from_value::(tag) - .map(|m| Mention::from_activity(conn, m, post.id, true)) + serde_json::from_value::(tag.clone()) + .map(|m| Mention::from_activity(conn, m, post.id, true, true)) + .ok(); + + serde_json::from_value::(tag.clone()) + .map(|t| Tag::from_activity(conn, t, post.id)) .ok(); } } diff --git a/plume-models/src/reshares.rs b/plume-models/src/reshares.rs index 734da12e..17012637 100644 --- a/plume-models/src/reshares.rs +++ b/plume-models/src/reshares.rs @@ -102,6 +102,11 @@ impl Deletable for Reshare { fn delete(&self, conn: &PgConnection) -> Undo { diesel::delete(self).execute(conn).unwrap(); + // delete associated notification if any + if let Some(notif) = Notification::find(conn, notification_kind::RESHARE, self.id) { + diesel::delete(¬if).execute(conn).expect("Couldn't delete reshare notification"); + } + let mut act = Undo::default(); act.undo_props.set_actor_link(User::get(conn, self.user_id).unwrap().into_id()).unwrap(); act.undo_props.set_object_object(self.into_activity(conn)).unwrap(); diff --git a/plume-models/src/schema.rs b/plume-models/src/schema.rs index 6a625bb8..7d51d678 100644 --- a/plume-models/src/schema.rs +++ b/plume-models/src/schema.rs @@ -42,6 +42,7 @@ table! { id -> Int4, follower_id -> Int4, following_id -> Int4, + ap_url -> Text, } } @@ -124,6 +125,8 @@ table! { license -> Varchar, creation_date -> Timestamp, ap_url -> Varchar, + subtitle -> Text, + source -> Text, } } @@ -137,6 +140,15 @@ table! { } } +table! { + tags (id) { + id -> Int4, + tag -> Text, + is_hastag -> Bool, + post_id -> Int4, + } +} + table! { users (id) { id -> Int4, @@ -176,6 +188,7 @@ joinable!(post_authors -> users (author_id)); joinable!(posts -> blogs (blog_id)); joinable!(reshares -> posts (post_id)); joinable!(reshares -> users (user_id)); +joinable!(tags -> posts (post_id)); joinable!(users -> instances (instance_id)); allow_tables_to_appear_in_same_query!( @@ -191,5 +204,6 @@ allow_tables_to_appear_in_same_query!( post_authors, posts, reshares, + tags, users, ); diff --git a/plume-models/src/tags.rs b/plume-models/src/tags.rs new file mode 100644 index 00000000..b8ac6147 --- /dev/null +++ b/plume-models/src/tags.rs @@ -0,0 +1,44 @@ +use diesel::{self, PgConnection, ExpressionMethods, RunQueryDsl, QueryDsl}; + +use plume_common::activity_pub::Hashtag; +use ap_url; +use instance::Instance; +use schema::tags; + +#[derive(Serialize, Queryable, Clone)] +pub struct Tag { + pub id: i32, + pub tag: String, + pub is_hastag: bool, + pub post_id: i32 +} + +#[derive(Insertable)] +#[table_name = "tags"] +pub struct NewTag { + pub tag: String, + pub is_hastag: bool, + pub post_id: i32 +} + +impl Tag { + insert!(tags, NewTag); + get!(tags); + find_by!(tags, find_by_name, tag as String); + list_by!(tags, for_post, post_id as i32); + + pub fn into_activity(&self, conn: &PgConnection) -> Hashtag { + let mut ht = Hashtag::default(); + ht.set_href_string(ap_url(format!("{}/tag/{}", Instance::get_local(conn).unwrap().public_domain, self.tag))).expect("Tag::into_activity: href error"); + ht.set_name_string(self.tag.clone()).expect("Tag::into_activity: name error"); + ht + } + + pub fn from_activity(conn: &PgConnection, tag: Hashtag, post: i32) -> Tag { + Tag::insert(conn, NewTag { + tag: tag.name_string().expect("Tag::from_activity: name error"), + is_hastag: false, + post_id: post + }) + } +} diff --git a/plume-models/src/users.rs b/plume-models/src/users.rs index 418a9888..9cfad4e3 100644 --- a/plume-models/src/users.rs +++ b/plume-models/src/users.rs @@ -100,6 +100,16 @@ impl User { find_by!(users, find_by_name, username as String, instance_id as i32); find_by!(users, find_by_ap_url, ap_url as String); + pub fn one_by_instance(conn: &PgConnection) -> Vec { + users::table.distinct_on(users::instance_id) + .get_results::(conn) + .expect("Error in User::on_by_instance") + } + + pub fn delete(&self, conn: &PgConnection) { + diesel::delete(self).execute(conn).expect("Couldn't remove user from DB"); + } + pub fn get_instance(&self, conn: &PgConnection) -> Instance { Instance::get(conn, self.instance_id).expect("Couldn't find instance") } @@ -297,6 +307,15 @@ impl User { } } + pub fn get_local_page(conn: &PgConnection, (min, max): (i32, i32)) -> Vec { + users::table.filter(users::instance_id.eq(1)) + .order(users::username.asc()) + .offset(min.into()) + .limit((max - min).into()) + .load::(conn) + .expect("Error getting local users page") + } + pub fn outbox(&self, conn: &PgConnection) -> ActivityStream { let acts = self.get_activities(conn); let n_acts = acts.len(); @@ -354,7 +373,10 @@ impl User { use schema::posts; use schema::post_authors; let posts_by_self = PostAuthor::belonging_to(self).select(post_authors::post_id); - let posts = posts::table.filter(posts::id.eq(any(posts_by_self))).load::(conn).unwrap(); + let posts = posts::table + .filter(posts::published.eq(true)) + .filter(posts::id.eq(any(posts_by_self))) + .load::(conn).unwrap(); posts.into_iter().map(|p| { serde_json::to_value(p.create_activity(conn)).unwrap() }).collect::>() @@ -567,7 +589,7 @@ impl WithInbox for User { } fn is_local(&self) -> bool { - self.instance_id == 0 + self.instance_id == 1 } } diff --git a/po/de.po b/po/de.po index e177a94a..38ac32e0 100644 --- a/po/de.po +++ b/po/de.po @@ -508,5 +508,123 @@ msgid "" "Sorry, but registrations are closed on this instance. Try to find another one" msgstr "" +#, fuzzy +msgid "Subtitle" +msgstr "Titel" + +msgid "Login to like" +msgstr "" + +msgid "Login to boost" +msgstr "" + +#, fuzzy +msgid "Your feed" +msgstr "Dein Kommentar" + +msgid "Federated feed" +msgstr "" + +msgid "Local feed" +msgstr "" + +msgid "Nothing to see here yet. Try to follow more people." +msgstr "" + +#, fuzzy +msgid "Articles" +msgstr "Artikel geschrieben haben" + +msgid "All the articles of the Fediverse" +msgstr "" + +#, fuzzy +msgid "Articles from {{ instance.name }}" +msgstr "Über {{ instance_name }}" + +msgid "View all" +msgstr "" + +#, fuzzy +msgid "Articles tagged \"{{ tag }}\"" +msgstr "Über {{ instance_name }}" + +msgid "Edit" +msgstr "" + +#, fuzzy +msgid "Edit {{ post }}" +msgstr "Kommentar \"{{ post }}\"" + +#, fuzzy +msgid "Update" +msgstr "Account aktualisieren" + +#, fuzzy +msgid "We couldn't find this page." +msgstr "Wir konnten diese Seite nicht finden." + +msgid "Invalid CSRF token." +msgstr "" + +msgid "" +"Something is wrong with your CSRF token. Make sure cookies are enabled in " +"you browser, and try reloading this page. If you continue to see this error " +"message, please report it." +msgstr "" + +#, fuzzy +msgid "Administration of {{ instance.name }}" +msgstr "Über {{ instance_name }}" + +#, fuzzy +msgid "Instances" +msgstr "Instanz-Einstellungen" + +msgid "Unblock" +msgstr "" + +msgid "Block" +msgstr "" + +msgid "Ban" +msgstr "" + +msgid "Useful for visually impaired people and licensing" +msgstr "" + +msgid "Let it empty if there is none" +msgstr "" + +msgid "Draft" +msgstr "" + +msgid "This is a draft, don't publish it yet." +msgstr "" + +msgid "Update or publish" +msgstr "" + +#, fuzzy +msgid "Your Drafts" +msgstr "Dein Dashboard" + +msgid "Danger zone" +msgstr "" + +msgid "Be very careful, any action taken here can't be cancelled." +msgstr "" + +#, fuzzy +msgid "Delete your account" +msgstr "Eigenen Account erstellen" + +msgid "Sorry, but as an admin, you can't leave your instance." +msgstr "" + +#, fuzzy +msgid "Users" +msgstr "Nutzername" + #~ msgid "Your password should be at least 8 characters long" #~ msgstr "Das Passwort sollte mindestens 8 Zeichen lang sein" diff --git a/po/en.po b/po/en.po index deccf96e..c3563044 100644 --- a/po/en.po +++ b/po/en.po @@ -497,3 +497,111 @@ msgstr "" msgid "" "Sorry, but registrations are closed on this instance. Try to find another one" msgstr "" + +msgid "Subtitle" +msgstr "" + +msgid "Login to like" +msgstr "" + +msgid "Login to boost" +msgstr "" + +msgid "Your feed" +msgstr "" + +msgid "Federated feed" +msgstr "" + +msgid "Local feed" +msgstr "" + +msgid "Nothing to see here yet. Try to follow more people." +msgstr "" + +msgid "Articles" +msgstr "" + +msgid "All the articles of the Fediverse" +msgstr "" + +#, fuzzy +msgid "Articles from {{ instance.name }}" +msgstr "Welcome on {{ instance_name }}" + +msgid "View all" +msgstr "" + +#, fuzzy +msgid "Articles tagged \"{{ tag }}\"" +msgstr "Welcome on {{ instance_name }}" + +msgid "Edit" +msgstr "" + +msgid "Edit {{ post }}" +msgstr "" + +msgid "Update" +msgstr "" + +msgid "We couldn't find this page." +msgstr "" + +msgid "Invalid CSRF token." +msgstr "" + +msgid "" +"Something is wrong with your CSRF token. Make sure cookies are enabled in " +"you browser, and try reloading this page. If you continue to see this error " +"message, please report it." +msgstr "" + +#, fuzzy +msgid "Administration of {{ instance.name }}" +msgstr "Welcome on {{ instance_name }}" + +msgid "Instances" +msgstr "" + +msgid "Unblock" +msgstr "" + +msgid "Block" +msgstr "" + +msgid "Ban" +msgstr "" + +msgid "Useful for visually impaired people and licensing" +msgstr "" + +msgid "Let it empty if there is none" +msgstr "" + +msgid "Draft" +msgstr "" + +msgid "This is a draft, don't publish it yet." +msgstr "" + +msgid "Update or publish" +msgstr "" + +msgid "Your Drafts" +msgstr "" + +msgid "Danger zone" +msgstr "" + +msgid "Be very careful, any action taken here can't be cancelled." +msgstr "" + +msgid "Delete your account" +msgstr "" + +msgid "Sorry, but as an admin, you can't leave your instance." +msgstr "" + +msgid "Users" +msgstr "" diff --git a/po/fr.po b/po/fr.po index e1f3d757..44d6677e 100644 --- a/po/fr.po +++ b/po/fr.po @@ -503,4 +503,117 @@ msgstr "Envoyer" msgid "" "Sorry, but registrations are closed on this instance. Try to find another one" -msgstr "Désolé, mais les inscriptions sont fermées sur cette instance. Essayez d'en trouver une autre." +msgstr "" +"Désolé, mais les inscriptions sont fermées sur cette instance. Essayez d'en " +"trouver une autre." + +msgid "Subtitle" +msgstr "Sous-titre" + +msgid "Login to like" +msgstr "Connectez-vous pour aimer." + +msgid "Login to boost" +msgstr "Connectez-vous pour booster." + +msgid "Your feed" +msgstr "Votre flux" + +msgid "Federated feed" +msgstr "Flux fédéré" + +msgid "Local feed" +msgstr "Flux local" + +msgid "Nothing to see here yet. Try to follow more people." +msgstr "Rien par ici pour le moment. Essayez de suivre plus de monde." + +msgid "Articles" +msgstr "Articles" + +msgid "All the articles of the Fediverse" +msgstr "Tous les articles de la Fédiverse" + +msgid "Articles from {{ instance.name }}" +msgstr "Articles de {{ instance.name }}" + +msgid "View all" +msgstr "Tout afficher" + +msgid "Articles tagged \"{{ tag }}\"" +msgstr "Articles taggués « {{ instance.name }} »" + +msgid "Edit" +msgstr "Modifier" + +msgid "Edit {{ post }}" +msgstr "Modifier « {{ post }} »" + +msgid "Update" +msgstr "Mettre à jour" + +msgid "We couldn't find this page." +msgstr "Page introuvable." + +msgid "Invalid CSRF token." +msgstr "Jeton CSRF invalide." + +msgid "" +"Something is wrong with your CSRF token. Make sure cookies are enabled in " +"you browser, and try reloading this page. If you continue to see this error " +"message, please report it." +msgstr "" +"Quelque chose ne va pas avec votre jeton CSRF. Assurez-vous que les " +"cookiessont activés dans votre navigateur, et essayez de recharger cette " +"page. Si vouscontinuez à voir cette erreur, merci de la signaler." + +msgid "Administration of {{ instance.name }}" +msgstr "Administration de {{ instance.name }}" + +msgid "Instances" +msgstr "Instances" + +msgid "Unblock" +msgstr "Débloquer" + +msgid "Block" +msgstr "Bloquer" + +msgid "Ban" +msgstr "Bannir" + +msgid "Useful for visually impaired people and licensing" +msgstr "Utile pour les personnes malvoyantes et les informations de Copyright." + +msgid "Let it empty if there is none" +msgstr "Laisser vide si il n'y en a pas" + +msgid "Draft" +msgstr "Brouillon" + +msgid "This is a draft, don't publish it yet." +msgstr "Cet article est un brouillon, il sera publié plus tard." + +msgid "Update or publish" +msgstr "Mettre à jour ou publier" + +msgid "Your Drafts" +msgstr "Vos brouillons" + +msgid "Danger zone" +msgstr "Zone à risque" + +msgid "Be very careful, any action taken here can't be cancelled." +msgstr "" +"Faites très attention, aucune action entreprise ici ne pourra être annulée." + +msgid "Delete your account" +msgstr "Supprimer votre compte" + +msgid "Sorry, but as an admin, you can't leave your instance." +msgstr "" +"Désolé, mais en tant qu'administrateur, vous ne pouvez pas quitter votre " +"instance." + +msgid "Users" +msgstr "Utilisateurs" diff --git a/po/gl.po b/po/gl.po index 6dafe4c3..7758b30c 100644 --- a/po/gl.po +++ b/po/gl.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: plume\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-06-15 16:33-0700\n" -"PO-Revision-Date: 2018-09-04 07:04-0700\n" +"PO-Revision-Date: 2018-09-12 07:04-0700\n" "Last-Translator: Xosé M. \n" "Language-Team: none\n" "Language: gl\n" @@ -501,3 +501,109 @@ msgid "" msgstr "" "Lamentámolo, pero o rexistro está pechado en esta instancia. Intente atopar outra" +msgid "Subtitle" +msgstr "Subtítulo" + +msgid "Login to like" +msgstr "Conéctese para gostar" + +msgid "Login to boost" +msgstr "Conéctese para promover" + +msgid "Your feed" +msgstr "Para vostede" + +msgid "Federated feed" +msgstr "Artigos federados" + +msgid "Local feed" +msgstr "Artigos locais" + +msgid "Nothing to see here yet. Try to follow more people." +msgstr "Nada que ler por aquí. Intente seguir a máis xente." + +msgid "Articles" +msgstr "Artigos" + +msgid "All the articles of the Fediverse" +msgstr "Todos os artigos do Fediverso" + +msgid "Articles from {{ instance.name }}" +msgstr "Artigos desde {{ instance_name }}" + +msgid "View all" +msgstr "Ver todos" + +msgid "Articles tagged \"{{ tag }}\"" +msgstr "Artigos etiquetados con {{ instance_name }}" + +msgid "Edit" +msgstr "Editar" + +msgid "Edit {{ post }}" +msgstr "Editar \"{{ post }}\"" + +msgid "Update" +msgstr "Actualizar" + +msgid "We couldn't find this page." +msgstr "Non atopamos esta páxina" + +msgid "Invalid CSRF token." +msgstr "Testemuño CSRF non válido" + +msgid "" +"Something is wrong with your CSRF token. Make sure cookies are enabled in " +"you browser, and try reloading this page. If you continue to see this error " +"message, please report it." +msgstr "Hai un problema co seu testemuño CSRF. Asegúrese de ter as cookies activadas " +"no navegador, e recargue a páxina. Si persiste o aviso de este fallo, " +" informe por favor." + +msgid "Administration of {{ instance.name }}" +msgstr "Administración de {{ instance_name }}" + +msgid "Instances" +msgstr "Instancias" + +msgid "Unblock" +msgstr "Desbloquear" + +msgid "Block" +msgstr "Bloquear" + +msgid "Ban" +msgstr "Prohibir" + +msgid "Useful for visually impaired people and licensing" +msgstr "Útil para xente con problemas visuais e licenzas" + +msgid "Let it empty if there is none" +msgstr "Deixar baldeiro si non hai ningunha" + +msgid "Draft" +msgstr "Borrador" + +msgid "This is a draft, don't publish it yet." +msgstr "Esto é un borrador, non publicar por agora." + +msgid "Update or publish" +msgstr "Actualizar ou publicar" + +msgid "Your Drafts" +msgstr "O seus Borradores" + +msgid "Danger zone" +msgstr "Zona perigosa" + +msgid "Be very careful, any action taken here can't be cancelled." +msgstr "Sexa coidadosa, as accións tomadas non se poden restablecer." + +msgid "Delete your account" +msgstr "Eliminar a súa conta" + +msgid "Sorry, but as an admin, you can't leave your instance." +msgstr "Lamentámolo, pero como administradora, non pode deixar a súa instancia." + +msgid "Users" +msgstr "Usuarias" diff --git a/po/nb.po b/po/nb.po index 275ac691..b6c428fc 100644 --- a/po/nb.po +++ b/po/nb.po @@ -512,6 +512,124 @@ msgid "" "Sorry, but registrations are closed on this instance. Try to find another one" msgstr "" +#, fuzzy +msgid "Subtitle" +msgstr "Tittel" + +msgid "Login to like" +msgstr "" + +msgid "Login to boost" +msgstr "" + +#, fuzzy +msgid "Your feed" +msgstr "Din kommentar" + +msgid "Federated feed" +msgstr "" + +msgid "Local feed" +msgstr "" + +msgid "Nothing to see here yet. Try to follow more people." +msgstr "" + +#, fuzzy +msgid "Articles" +msgstr "artikler" + +msgid "All the articles of the Fediverse" +msgstr "" + +#, fuzzy +msgid "Articles from {{ instance.name }}" +msgstr "Om {{ instance_name }}" + +msgid "View all" +msgstr "" + +#, fuzzy +msgid "Articles tagged \"{{ tag }}\"" +msgstr "Om {{ instance_name }}" + +msgid "Edit" +msgstr "" + +#, fuzzy +msgid "Edit {{ post }}" +msgstr "Kommentér \"{{ post }}\"" + +#, fuzzy +msgid "Update" +msgstr "Oppdater konto" + +#, fuzzy +msgid "We couldn't find this page." +msgstr "Den siden fant vi ikke." + +msgid "Invalid CSRF token." +msgstr "" + +msgid "" +"Something is wrong with your CSRF token. Make sure cookies are enabled in " +"you browser, and try reloading this page. If you continue to see this error " +"message, please report it." +msgstr "" + +#, fuzzy +msgid "Administration of {{ instance.name }}" +msgstr "Om {{ instance_name }}" + +#, fuzzy +msgid "Instances" +msgstr "Instillinger for instansen" + +msgid "Unblock" +msgstr "" + +msgid "Block" +msgstr "" + +msgid "Ban" +msgstr "" + +msgid "Useful for visually impaired people and licensing" +msgstr "" + +msgid "Let it empty if there is none" +msgstr "" + +msgid "Draft" +msgstr "" + +msgid "This is a draft, don't publish it yet." +msgstr "" + +msgid "Update or publish" +msgstr "" + +#, fuzzy +msgid "Your Drafts" +msgstr "Din oversikt" + +msgid "Danger zone" +msgstr "" + +msgid "Be very careful, any action taken here can't be cancelled." +msgstr "" + +#, fuzzy +msgid "Delete your account" +msgstr "Opprett din konto" + +msgid "Sorry, but as an admin, you can't leave your instance." +msgstr "" + +#, fuzzy +msgid "Users" +msgstr "Brukernavn" + #~ msgid "One reshare" #~ msgid_plural "{{ count }} reshares" #~ msgstr[0] "Én deling" diff --git a/po/pl.po b/po/pl.po index 0b879eca..9d1e8085 100644 --- a/po/pl.po +++ b/po/pl.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: plume\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-06-15 16:33-0700\n" -"PO-Revision-Date: 2018-07-28 14:56+0200\n" +"PO-Revision-Date: 2018-09-04 17:35+0200\n" "Last-Translator: Marcin Mikołajczak \n" "Language-Team: none\n" "Language: pl\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2);\n" -"X-Generator: Poedit 2.0.9\n" +"X-Generator: Poedit 2.1.1\n" msgid "Latest articles" msgstr "Najnowsze artykuły" @@ -92,16 +92,15 @@ msgstr "Dodaj swoje" msgid "One Boost" msgid_plural "{{ count }} Boosts" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgstr[0] "Jedno podbicie" +msgstr[1] "{{ count }} podbicia" +msgstr[2] "{{ count }} podbić" -#, fuzzy msgid "I don't want to boost this anymore" -msgstr "Cofnij udostępnienie" +msgstr "Cofnij podbicie" msgid "Boost" -msgstr "" +msgstr "Podbij" msgid "Comments" msgstr "Komentarze" @@ -165,9 +164,8 @@ msgstr "Obserwuj" msgid "Unfollow" msgstr "Przestań obserwować" -#, fuzzy msgid "Recently boosted" -msgstr "Ostatnio udostępniono" +msgstr "Ostatnio podbite" msgid "One follower" msgid_plural "{{ count }} followers" @@ -247,9 +245,8 @@ msgstr "Musisz się zalogować, aby zobaczyć swoje powiadomienia" msgid "You need to be logged in order to write a new post" msgstr "Musisz się zalogować, aby utworzyć wpis" -#, fuzzy msgid "You need to be logged in order to boost a post" -msgstr "Musisz się zalogować, aby polubić wpis" +msgstr "Musisz się zalogować, aby podbić wpis" msgid "Invalid username or password" msgstr "Nieprawidłowa nazwa użytkownika lub hasło" @@ -268,18 +265,17 @@ msgstr "" "Napisano przez {{ link_1 }}{{ url }}{{ link_2 }}{{ name | escape }}" "{{ link_3 }}" -#, fuzzy msgid "{{ data }} boosted your article" -msgstr "{{ data }} skomentował Twój artykuł" +msgstr "{{ data }} podbił(a) Twój artykuł" msgid "{{ data }} started following you" -msgstr "{{ data }} zaczął Cię obserwować" +msgstr "{{ data }} zaczął(-ęła) Cię obserwować" msgid "{{ data }} liked your article" -msgstr "{{ data }} polubił Twój artykuł" +msgstr "{{ data }} polubił(a) Twój artykuł" msgid "{{ data }} commented your article" -msgstr "{{ data }} skomentował Twój artykuł" +msgstr "{{ data }} skomentował(a) Twój artykuł" msgid "We couldn't find this page." msgstr "Nie udało się odnaleźć tej strony." @@ -294,7 +290,7 @@ msgid "You are not author in this blog." msgstr "Nie jesteś autorem tego bloga." msgid "{{ data }} mentioned you." -msgstr "{{ data }} wspomniał o Tobie." +msgstr "{{ data }} wspomniał(a) o Tobie." msgid "Your comment" msgstr "Twój komentarz" @@ -318,9 +314,8 @@ msgid "We need an email or a username to identify you" msgstr "" "Potrzebujemy nazwy użytkownika lub adresu e-mail, aby Cię zidentyfikować" -#, fuzzy msgid "Your password can't be empty" -msgstr "Twój komentarz nie może być pusty" +msgstr "Twoje hasło nie może być puste" msgid "Passwords are not matching" msgstr "Hasła nie pasują do siebie" @@ -361,20 +356,19 @@ msgid "Next page" msgstr "Następna strona" msgid "{{ user }} mentioned you." -msgstr "{{ user }} wspomniał o Tobie." +msgstr "{{ user }} wspomniał(a) o Tobie." msgid "{{ user }} commented your article." -msgstr "{{ user }} skomentował Twój artykuł." +msgstr "{{ user }} skomentował(a) Twój artykuł." msgid "{{ user }} is now following you." -msgstr "{{ user }} zaczął Cię obserwować." +msgstr "{{ user }} zaczął(-ęła) Cię obserwować." msgid "{{ user }} liked your article." -msgstr "{{ user }} polubił Twój artykuł." +msgstr "{{ user }} polubił(a) Twój artykuł." -#, fuzzy msgid "{{ user }} boosted your article." -msgstr "{{ user }} skomentował Twój artykuł." +msgstr "{{ user }} podbił(a) Twój artykuł." msgid "Source code" msgstr "Kod źródłowy" @@ -441,7 +435,7 @@ msgid "people" msgstr "osób" msgid "Who wrote" -msgstr "Którzy napisali" +msgstr "Które napisały" msgid "articles" msgstr "artykuły" @@ -449,79 +443,191 @@ msgstr "artykuły" msgid "Read the detailed rules" msgstr "Przeczytaj szczegółowe zasady" -#, fuzzy msgid "Delete this article" -msgstr "Najnowsze artykuły" +msgstr "Usuń ten artykuł" msgid "And connected to" -msgstr "" +msgstr "Połączony z" -#, fuzzy msgid "other instances" -msgstr "O tej instancji" +msgstr "innych instancji" -#, fuzzy msgid "Administred by" -msgstr "Administracja" +msgstr "Administrowany przez" msgid "Runs Plume {{ version }}" -msgstr "" +msgstr "Działa na Plume {{ version }}" -#, fuzzy msgid "Your media" -msgstr "Twój komentarz" +msgstr "Twoja zawartość multimedialna" msgid "Go to your gallery" -msgstr "" +msgstr "Przejdź do swojej galerii" msgid "{{ name}}'s avatar'" -msgstr "" +msgstr "Awatar {{name}}" msgid "Media details" -msgstr "" +msgstr "Szczegóły zawartości multimedialnej" msgid "Go back to the gallery" -msgstr "" +msgstr "Powróć do galerii" -#, fuzzy msgid "Markdown code" -msgstr "Markdown jest obsługiwany" +msgstr "Kod Markdown" msgid "Copy it in your articles to insert this media." -msgstr "" +msgstr "Skopiuj do swoich artykułów, aby wstawić tę zawartość multimedialną." msgid "Use as avatar" -msgstr "" +msgstr "Użyj jako awataru" msgid "Delete" -msgstr "" +msgstr "Usuń" msgid "Upload" -msgstr "" +msgstr "Wyślij" msgid "You don't have any media yet." -msgstr "" +msgstr "Nie masz żadnej zawartości multimedialnej." msgid "Media upload" -msgstr "" +msgstr "Wysyłanie zawartości multimedialnej" -#, fuzzy msgid "Description" -msgstr "Szczegółowy opis" +msgstr "Opis" -#, fuzzy msgid "Content warning" -msgstr "Zawartość" +msgstr "Ostrzeżenie o zawartości" msgid "File" -msgstr "" +msgstr "Plik" msgid "Send" -msgstr "" +msgstr "Wyślij" msgid "" "Sorry, but registrations are closed on this instance. Try to find another one" msgstr "" +"Przepraszamy, rejestracja jest zamknięta na tej instancji. Spróbuj znaleźć " +"inną" + +msgid "Subtitle" +msgstr "Podtytuł" + +msgid "Login to like" +msgstr "Zaloguj się aby polubić" + +msgid "Login to boost" +msgstr "Zaloguj się aby podbić" + +#, fuzzy +msgid "Your feed" +msgstr "Twoja zawartość multimedialna" + +msgid "Federated feed" +msgstr "" + +msgid "Local feed" +msgstr "" + +msgid "Nothing to see here yet. Try to follow more people." +msgstr "" + +#, fuzzy +msgid "Articles" +msgstr "artykuły" + +msgid "All the articles of the Fediverse" +msgstr "" + +#, fuzzy +msgid "Articles from {{ instance.name }}" +msgstr "O {{ instance_name }}" + +msgid "View all" +msgstr "" + +#, fuzzy +msgid "Articles tagged \"{{ tag }}\"" +msgstr "O {{ instance_name }}" + +msgid "Edit" +msgstr "" + +#, fuzzy +msgid "Edit {{ post }}" +msgstr "Komentarz „{{ post }}”" + +#, fuzzy +msgid "Update" +msgstr "Aktualizuj konto" + +#, fuzzy +msgid "We couldn't find this page." +msgstr "Nie udało się odnaleźć tej strony." + +msgid "Invalid CSRF token." +msgstr "" + +msgid "" +"Something is wrong with your CSRF token. Make sure cookies are enabled in " +"you browser, and try reloading this page. If you continue to see this error " +"message, please report it." +msgstr "" + +#, fuzzy +msgid "Administration of {{ instance.name }}" +msgstr "O {{ instance_name }}" + +#, fuzzy +msgid "Instances" +msgstr "Ustawienia instancji" + +msgid "Unblock" +msgstr "" + +msgid "Block" +msgstr "" + +msgid "Ban" +msgstr "" + +msgid "Useful for visually impaired people and licensing" +msgstr "" + +msgid "Let it empty if there is none" +msgstr "" + +msgid "Draft" +msgstr "" + +msgid "This is a draft, don't publish it yet." +msgstr "" + +msgid "Update or publish" +msgstr "" + +#, fuzzy +msgid "Your Drafts" +msgstr "Twój panel" + +msgid "Danger zone" +msgstr "" + +msgid "Be very careful, any action taken here can't be cancelled." +msgstr "" + +#, fuzzy +msgid "Delete your account" +msgstr "Utwórz konto" + +msgid "Sorry, but as an admin, you can't leave your instance." +msgstr "" + +#, fuzzy +msgid "Users" +msgstr "Nazwa użytkownika" #~ msgid "One reshare" #~ msgid_plural "{{ count }} reshares" diff --git a/po/plume.pot b/po/plume.pot index ca6c8851..2fcdc210 100644 --- a/po/plume.pot +++ b/po/plume.pot @@ -486,3 +486,105 @@ msgstr "" msgid "Sorry, but registrations are closed on this instance. Try to find another one" msgstr "" + +msgid "Subtitle" +msgstr "" + +msgid "Login to like" +msgstr "" + +msgid "Login to boost" +msgstr "" + +msgid "Your feed" +msgstr "" + +msgid "Federated feed" +msgstr "" + +msgid "Local feed" +msgstr "" + +msgid "Nothing to see here yet. Try to follow more people." +msgstr "" + +msgid "Articles" +msgstr "" + +msgid "All the articles of the Fediverse" +msgstr "" + +msgid "Articles from {{ instance.name }}" +msgstr "" + +msgid "View all" +msgstr "" + +msgid "Articles tagged \"{{ tag }}\"" +msgstr "" + +msgid "Edit" +msgstr "" + +msgid "Edit {{ post }}" +msgstr "" + +msgid "Update" +msgstr "" + +msgid "We couldn't find this page." +msgstr "" + +msgid "Invalid CSRF token." +msgstr "" + +msgid "Something is wrong with your CSRF token. Make sure cookies are enabled in you browser, and try reloading this page. If you continue to see this error message, please report it." +msgstr "" + +msgid "Administration of {{ instance.name }}" +msgstr "" + +msgid "Instances" +msgstr "" + +msgid "Unblock" +msgstr "" + +msgid "Block" +msgstr "" + +msgid "Ban" +msgstr "" + +msgid "Useful for visually impaired people and licensing" +msgstr "" + +msgid "Let it empty if there is none" +msgstr "" + +msgid "Draft" +msgstr "" + +msgid "This is a draft, don't publish it yet." +msgstr "" + +msgid "Update or publish" +msgstr "" + +msgid "Your Drafts" +msgstr "" + +msgid "Danger zone" +msgstr "" + +msgid "Be very careful, any action taken here can't be cancelled." +msgstr "" + +msgid "Delete your account" +msgstr "" + +msgid "Sorry, but as an admin, you can't leave your instance." +msgstr "" + +msgid "Users" +msgstr "" diff --git a/rust-toolchain b/rust-toolchain index 27aefede..c4773552 100644 --- a/rust-toolchain +++ b/rust-toolchain @@ -1 +1 @@ -nightly-2018-05-31 +nightly-2018-07-17 diff --git a/src/inbox.rs b/src/inbox.rs index 5a4d0bbc..19e4efe3 100644 --- a/src/inbox.rs +++ b/src/inbox.rs @@ -1,4 +1,4 @@ -use activitypub::{activity::{Announce, Create, Delete, Like, Undo}, object::Tombstone}; +use activitypub::{activity::{Announce, Create, Delete, Like, Undo, Update}, object::Tombstone}; use diesel::PgConnection; use failure::Error; use serde_json; @@ -55,10 +55,19 @@ pub trait Inbox { "Announce" => { Reshare::delete_id(act.undo_props.object_object::()?.object_props.id_string()?, conn); Ok(()) + }, + "Follow" => { + Follow::delete_id(act.undo_props.object_object::()?.object_props.id_string()?, conn); + Ok(()) } _ => Err(InboxError::CantUndo)? } } + "Update" => { + let act: Update = serde_json::from_value(act.clone())?; + Post::handle_update(conn, act.update_props.object_object()?); + Ok(()) + } _ => Err(InboxError::InvalidType)? } }, diff --git a/src/main.rs b/src/main.rs index f0f9fcef..e121fdc0 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,8 +1,9 @@ -#![feature(custom_derive, decl_macro, plugin)] +#![feature(custom_derive, plugin, decl_macro)] #![plugin(rocket_codegen)] extern crate activitypub; extern crate atom_syndication; +extern crate chrono; extern crate colored; extern crate diesel; extern crate dotenv; @@ -13,6 +14,7 @@ extern crate heck; extern crate multipart; extern crate plume_common; extern crate plume_models; +#[macro_use] extern crate rocket; extern crate rocket_contrib; extern crate rocket_csrf; @@ -54,14 +56,27 @@ fn main() { routes::blogs::atom_feed, routes::comments::create, + routes::comments::activity_pub, - routes::instance::paginated_index, routes::instance::index, + routes::instance::paginated_local, + routes::instance::local, + routes::instance::paginated_feed, + routes::instance::feed, + routes::instance::paginated_federated, + routes::instance::federated, routes::instance::admin, + routes::instance::admin_instances, + routes::instance::admin_instances_paginated, + routes::instance::admin_users, + routes::instance::admin_users_paginated, + routes::instance::ban, + routes::instance::toggle_block, routes::instance::update_settings, routes::instance::shared_inbox, routes::instance::nodeinfo, routes::instance::about, + routes::instance::web_manifest, routes::likes::create, routes::likes::create_auth, @@ -81,6 +96,8 @@ fn main() { routes::posts::details, routes::posts::details_response, routes::posts::activity_details, + routes::posts::edit, + routes::posts::update, routes::posts::new, routes::posts::new_auth, routes::posts::create, @@ -96,6 +113,9 @@ fn main() { routes::static_files, + routes::tags::tag, + routes::tags::paginated_tag, + routes::user::me, routes::user::details, routes::user::dashboard, @@ -105,6 +125,7 @@ fn main() { routes::user::edit, routes::user::edit_auth, routes::user::update, + routes::user::delete, routes::user::follow, routes::user::follow_auth, routes::user::activity_details, @@ -136,6 +157,7 @@ fn main() { .add_exceptions(vec![ ("/inbox".to_owned(), "/inbox".to_owned(), rocket::http::Method::Post), ("/@//inbox".to_owned(), "/@//inbox".to_owned(), rocket::http::Method::Post), + ("/~//".to_owned(), "/~//".to_owned(), rocket::http::Method::Post), ]) .finalize().unwrap()) .launch(); diff --git a/src/routes/blogs.rs b/src/routes/blogs.rs index cc99964e..829ff7c0 100644 --- a/src/routes/blogs.rs +++ b/src/routes/blogs.rs @@ -65,7 +65,10 @@ fn new(user: User, conn: DbConn) -> Template { #[get("/blogs/new", rank = 2)] fn new_auth() -> Flash{ - utils::requires_login("You need to be logged in order to create a new blog", uri!(new)) + utils::requires_login( + "You need to be logged in order to create a new blog", + uri!(new).into() + ) } #[derive(FromForm, Validate, Serialize)] diff --git a/src/routes/comments.rs b/src/routes/comments.rs index e751ecbc..17d49828 100644 --- a/src/routes/comments.rs +++ b/src/routes/comments.rs @@ -1,3 +1,4 @@ +use activitypub::object::Note; use rocket::{ State, request::LenientForm, @@ -8,16 +9,16 @@ use serde_json; use validator::Validate; use workerpool::{Pool, thunk::*}; -use plume_common::activity_pub::broadcast; +use plume_common::{utils, activity_pub::{broadcast, ApRequest, ActivityStream}}; use plume_models::{ blogs::Blog, comments::*, db_conn::DbConn, - instance::Instance, + mentions::Mention, posts::Post, + safe_string::SafeString, users::User }; -use inbox::Inbox; #[derive(FromForm, Debug, Validate)] struct NewCommentForm { @@ -33,21 +34,29 @@ fn create(blog_name: String, slug: String, data: LenientForm, us let form = data.get(); form.validate() .map(|_| { - let (new_comment, id) = NewComment::build() - .content(form.content.clone()) - .in_response_to_id(form.responding_to.clone()) - .post(post.clone()) - .author(user.clone()) - .create(&*conn); + let (html, mentions) = utils::md_to_html(form.content.as_ref()); + let comm = Comment::insert(&*conn, NewComment { + content: SafeString::new(html.as_ref()), + in_response_to_id: form.responding_to.clone(), + post_id: post.id, + author_id: user.id, + ap_url: None, + sensitive: false, + spoiler_text: String::new() + }).update_ap_url(&*conn); + let new_comment = comm.create_activity(&*conn); - let instance = Instance::get_local(&*conn).unwrap(); - instance.received(&*conn, serde_json::to_value(new_comment.clone()).expect("JSON serialization error")) - .expect("We are not compatible with ourselve: local broadcast failed (new comment)"); - let followers = user.get_followers(&*conn); + // save mentions + for ment in mentions { + Mention::from_activity(&*conn, Mention::build_activity(&*conn, ment), post.id, true, true); + } + + // federate + let dest = User::one_by_instance(&*conn); let user_clone = user.clone(); - worker.execute(Thunk::of(move || broadcast(&user_clone, new_comment, followers))); + worker.execute(Thunk::of(move || broadcast(&user_clone, new_comment, dest))); - Redirect::to(format!("/~/{}/{}/#comment-{}", blog_name, slug, id)) + Redirect::to(uri!(super::posts::details: blog = blog_name, slug = slug)) }) .map_err(|errors| { // TODO: de-duplicate this code @@ -69,5 +78,10 @@ fn create(blog_name: String, slug: String, data: LenientForm, us "user_fqn": user.get_fqn(&*conn), "errors": errors })) - }) + }) +} + +#[get("/~/<_blog>/<_slug>/comment/")] +fn activity_pub(_blog: String, _slug: String, id: i32, _ap: ApRequest, conn: DbConn) -> Option> { + Comment::get(&*conn, id).map(|c| ActivityStream::new(c.into_activity(&*conn))) } diff --git a/src/routes/instance.rs b/src/routes/instance.rs index cbf710ca..1bec0f3c 100644 --- a/src/routes/instance.rs +++ b/src/routes/instance.rs @@ -15,18 +15,23 @@ use plume_models::{ use inbox::Inbox; use routes::Page; -#[get("/?")] -fn paginated_index(conn: DbConn, user: Option, page: Page) -> Template { +#[get("/")] +fn index(conn: DbConn, user: Option) -> Template { match Instance::get_local(&*conn) { Some(inst) => { - let recents = Post::get_recents_page(&*conn, page.limits()); + let federated = Post::get_recents_page(&*conn, Page::first().limits()); + let local = Post::get_instance_page(&*conn, inst.id, Page::first().limits()); + let user_feed = user.clone().map(|user| { + let followed = user.get_following(&*conn); + Post::user_feed_page(&*conn, followed.into_iter().map(|u| u.id).collect(), Page::first().limits()) + }); Template::render("instance/index", json!({ "instance": inst, "account": user.map(|u| u.to_json(&*conn)), - "recents": recents.into_iter().map(|p| p.to_json(&*conn)).collect::>(), - "page": page.page, - "n_pages": Page::total(Post::count(&*conn) as i32), + "federated": federated.into_iter().map(|p| p.to_json(&*conn)).collect::>(), + "local": local.into_iter().map(|p| p.to_json(&*conn)).collect::>(), + "user_feed": user_feed.map(|f| f.into_iter().map(|p| p.to_json(&*conn)).collect::>()), "n_users": User::count_local(&*conn), "n_articles": Post::count_local(&*conn) })) @@ -39,9 +44,55 @@ fn paginated_index(conn: DbConn, user: Option, page: Page) -> Template { } } -#[get("/")] -fn index(conn: DbConn, user: Option) -> Template { - paginated_index(conn, user, Page::first()) +#[get("/local?")] +fn paginated_local(conn: DbConn, user: Option, page: Page) -> Template { + let instance = Instance::get_local(&*conn).unwrap(); + let articles = Post::get_instance_page(&*conn, instance.id, page.limits()); + Template::render("instance/local", json!({ + "account": user.map(|u| u.to_json(&*conn)), + "instance": instance, + "page": page.page, + "n_pages": Page::total(Post::count_local(&*conn) as i32), + "articles": articles.into_iter().map(|p| p.to_json(&*conn)).collect::>() + })) +} + +#[get("/local")] +fn local(conn: DbConn, user: Option) -> Template { + paginated_local(conn, user, Page::first()) +} + +#[get("/feed")] +fn feed(conn: DbConn, user: User) -> Template { + paginated_feed(conn, user, Page::first()) +} + +#[get("/feed?")] +fn paginated_feed(conn: DbConn, user: User, page: Page) -> Template { + let followed = user.get_following(&*conn); + let articles = Post::user_feed_page(&*conn, followed.into_iter().map(|u| u.id).collect(), page.limits()); + Template::render("instance/feed", json!({ + "account": user.to_json(&*conn), + "page": page.page, + "n_pages": Page::total(Post::count_local(&*conn) as i32), + "articles": articles.into_iter().map(|p| p.to_json(&*conn)).collect::>() + })) +} + +#[get("/federated")] +fn federated(conn: DbConn, user: Option) -> Template { + paginated_federated(conn, user, Page::first()) +} + +#[get("/federated?")] +fn paginated_federated(conn: DbConn, user: Option, page: Page) -> Template { + let articles = Post::get_recents_page(&*conn, page.limits()); + Template::render("instance/federated", json!({ + "account": user.map(|u| u.to_json(&*conn)), + "page": page.page, + "n_pages": Page::total(Post::count_local(&*conn) as i32), + "articles": articles.into_iter().map(|p| p.to_json(&*conn)).collect::>() + })) } #[get("/admin")] @@ -86,15 +137,72 @@ fn update_settings(conn: DbConn, admin: Admin, form: LenientForm Template { + admin_instances_paginated(admin, conn, Page::first()) +} + +#[get("/admin/instances?")] +fn admin_instances_paginated(admin: Admin, conn: DbConn, page: Page) -> Template { + let instances = Instance::page(&*conn, page.limits()); + Template::render("instance/list", json!({ + "account": admin.0.to_json(&*conn), + "instances": instances, + "instance": Instance::get_local(&*conn), + "page": page.page, + "n_pages": Page::total(Instance::count(&*conn) as i32), + })) +} + +#[get("/admin/instances//block")] +fn toggle_block(_admin: Admin, conn: DbConn, id: i32) -> Redirect { + if let Some(inst) = Instance::get(&*conn, id) { + inst.toggle_block(&*conn); + } + + Redirect::to(uri!(admin_instances)) +} + +#[get("/admin/users")] +fn admin_users(admin: Admin, conn: DbConn) -> Template { + admin_users_paginated(admin, conn, Page::first()) +} + +#[get("/admin/users?")] +fn admin_users_paginated(admin: Admin, conn: DbConn, page: Page) -> Template { + let users = User::get_local_page(&*conn, page.limits()).into_iter() + .map(|u| u.to_json(&*conn)).collect::>(); + + Template::render("instance/users", json!({ + "account": admin.0.to_json(&*conn), + "users": users, + "page": page.page, + "n_pages": Page::total(User::count_local(&*conn) as i32) + })) +} + +#[get("/admin/users//ban")] +fn ban(_admin: Admin, conn: DbConn, id: i32) -> Redirect { + User::get(&*conn, id).map(|u| u.delete(&*conn)); + Redirect::to(uri!(admin_users)) +} + #[post("/inbox", data = "")] fn shared_inbox(conn: DbConn, data: String) -> String { let act: serde_json::Value = serde_json::from_str(&data[..]).unwrap(); + + let activity = act.clone(); + let actor_id = activity["actor"].as_str() + .unwrap_or_else(|| activity["actor"]["id"].as_str().expect("No actor ID for incoming activity, blocks by panicking")); + if Instance::is_blocked(&*conn, actor_id.to_string()) { + return String::new(); + } let instance = Instance::get_local(&*conn).unwrap(); match instance.received(&*conn, act) { Ok(_) => String::new(), Err(e) => { - println!("Shared inbox error: {}\n{}", e.cause(), e.backtrace()); - format!("Error: {}", e.cause()) + println!("Shared inbox error: {}\n{}", e.as_fail(), e.backtrace()); + format!("Error: {}", e.as_fail()) } } } @@ -136,3 +244,17 @@ fn about(user: Option, conn: DbConn) -> Template { "n_instances": Instance::count(&*conn) - 1 })) } + +#[get("/manifest.json")] +fn web_manifest(conn: DbConn) -> Json { + let instance = Instance::get_local(&*conn).unwrap(); + Json(json!({ + "name": &instance.name, + "description": &instance.short_description, + "start_url": String::from("/"), + "scope": String::from("/"), + "display": String::from("standalone"), + "background_color": String::from("#f4f4f4"), + "theme_color": String::from("#7765e3") + })) +} diff --git a/src/routes/likes.rs b/src/routes/likes.rs index 8e68ff4d..699ac7f4 100644 --- a/src/routes/likes.rs +++ b/src/routes/likes.rs @@ -25,14 +25,14 @@ fn create(blog: String, slug: String, user: User, conn: DbConn, worker: State//like", rank = 2)] fn create_auth(blog: String, slug: String) -> Flash{ - utils::requires_login("You need to be logged in order to like a post", uri!(create: blog = blog, slug = slug)) + utils::requires_login( + "You need to be logged in order to like a post", + uri!(create: blog = blog, slug = slug).into() + ) } diff --git a/src/routes/mod.rs b/src/routes/mod.rs index d4442732..25abb2a6 100644 --- a/src/routes/mod.rs +++ b/src/routes/mod.rs @@ -108,6 +108,7 @@ pub mod notifications; pub mod posts; pub mod reshares; pub mod session; +pub mod tags; pub mod user; pub mod well_known; diff --git a/src/routes/notifications.rs b/src/routes/notifications.rs index 08e3df6c..6b71c775 100644 --- a/src/routes/notifications.rs +++ b/src/routes/notifications.rs @@ -22,5 +22,8 @@ fn notifications(conn: DbConn, user: User) -> Template { #[get("/notifications", rank = 2)] fn notifications_auth() -> Flash{ - utils::requires_login("You need to be logged in order to see your notifications", uri!(notifications)) + utils::requires_login( + "You need to be logged in order to see your notifications", + uri!(notifications).into() + ) } diff --git a/src/routes/posts.rs b/src/routes/posts.rs index 44376b89..864680a3 100644 --- a/src/routes/posts.rs +++ b/src/routes/posts.rs @@ -1,5 +1,6 @@ use activitypub::object::Article; -use heck::KebabCase; +use chrono::Utc; +use heck::{CamelCase, KebabCase}; use rocket::{State, request::LenientForm}; use rocket::response::{Redirect, Flash}; use rocket_contrib::Template; @@ -19,6 +20,7 @@ use plume_models::{ post_authors::*, posts::*, safe_string::SafeString, + tags::*, users::User }; @@ -57,7 +59,8 @@ fn details_response(blog: String, slug: String, conn: DbConn, user: Option "date": &post.creation_date.timestamp(), "previous": query.and_then(|q| q.responding_to.map(|r| Comment::get(&*conn, r).expect("Error retrieving previous comment").to_json(&*conn, &vec![]))), "user_fqn": user.clone().map(|u| u.get_fqn(&*conn)).unwrap_or(String::new()), - "is_author": user.map(|u| post.get_authors(&*conn).into_iter().any(|a| u.id == a.id)).unwrap_or(false) + "is_author": user.clone().map(|u| post.get_authors(&*conn).into_iter().any(|a| u.id == a.id)).unwrap_or(false), + "is_following": user.map(|u| u.is_following(&*conn, post.get_authors(&*conn)[0].id)).unwrap_or(false) })) }) }) @@ -73,7 +76,10 @@ fn activity_details(blog: String, slug: String, conn: DbConn, _ap: ApRequest) -> #[get("/~//new", rank = 2)] fn new_auth(blog: String) -> Flash { - utils::requires_login("You need to be logged in order to write a new post", uri!(new: blog = blog)) + utils::requires_login( + "You need to be logged in order to write a new post", + uri!(new: blog = blog).into() + ) } #[get("/~//new", rank = 1)] @@ -88,18 +94,146 @@ fn new(blog: String, user: User, conn: DbConn) -> Template { Template::render("posts/new", json!({ "account": user.to_json(&*conn), "instance": Instance::get_local(&*conn), + "editing": false, "errors": null, - "form": null + "form": null, + "is_draft": true, })) } } +#[get("/~///edit")] +fn edit(blog: String, slug: String, user: User, conn: DbConn) -> Template { + let b = Blog::find_by_fqn(&*conn, blog.to_string()); + let post = b.clone().and_then(|blog| Post::find_by_slug(&*conn, slug, blog.id)).expect("Post to edit not found"); + + if !user.is_author_in(&*conn, b.clone().unwrap()) { + Template::render("errors/403", json!({ + "error_message": "You are not author in this blog." + })) + } else { + let source = if post.source.clone().len() > 0 { + post.source.clone() + } else { + post.content.clone().get().clone() // fallback to HTML if the markdown was not stored + }; + + Template::render("posts/new", json!({ + "account": user.to_json(&*conn), + "instance": Instance::get_local(&*conn), + "editing": true, + "errors": null, + "form": NewPostForm { + title: post.title.clone(), + subtitle: post.subtitle.clone(), + content: source, + tags: Tag::for_post(&*conn, post.id) + .into_iter() + .map(|t| t.tag) + .collect::>() + .join(", "), + license: post.license.clone(), + draft: true, + }, + "is_draft": !post.published + })) + } +} + +#[post("/~///edit", data = "")] +fn update(blog: String, slug: String, user: User, conn: DbConn, data: LenientForm, worker: State>>) -> Result { + let b = Blog::find_by_fqn(&*conn, blog.to_string()); + let mut post = b.clone().and_then(|blog| Post::find_by_slug(&*conn, slug.clone(), blog.id)).expect("Post to update not found"); + + let form = data.get(); + let new_slug = form.title.to_string().to_kebab_case(); + + let mut errors = match form.validate() { + Ok(_) => ValidationErrors::new(), + Err(e) => e + }; + + if new_slug != slug { + if let Some(_) = Post::find_by_slug(&*conn, new_slug.clone(), b.clone().unwrap().id) { + errors.add("title", ValidationError { + code: Cow::from("existing_slug"), + message: Some(Cow::from("A post with the same title already exists.")), + params: HashMap::new() + }); + } + } + + if errors.is_empty() { + if !user.is_author_in(&*conn, b.clone().unwrap()) { + // actually it's not "Ok"… + Ok(Redirect::to(uri!(super::blogs::details: name = blog))) + } else { + let (content, mentions) = utils::md_to_html(form.content.to_string().as_ref()); + + let license = if form.license.len() > 0 { + form.license.to_string() + } else { + Instance::get_local(&*conn).map(|i| i.default_license).unwrap_or(String::from("CC-0")) + }; + + // update publication date if when this article is no longer a draft + if !post.published && !form.draft { + post.published = true; + post.creation_date = Utc::now().naive_utc(); + } + + post.slug = new_slug.clone(); + post.title = form.title.clone(); + post.subtitle = form.subtitle.clone(); + post.content = SafeString::new(&content); + post.source = form.content.clone(); + post.license = license; + post.update(&*conn); + let post = post.update_ap_url(&*conn); + + for m in mentions.into_iter() { + Mention::from_activity(&*conn, Mention::build_activity(&*conn, m), post.id, true, true); + } + + let old_tags = Tag::for_post(&*conn, post.id).into_iter().map(|t| t.tag).collect::>(); + let tags = form.tags.split(",").map(|t| t.trim().to_camel_case()).filter(|t| t.len() > 0 && !old_tags.contains(t)); + for tag in tags { + Tag::insert(&*conn, NewTag { + tag: tag, + is_hastag: false, + post_id: post.id + }); + } + + if post.published { + let act = post.update_activity(&*conn); + let dest = User::one_by_instance(&*conn); + worker.execute(Thunk::of(move || broadcast(&user, act, dest))); + } + + Ok(Redirect::to(uri!(details: blog = blog, slug = new_slug))) + } + } else { + Err(Template::render("posts/new", json!({ + "account": user.to_json(&*conn), + "instance": Instance::get_local(&*conn), + "editing": true, + "errors": errors.inner(), + "form": form, + "is_draft": form.draft, + }))) + } +} + #[derive(FromForm, Validate, Serialize)] struct NewPostForm { #[validate(custom(function = "valid_slug", message = "Invalid title"))] pub title: String, + pub subtitle: String, pub content: String, - pub license: String + pub tags: String, + pub license: String, + pub draft: bool, } fn valid_slug(title: &str) -> Result<(), ValidationError> { @@ -143,14 +277,16 @@ fn create(blog_name: String, data: LenientForm, user: User, conn: D slug: slug.to_string(), title: form.title.to_string(), content: SafeString::new(&content), - published: true, + published: !form.draft, license: if form.license.len() > 0 { form.license.to_string() } else { Instance::get_local(&*conn).map(|i| i.default_license).unwrap_or(String::from("CC-0")) }, ap_url: "".to_string(), - creation_date: None + creation_date: None, + subtitle: form.subtitle.clone(), + source: form.content.clone(), }); let post = post.update_ap_url(&*conn); PostAuthor::insert(&*conn, NewPostAuthor { @@ -158,13 +294,24 @@ fn create(blog_name: String, data: LenientForm, user: User, conn: D author_id: user.id }); - for m in mentions.into_iter() { - Mention::from_activity(&*conn, Mention::build_activity(&*conn, m), post.id, true); + let tags = form.tags.split(",").map(|t| t.trim().to_camel_case()).filter(|t| t.len() > 0); + for tag in tags { + Tag::insert(&*conn, NewTag { + tag: tag, + is_hastag: false, + post_id: post.id + }); } - let act = post.create_activity(&*conn); - let followers = user.get_followers(&*conn); - worker.execute(Thunk::of(move || broadcast(&user, act, followers))); + if post.published { + for m in mentions.into_iter() { + Mention::from_activity(&*conn, Mention::build_activity(&*conn, m), post.id, true, true); + } + + let act = post.create_activity(&*conn); + let dest = User::one_by_instance(&*conn); + worker.execute(Thunk::of(move || broadcast(&user, act, dest))); + } Ok(Redirect::to(uri!(details: blog = blog_name, slug = slug))) } @@ -172,12 +319,15 @@ fn create(blog_name: String, data: LenientForm, user: User, conn: D Err(Template::render("posts/new", json!({ "account": user.to_json(&*conn), "instance": Instance::get_local(&*conn), + "editing": false, "errors": errors.inner(), - "form": form + "form": form, + "is_draft": form.draft }))) } } + #[get("/~///delete")] fn delete(blog_name: String, slug: String, conn: DbConn, user: User, worker: State>>) -> Redirect { let post = Blog::find_by_fqn(&*conn, blog_name.clone()) @@ -187,9 +337,9 @@ fn delete(blog_name: String, slug: String, conn: DbConn, user: User, worker: Sta if !post.get_authors(&*conn).into_iter().any(|a| a.id == user.id) { Redirect::to(uri!(details: blog = blog_name.clone(), slug = slug.clone())) } else { - let audience = user.get_followers(&*conn); + let dest = User::one_by_instance(&*conn); let delete_activity = post.delete(&*conn); - worker.execute(Thunk::of(move || broadcast(&user, delete_activity, audience))); + worker.execute(Thunk::of(move || broadcast(&user, delete_activity, dest))); Redirect::to(uri!(super::blogs::details: name = blog_name)) } diff --git a/src/routes/reshares.rs b/src/routes/reshares.rs index f57efc48..9d259aff 100644 --- a/src/routes/reshares.rs +++ b/src/routes/reshares.rs @@ -25,14 +25,14 @@ fn create(blog: String, slug: String, user: User, conn: DbConn, worker: State//reshare", rank=1)] fn create_auth(blog: String, slug: String) -> Flash { - utils::requires_login("You need to be logged in order to reshare a post", uri!(create: blog = blog, slug = slug)) + utils::requires_login( + "You need to be logged in order to reshare a post", + uri!(create: blog = blog, slug = slug).into() + ) } diff --git a/src/routes/session.rs b/src/routes/session.rs index a0d3c7fb..8955dcc5 100644 --- a/src/routes/session.rs +++ b/src/routes/session.rs @@ -4,6 +4,7 @@ use rocket::{ request::{LenientForm,FlashMessage} }; use rocket_contrib::Template; +use rocket::http::ext::IntoOwned; use std::borrow::Cow; use validator::{Validate, ValidationError, ValidationErrors}; @@ -72,10 +73,26 @@ fn create(conn: DbConn, data: LenientForm, flash: Option")] +fn tag(user: Option, conn: DbConn, name: String) -> Template { + paginated_tag(user, conn, name, Page::first()) +} + +#[get("/tag/?")] +fn paginated_tag(user: Option, conn: DbConn, name: String, page: Page) -> Template { + let tag = Tag::find_by_name(&*conn, name).expect("Rendering tags::tag: tag not found"); + let posts = Post::list_by_tag(&*conn, tag.tag.clone(), page.limits()); + Template::render("tags/index", json!({ + "tag": tag.clone(), + "account": user.map(|u| u.to_json(&*conn)), + "articles": posts.into_iter().map(|p| p.to_json(&*conn)).collect::>(), + "page": page.page, + "n_pages": Page::total(Post::count_for_tag(&*conn, tag.tag) as i32) + })) +} diff --git a/src/routes/user.rs b/src/routes/user.rs index ae3eb6d1..3deb2574 100644 --- a/src/routes/user.rs +++ b/src/routes/user.rs @@ -1,5 +1,5 @@ use activitypub::{ - activity::{Create, Follow}, + activity::Create, collection::OrderedCollection, object::Article }; @@ -7,7 +7,7 @@ use atom_syndication::{Entry, FeedBuilder}; use rocket::{ request::LenientForm, response::{Redirect, Flash, Content}, - http::ContentType + http::{ContentType, Cookies} }; use rocket_contrib::Template; use serde_json; @@ -16,7 +16,7 @@ use workerpool::thunk::*; use plume_common::activity_pub::{ ActivityStream, broadcast, Id, IntoId, ApRequest, - inbox::{FromActivity, Notify} + inbox::{FromActivity, Notify, Deletable} }; use plume_common::utils; use plume_models::{ @@ -36,7 +36,7 @@ use Worker; fn me(user: Option) -> Result> { match user { Some(user) => Ok(Redirect::to(uri!(details: name = user.username))), - None => Err(utils::requires_login("", uri!(me))) + None => Err(utils::requires_login("", uri!(me).into())) } } @@ -71,7 +71,8 @@ fn details(name: String, conn: DbConn, account: Option, worker: Worker, fe .unwrap_or_else(|| User::fetch_from_url(&*fecth_followers_conn, user_id).expect("Couldn't fetch follower")); follows::Follow::insert(&*fecth_followers_conn, follows::NewFollow { follower_id: follower.id, - following_id: user_clone.id + following_id: user_clone.id, + ap_url: format!("{}/follow/{}", follower.ap_url, user_clone.ap_url), }); } })); @@ -104,38 +105,45 @@ fn dashboard(user: User, conn: DbConn) -> Template { let blogs = Blog::find_for_author(&*conn, user.id); Template::render("users/dashboard", json!({ "account": user.to_json(&*conn), - "blogs": blogs + "blogs": blogs, + "drafts": Post::drafts_by_author(&*conn, &user).into_iter().map(|a| a.to_json(&*conn)).collect::>(), })) } #[get("/dashboard", rank = 2)] fn dashboard_auth() -> Flash { - utils::requires_login("You need to be logged in order to access your dashboard", uri!(dashboard)) + utils::requires_login( + "You need to be logged in order to access your dashboard", + uri!(dashboard).into() + ) } #[get("/@//follow")] fn follow(name: String, conn: DbConn, user: User, worker: Worker) -> Redirect { let target = User::find_by_fqn(&*conn, name.clone()).unwrap(); - let f = follows::Follow::insert(&*conn, follows::NewFollow { - follower_id: user.id, - following_id: target.id - }); - f.notify(&*conn); + if let Some(follow) = follows::Follow::find(&*conn, user.id, target.id) { + let delete_act = follow.delete(&*conn); + worker.execute(Thunk::of(move || broadcast(&user, delete_act, vec![target]))); + } else { + let f = follows::Follow::insert(&*conn, follows::NewFollow { + follower_id: user.id, + following_id: target.id, + ap_url: format!("{}/follow/{}", user.ap_url, target.ap_url), + }); + f.notify(&*conn); - let mut act = Follow::default(); - act.follow_props.set_actor_link::(user.clone().into_id()).unwrap(); - act.follow_props.set_object_object(user.into_activity(&*conn)).unwrap(); - act.object_props.set_id_string(format!("{}/follow/{}", user.ap_url, target.ap_url)).unwrap(); - act.object_props.set_to_link(target.clone().into_id()).expect("New Follow error while setting 'to'"); - act.object_props.set_cc_link_vec::(vec![]).expect("New Follow error while setting 'cc'"); - - worker.execute(Thunk::of(move || broadcast(&user, act, vec![target]))); + let act = f.into_activity(&*conn); + worker.execute(Thunk::of(move || broadcast(&user, act, vec![target]))); + } Redirect::to(uri!(details: name = name)) } #[get("/@//follow", rank = 2)] fn follow_auth(name: String) -> Flash { - utils::requires_login("You need to be logged in order to follow someone", uri!(follow: name = name)) + utils::requires_login( + "You need to be logged in order to follow someone", + uri!(follow: name = name).into() + ) } #[get("/@//followers?")] @@ -194,7 +202,10 @@ fn edit(name: String, user: User, conn: DbConn) -> Option