diff --git a/Cargo.lock b/Cargo.lock index e76bfbd..77dd3ff 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -35,45 +35,6 @@ dependencies = [ "winapi 0.3.9", ] -[[package]] -name = "async-stream" -version = "0.3.0" -source = "git+https://github.com/SergioBenitez/async-stream.git?rev=c46ada9#c46ada948e0d4800393836f57eb2a3db516beb1e" -dependencies = [ - "async-stream-impl", - "futures-core", -] - -[[package]] -name = "async-stream-impl" -version = "0.3.0" -source = "git+https://github.com/SergioBenitez/async-stream.git?rev=c46ada9#c46ada948e0d4800393836f57eb2a3db516beb1e" -dependencies = [ - "proc-macro2 1.0.26", - "quote 1.0.9", - "syn 1.0.71", -] - -[[package]] -name = "async-trait" -version = "0.1.50" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b98e84bbb4cbcdd97da190ba0c58a1bb0de2c1fdf67d159e192ed766aeca722" -dependencies = [ - "proc-macro2 1.0.26", - "quote 1.0.9", - "syn 1.0.71", -] - -[[package]] -name = "atomic" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3410529e8288c463bedb5930f82833bc0c90e5d2fe639a56582a4d09220b281" -dependencies = [ - "autocfg", -] - [[package]] name = "atomicwrites" version = "0.2.5" @@ -117,18 +78,6 @@ dependencies = [ "rustc-demangle", ] -[[package]] -name = "base-x" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4521f3e3d031370679b3b140beb36dfe4801b09ac77e30c61941f97df3ef28b" - -[[package]] -name = "binascii" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "383d29d513d8764dcdc42ea295d979eb99c3c9f00607b3692cf68a431f7dca72" - [[package]] name = "bitflags" version = "1.2.1" @@ -165,12 +114,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "bumpalo" -version = "3.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63396b8a4b9de3f4fdfb320ab6080762242f66a8ef174c49d8e19b674db4cdbe" - [[package]] name = "byte-tools" version = "0.3.1" @@ -190,15 +133,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c" dependencies = [ "byteorder", + "either", "iovec", ] -[[package]] -name = "bytes" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b700ce4376041dcd0a327fd0097c41095743c4c8af8887265942faf1100bd040" - [[package]] name = "cc" version = "1.0.67" @@ -226,7 +164,7 @@ dependencies = [ "libc", "num-integer", "num-traits 0.2.14", - "time 0.1.43", + "time", "winapi 0.3.9", ] @@ -290,26 +228,40 @@ dependencies = [ ] [[package]] -name = "const_fn" -version = "0.4.7" +name = "crossbeam-deque" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "402da840495de3f976eaefc3485b7f5eb5b0bf9761f9a47be27fe975b3b8c2ec" - -[[package]] -name = "convert_case" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" - -[[package]] -name = "cookie" -version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffdf8865bac3d9a3bde5bde9088ca431b11f5d37c7a578b8086af77248b76627" +checksum = "9f02af974daeee82218205558e51ec8768b48cf524bd01d550abe5573a608285" dependencies = [ - "percent-encoding", - "time 0.2.26", - "version_check", + "crossbeam-epoch", + "crossbeam-utils 0.7.2", + "maybe-uninit", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "058ed274caafc1f60c4997b5fc07bf7dc7cca454af7c6e81edffe5f33f70dace" +dependencies = [ + "autocfg", + "cfg-if 0.1.10", + "crossbeam-utils 0.7.2", + "lazy_static", + "maybe-uninit", + "memoffset", + "scopeguard", +] + +[[package]] +name = "crossbeam-queue" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "774ba60a54c213d409d5353bda12d49cd68d14e45036a285234c8d6f91f92570" +dependencies = [ + "cfg-if 0.1.10", + "crossbeam-utils 0.7.2", + "maybe-uninit", ] [[package]] @@ -334,60 +286,12 @@ dependencies = [ "lazy_static", ] -[[package]] -name = "data-encoding" -version = "2.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ee2393c4a91429dffb4bedf19f4d6abf27d8a732c8ce4980305d782e5426d57" - -[[package]] -name = "derive_more" -version = "0.99.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f82b1b72f1263f214c0f823371768776c4f5841b942c9883aa8e5ec584fd0ba6" -dependencies = [ - "convert_case", - "proc-macro2 1.0.26", - "quote 1.0.9", - "syn 1.0.71", -] - [[package]] name = "deunicode" version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "850878694b7933ca4c9569d30a34b55031b9b139ee1fc7b94a527c4ef960d690" -[[package]] -name = "devise" -version = "0.3.0" -source = "git+https://github.com/SergioBenitez/Devise.git?rev=df00b5#df00b5162edd53e8d496e7935774e69b5f7f6bdf" -dependencies = [ - "devise_codegen", - "devise_core", -] - -[[package]] -name = "devise_codegen" -version = "0.3.0" -source = "git+https://github.com/SergioBenitez/Devise.git?rev=df00b5#df00b5162edd53e8d496e7935774e69b5f7f6bdf" -dependencies = [ - "devise_core", - "quote 1.0.9", -] - -[[package]] -name = "devise_core" -version = "0.3.0" -source = "git+https://github.com/SergioBenitez/Devise.git?rev=df00b5#df00b5162edd53e8d496e7935774e69b5f7f6bdf" -dependencies = [ - "bitflags", - "proc-macro2 1.0.26", - "proc-macro2-diagnostics", - "quote 1.0.9", - "syn 1.0.71", -] - [[package]] name = "digest" version = "0.8.1" @@ -398,10 +302,10 @@ dependencies = [ ] [[package]] -name = "discard" -version = "1.0.4" +name = "doc-comment" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "212d0f5754cb6769937f4501cc0e67f4f4483c8d2c3e1e922ee9edbe4ab4c7c0" +checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" [[package]] name = "dotenv" @@ -421,33 +325,6 @@ version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" -[[package]] -name = "encoding_rs" -version = "0.8.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80df024fbc5ac80f87dfef0d9f5209a252f2a497f7f42944cff24d8253cac065" -dependencies = [ - "cfg-if 1.0.0", -] - -[[package]] -name = "endian-type" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d" - -[[package]] -name = "enum-as-inner" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c5f0096a91d210159eceb2ff5e1c4da18388a170e1e3ce948aac9c8fdbbf595" -dependencies = [ - "heck", - "proc-macro2 1.0.26", - "quote 1.0.9", - "syn 1.0.71", -] - [[package]] name = "env_logger" version = "0.5.13" @@ -455,7 +332,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "15b0a4d2e39f8420210be8b27eeda28029729e2fd4291019455016c348240c38" dependencies = [ "atty", - "humantime 1.3.0", + "humantime", "log", "regex", "termcolor", @@ -463,12 +340,12 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.8.3" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17392a012ea30ef05a610aa97dfb49496e71c9f676b27879922ea5bdf60d9d3f" +checksum = "aafcde04e90a5226a6443b7aabdb016ba2f8307c847d524724bd9b346dd1a2d3" dependencies = [ "atty", - "humantime 2.1.0", + "humantime", "log", "regex", "termcolor", @@ -502,36 +379,12 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" -[[package]] -name = "figment" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ca029e813a72b7526d28273d25f3e4a2f365d1b7a1018a6f93ec9053a119763" -dependencies = [ - "atomic", - "pear", - "serde 1.0.125", - "toml", - "uncased", - "version_check", -] - [[package]] name = "fnv" version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" -[[package]] -name = "form_urlencoded" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" -dependencies = [ - "matches", - "percent-encoding", -] - [[package]] name = "fuchsia-cprng" version = "0.1.1" @@ -591,6 +444,16 @@ version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "098cd1c6dda6ca01650f1a37a794245eb73181d0d4d4e955e2f3c37db7af1815" +[[package]] +name = "futures-cpupool" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab90cde24b3319636588d0c35fe03b1333857621051837ed769faefb4c2162e4" +dependencies = [ + "futures 0.1.31", + "num_cpus", +] + [[package]] name = "futures-executor" version = "0.3.14" @@ -652,19 +515,6 @@ dependencies = [ "slab", ] -[[package]] -name = "generator" -version = "0.6.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "061d3be1afec479d56fa3bd182bf966c7999ec175fcfdb87ac14d417241366c6" -dependencies = [ - "cc", - "libc", - "log", - "rustversion", - "winapi 0.3.9", -] - [[package]] name = "generic-array" version = "0.12.4" @@ -691,12 +541,6 @@ version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f6503fe142514ca4799d4c26297c4248239fe8838d827db6bd6065c6ed29a6ce" -[[package]] -name = "glob" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" - [[package]] name = "globset" version = "0.4.6" @@ -723,21 +567,20 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.3" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "825343c4eef0b63f541f8903f395dc5beb362a979b5799a84062527ef1e37726" +checksum = "a5b34c246847f938a410a03c5458c7fee2274436675e76d8b903c08efc29c462" dependencies = [ - "bytes 1.0.1", + "byteorder", + "bytes", "fnv", - "futures-core", - "futures-sink", - "futures-util", + "futures 0.1.31", "http", "indexmap", + "log", "slab", - "tokio", - "tokio-util", - "tracing", + "string", + "tokio-io", ] [[package]] @@ -766,24 +609,25 @@ dependencies = [ [[package]] name = "http" -version = "0.2.4" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "527e8c9ac747e28542699a951517aa9a6945af506cd1f2e1b53a576c17b6cc11" +checksum = "d6ccf5ede3a895d8856620237b2f02972c1bbc78d2965ad7fe8838d4a0ed41f0" dependencies = [ - "bytes 1.0.1", + "bytes", "fnv", "itoa", ] [[package]] name = "http-body" -version = "0.4.1" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfb77c123b4e2f72a2069aeae0b4b4949cc7e966df277813fc16347e7549737" +checksum = "6741c859c1b2463a423a1dbce98d418e6c3c3fc720fb0d45528657320920292d" dependencies = [ - "bytes 1.0.1", + "bytes", + "futures 0.1.31", "http", - "pin-project-lite", + "tokio-buf", ] [[package]] @@ -792,12 +636,6 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4a1ce40d6fc9764887c2fdc7305c3dcc429ba11ff981c1509416afd5697e4437" -[[package]] -name = "httpdate" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05842d0d43232b23ccb7060ecb0f0626922c21f30012e97b767b30afd4a5d4b9" - [[package]] name = "humansize" version = "1.1.0" @@ -813,47 +651,36 @@ dependencies = [ "quick-error", ] -[[package]] -name = "humantime" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" - [[package]] name = "hyper" -version = "0.14.7" +version = "0.12.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e5f105c494081baa3bf9e200b279e27ec1623895cd504c7dbef8d0b080fcf54" +checksum = "5c843caf6296fc1f93444735205af9ed4e109a539005abb2564ae1d6fad34c52" dependencies = [ - "bytes 1.0.1", - "futures-channel", - "futures-core", - "futures-util", + "bytes", + "futures 0.1.31", + "futures-cpupool", "h2", "http", "http-body", "httparse", - "httpdate", + "iovec", "itoa", - "pin-project", - "socket2", + "log", + "net2", + "rustc_version", + "time", "tokio", - "tower-service", - "tracing", + "tokio-buf", + "tokio-executor", + "tokio-io", + "tokio-reactor", + "tokio-tcp", + "tokio-threadpool", + "tokio-timer", "want", ] -[[package]] -name = "idna" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" -dependencies = [ - "matches", - "unicode-bidi", - "unicode-normalization", -] - [[package]] name = "ignore" version = "0.4.17" @@ -880,22 +707,6 @@ checksum = "824845a0bf897a9042383849b02c1bc219c2383772efcd5c6f9766fa4b81aef3" dependencies = [ "autocfg", "hashbrown", - "serde 1.0.125", -] - -[[package]] -name = "inlinable_string" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3094308123a0e9fd59659ce45e22de9f53fc1d2ac6e1feb9fef988e4f76cad77" - -[[package]] -name = "instant" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61124eeebbd69b8190558df225adf7e4caafce0d743919e5d6b19652314ec5ec" -dependencies = [ - "cfg-if 1.0.0", ] [[package]] @@ -907,18 +718,56 @@ dependencies = [ "libc", ] -[[package]] -name = "ipnet" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47be2f14c678be2fdcab04ab1171db51b2762ce6f0a8ee87c8dd4a04ed216135" - [[package]] name = "itoa" version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736" +[[package]] +name = "jsonrpc-core" +version = "11.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97b83fdc5e0218128d0d270f2f2e7a5ea716f3240c8518a58bc89e6716ba8581" +dependencies = [ + "futures 0.1.31", + "log", + "serde 1.0.125", + "serde_derive", + "serde_json", +] + +[[package]] +name = "jsonrpc-http-server" +version = "11.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "541257be6c8f75a41812575150dfa1120d3ee3a852601f2ca8ac9bcb73575c4e" +dependencies = [ + "hyper", + "jsonrpc-core", + "jsonrpc-server-utils", + "log", + "net2", + "unicase", +] + +[[package]] +name = "jsonrpc-server-utils" +version = "11.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3372b3248a53abcca8f61924f188052bb0c4cd80b482b2b4eaf9f8667efb9f4" +dependencies = [ + "bytes", + "globset", + "jsonrpc-core", + "lazy_static", + "log", + "num_cpus", + "tokio", + "tokio-codec", + "unicase", +] + [[package]] name = "kernel32-sys" version = "0.2.2" @@ -966,15 +815,6 @@ dependencies = [ "scopeguard", ] -[[package]] -name = "lock_api" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a3c91c24eae6777794bb1997ad98bbb87daf92890acab859f7eaa4320333176" -dependencies = [ - "scopeguard", -] - [[package]] name = "log" version = "0.4.14" @@ -984,31 +824,12 @@ dependencies = [ "cfg-if 1.0.0", ] -[[package]] -name = "loom" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0e8460f2f2121162705187214720353c517b97bdfb3494c0b1e33d83ebe4bed" -dependencies = [ - "cfg-if 0.1.10", - "generator", - "scoped-tls", - "serde 1.0.125", - "serde_json", -] - [[package]] name = "maplit" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" -[[package]] -name = "matches" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" - [[package]] name = "maybe-uninit" version = "2.0.0" @@ -1022,10 +843,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525" [[package]] -name = "mime" -version = "0.3.16" +name = "memoffset" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" +checksum = "043175f069eda7b85febe4a74abbaeff828d9f8b448515d3151a14a3542811aa" +dependencies = [ + "autocfg", +] [[package]] name = "miniz_oxide" @@ -1050,23 +874,21 @@ dependencies = [ "kernel32-sys", "libc", "log", - "miow 0.2.2", + "miow", "net2", "slab", "winapi 0.2.8", ] [[package]] -name = "mio" -version = "0.7.11" +name = "mio-uds" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf80d3e903b34e0bd7282b218398aec54e082c840d9baf8339e0080a0c542956" +checksum = "afcb699eb26d4332647cc848492bbc15eafb26f08d0304550d5aa1f612e066f0" dependencies = [ + "iovec", "libc", - "log", - "miow 0.3.7", - "ntapi", - "winapi 0.3.9", + "mio", ] [[package]] @@ -1081,40 +903,12 @@ dependencies = [ "ws2_32-sys", ] -[[package]] -name = "miow" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21" -dependencies = [ - "winapi 0.3.9", -] - [[package]] name = "mkdirp" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9796ba90f2e7187d7837ea05033ed6dff5320cbf2944fe2dc1da53569396ca07" -[[package]] -name = "multer" -version = "1.2.2" -source = "git+https://github.com/rousan/multer-rs.git?rev=7e4f0c5f#7e4f0c5fe14e4c531f503922bfe04f68b32ddf17" -dependencies = [ - "bytes 1.0.1", - "derive_more", - "encoding_rs", - "futures-util", - "http", - "httparse", - "log", - "mime", - "tokio", - "tokio-util", - "twoway", - "version_check", -] - [[package]] name = "nest" version = "1.0.0" @@ -1130,7 +924,7 @@ dependencies = [ "serde-hjson", "serde_json", "serde_yaml", - "snafu", + "snafu 0.2.3", "toml", ] @@ -1145,15 +939,6 @@ dependencies = [ "winapi 0.3.9", ] -[[package]] -name = "nibble_vec" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a5d83df9f36fe23f0c3648c6bbb8b0298bb5f1939c8f2704431371f4b84d43" -dependencies = [ - "smallvec 1.6.1", -] - [[package]] name = "nix" version = "0.14.1" @@ -1167,15 +952,6 @@ dependencies = [ "void", ] -[[package]] -name = "ntapi" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f6bb902e437b6d86e03cce10a7e2af662292c5dfef23b65899ea3ac9354ad44" -dependencies = [ - "winapi 0.3.9", -] - [[package]] name = "num-integer" version = "0.1.44" @@ -1244,22 +1020,11 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f842b1982eb6c2fe34036a4fbfb06dd185a3f5c8edfaacdf7d1ea10b07de6252" dependencies = [ - "lock_api 0.3.4", - "parking_lot_core 0.6.2", + "lock_api", + "parking_lot_core", "rustc_version", ] -[[package]] -name = "parking_lot" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d7744ac029df22dca6284efe4e898991d28e3085c706c972bcd7da4a27a15eb" -dependencies = [ - "instant", - "lock_api 0.4.3", - "parking_lot_core 0.8.3", -] - [[package]] name = "parking_lot_core" version = "0.6.2" @@ -1269,23 +1034,9 @@ dependencies = [ "cfg-if 0.1.10", "cloudabi", "libc", - "redox_syscall 0.1.57", + "redox_syscall", "rustc_version", - "smallvec 0.6.14", - "winapi 0.3.9", -] - -[[package]] -name = "parking_lot_core" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa7a782938e745763fe6907fc6ba86946d72f49fe7e21de074e08128a99fb018" -dependencies = [ - "cfg-if 1.0.0", - "instant", - "libc", - "redox_syscall 0.2.7", - "smallvec 1.6.1", + "smallvec", "winapi 0.3.9", ] @@ -1305,44 +1056,18 @@ dependencies = [ "clap-log-flag", "clap-verbosity-flag", "dotenv", + "env_logger 0.6.2", "futures 0.3.14", + "jsonrpc-core", + "jsonrpc-http-server", "log", "nest", "regex", - "rocket", - "rocket_contrib", "serde 1.0.125", + "serde_json", + "snafu 0.6.10", "structopt", "tera", - "tokio", - "tokio-executor", - "tokio-tcp", - "tokio-udp", - "trust-dns-client", - "trust-dns-server", -] - -[[package]] -name = "pear" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86ab3a2b792945ed67eadbbdcbd2898f8dd2319392b2a45ac21adea5245cb113" -dependencies = [ - "inlinable_string", - "pear_codegen", - "yansi", -] - -[[package]] -name = "pear_codegen" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "620c9c4776ba41b59ab101360c9b1419c0c8c81cd2e6e39fae7109e7425994cb" -dependencies = [ - "proc-macro2 1.0.26", - "proc-macro2-diagnostics", - "quote 1.0.9", - "syn 1.0.71", ] [[package]] @@ -1394,26 +1119,6 @@ dependencies = [ "sha-1", ] -[[package]] -name = "pin-project" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7509cc106041c40a4518d2af7a61530e1eed0e6285296a3d8c5472806ccc4a4" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c950132583b500556b1efd71d45b319029f2b71518d979fcc208e16b42426f" -dependencies = [ - "proc-macro2 1.0.26", - "quote 1.0.9", - "syn 1.0.71", -] - [[package]] name = "pin-project-lite" version = "0.2.6" @@ -1474,19 +1179,6 @@ dependencies = [ "unicode-xid 0.2.2", ] -[[package]] -name = "proc-macro2-diagnostics" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bf29726d67464d49fa6224a1d07936a8c08bb3fba727c7493f6cf1616fdaada" -dependencies = [ - "proc-macro2 1.0.26", - "quote 1.0.9", - "syn 1.0.71", - "version_check", - "yansi", -] - [[package]] name = "quick-error" version = "1.2.3" @@ -1511,16 +1203,6 @@ dependencies = [ "proc-macro2 1.0.26", ] -[[package]] -name = "radix_trie" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c069c179fcdc6a2fe24d8d18305cf085fdbd4f922c041943e203685d6a1c58fd" -dependencies = [ - "endian-type", - "nibble_vec", -] - [[package]] name = "rand" version = "0.4.6" @@ -1604,35 +1286,6 @@ version = "0.1.57" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce" -[[package]] -name = "redox_syscall" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85dd92e586f7355c633911e11f77f3d12f04b1b1bd76a198bd34ae3af8341ef2" -dependencies = [ - "bitflags", -] - -[[package]] -name = "ref-cast" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "300f2a835d808734ee295d45007adacb9ebb29dd3ae2424acfa17930cae541da" -dependencies = [ - "ref-cast-impl", -] - -[[package]] -name = "ref-cast-impl" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c38e3aecd2b21cb3959637b883bb3714bc7e43f0268b9a29d3743ee3e55cdd2" -dependencies = [ - "proc-macro2 1.0.26", - "quote 1.0.9", - "syn 1.0.71", -] - [[package]] name = "regex" version = "1.4.6" @@ -1659,94 +1312,6 @@ dependencies = [ "winapi 0.3.9", ] -[[package]] -name = "rocket" -version = "0.5.0-dev" -source = "git+https://github.com/SergioBenitez/Rocket?branch=master#3a7559edcec7c443e68e22e038aaa2d90ef27c23" -dependencies = [ - "async-stream", - "async-trait", - "atomic", - "atty", - "binascii", - "bytes 1.0.1", - "either", - "figment", - "futures 0.3.14", - "indexmap", - "log", - "memchr", - "multer", - "num_cpus", - "parking_lot 0.11.1", - "pin-project-lite", - "rand 0.8.3", - "ref-cast", - "rocket_codegen", - "rocket_http", - "serde 1.0.125", - "state", - "tempfile", - "time 0.2.26", - "tokio", - "tokio-util", - "ubyte", - "version_check", - "yansi", -] - -[[package]] -name = "rocket_codegen" -version = "0.5.0-dev" -source = "git+https://github.com/SergioBenitez/Rocket?branch=master#3a7559edcec7c443e68e22e038aaa2d90ef27c23" -dependencies = [ - "devise", - "glob", - "indexmap", - "quote 1.0.9", - "rocket_http", - "unicode-xid 0.2.2", -] - -[[package]] -name = "rocket_contrib" -version = "0.5.0-dev" -source = "git+https://github.com/SergioBenitez/Rocket?branch=master#3a7559edcec7c443e68e22e038aaa2d90ef27c23" -dependencies = [ - "log", - "rocket", - "serde 1.0.125", - "serde_json", - "tokio", -] - -[[package]] -name = "rocket_http" -version = "0.5.0-dev" -source = "git+https://github.com/SergioBenitez/Rocket?branch=master#3a7559edcec7c443e68e22e038aaa2d90ef27c23" -dependencies = [ - "cookie", - "either", - "http", - "hyper", - "indexmap", - "log", - "memchr", - "mime", - "parking_lot 0.11.1", - "pear", - "percent-encoding", - "pin-project-lite", - "ref-cast", - "serde 1.0.125", - "smallvec 1.6.1", - "stable-pattern", - "state", - "time 0.2.26", - "tokio", - "uncased", -] - [[package]] name = "rustc-demangle" version = "0.1.18" @@ -1762,12 +1327,6 @@ dependencies = [ "semver", ] -[[package]] -name = "rustversion" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb5d2a036dc6d2d8fd16fde3498b04306e29bd193bf306a57427019b823d5acd" - [[package]] name = "ryu" version = "1.0.5" @@ -1783,12 +1342,6 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "scoped-tls" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2" - [[package]] name = "scopeguard" version = "1.1.0" @@ -1894,21 +1447,6 @@ dependencies = [ "opaque-debug", ] -[[package]] -name = "sha1" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d" - -[[package]] -name = "signal-hook-registry" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16f1d0fef1604ba8f7a073c7e701f213e056707210e9020af4528e0101ce11a6" -dependencies = [ - "libc", -] - [[package]] name = "slab" version = "0.4.3" @@ -1933,12 +1471,6 @@ dependencies = [ "maybe-uninit", ] -[[package]] -name = "smallvec" -version = "1.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e" - [[package]] name = "snafu" version = "0.2.3" @@ -1946,7 +1478,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67a2e16c9b74a09d4bc84ea6e5eb68fef70b4cb14e8ccd26f2de76af2e9c2e8a" dependencies = [ "backtrace", - "snafu-derive", + "snafu-derive 0.2.3", +] + +[[package]] +name = "snafu" +version = "0.6.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eab12d3c261b2308b0d80c26fffb58d17eba81a4be97890101f416b478c79ca7" +dependencies = [ + "doc-comment", + "snafu-derive 0.6.10", ] [[package]] @@ -1961,90 +1503,25 @@ dependencies = [ ] [[package]] -name = "socket2" -version = "0.4.0" +name = "snafu-derive" +version = "0.6.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e3dfc207c526015c632472a77be09cf1b6e46866581aecae5cc38fb4235dea2" -dependencies = [ - "libc", - "winapi 0.3.9", -] - -[[package]] -name = "stable-pattern" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4564168c00635f88eaed410d5efa8131afa8d8699a612c80c455a0ba05c21045" -dependencies = [ - "memchr", -] - -[[package]] -name = "standback" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e113fb6f3de07a243d434a56ec6f186dfd51cb08448239fe7bcae73f87ff28ff" -dependencies = [ - "version_check", -] - -[[package]] -name = "state" -version = "0.4.2" -source = "git+https://github.com/SergioBenitez/state.git?rev=8f94dc#8f94dce673b7d4b0e7b96c808a84f5e2a4be4a60" -dependencies = [ - "loom", -] - -[[package]] -name = "stdweb" -version = "0.4.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d022496b16281348b52d0e30ae99e01a73d737b2f45d38fed4edf79f9325a1d5" -dependencies = [ - "discard", - "rustc_version", - "stdweb-derive", - "stdweb-internal-macros", - "stdweb-internal-runtime", - "wasm-bindgen", -] - -[[package]] -name = "stdweb-derive" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c87a60a40fccc84bef0652345bbbbbe20a605bf5d0ce81719fc476f5c03b50ef" +checksum = "1508efa03c362e23817f96cde18abed596a25219a8b2c66e8db33c03543d315b" dependencies = [ "proc-macro2 1.0.26", "quote 1.0.9", - "serde 1.0.125", - "serde_derive", "syn 1.0.71", ] [[package]] -name = "stdweb-internal-macros" -version = "0.2.9" +name = "string" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58fa5ff6ad0d98d1ffa8cb115892b6e69d67799f6763e162a1c9db421dc22e11" +checksum = "d24114bfcceb867ca7f71a0d3fe45d45619ec47a6fbfa98cb14e14250bfa5d6d" dependencies = [ - "base-x", - "proc-macro2 1.0.26", - "quote 1.0.9", - "serde 1.0.125", - "serde_derive", - "serde_json", - "sha1", - "syn 1.0.71", + "bytes", ] -[[package]] -name = "stdweb-internal-runtime" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "213701ba3370744dcd1a12960caa4843b3d68b4d1c0a5d575e0d65b2ee9d16c0" - [[package]] name = "strsim" version = "0.8.0" @@ -2117,20 +1594,6 @@ dependencies = [ "remove_dir_all", ] -[[package]] -name = "tempfile" -version = "3.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dac1c663cfc93810f88aed9b8941d48cabf856a1b111c29a40439018d870eb22" -dependencies = [ - "cfg-if 1.0.0", - "libc", - "rand 0.8.3", - "redox_syscall 0.2.7", - "remove_dir_all", - "winapi 0.3.9", -] - [[package]] name = "tera" version = "1.8.0" @@ -2171,26 +1634,6 @@ dependencies = [ "unicode-width", ] -[[package]] -name = "thiserror" -version = "1.0.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0f4a65597094d4483ddaed134f409b2cb7c1beccf25201a9f73c719254fa98e" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7765189610d8241a44529806d6fd1f2e0a08734313a35d5b3a556f92b381f3c0" -dependencies = [ - "proc-macro2 1.0.26", - "quote 1.0.9", - "syn 1.0.71", -] - [[package]] name = "thread_local" version = "1.1.3" @@ -2210,77 +1653,39 @@ dependencies = [ "winapi 0.3.9", ] -[[package]] -name = "time" -version = "0.2.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08a8cbfbf47955132d0202d1662f49b2423ae35862aee471f3ba4b133358f372" -dependencies = [ - "const_fn", - "libc", - "standback", - "stdweb", - "time-macros", - "version_check", - "winapi 0.3.9", -] - -[[package]] -name = "time-macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "957e9c6e26f12cb6d0dd7fc776bb67a706312e7299aed74c8dd5b17ebb27e2f1" -dependencies = [ - "proc-macro-hack", - "time-macros-impl", -] - -[[package]] -name = "time-macros-impl" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5c3be1edfad6027c69f5491cf4cb310d1a71ecd6af742788c6ff8bced86b8fa" -dependencies = [ - "proc-macro-hack", - "proc-macro2 1.0.26", - "quote 1.0.9", - "standback", - "syn 1.0.71", -] - -[[package]] -name = "tinyvec" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b5220f05bb7de7f3f53c7c065e1199b3172696fe2db9f9c4d8ad9b4ee74c342" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" - [[package]] name = "tokio" -version = "1.5.0" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83f0c8e7c0addab50b663055baf787d0af7f413a46e6e7fb9559a4e4db7137a5" +checksum = "5a09c0b5bb588872ab2f09afa13ee6e9dac11e10a0ec9e8e3ba39a5a5d530af6" dependencies = [ - "autocfg", - "bytes 1.0.1", - "libc", - "memchr", - "mio 0.7.11", + "bytes", + "futures 0.1.31", + "mio", "num_cpus", - "once_cell", - "parking_lot 0.11.1", - "pin-project-lite", - "signal-hook-registry", - "tokio-macros", - "winapi 0.3.9", + "tokio-codec", + "tokio-current-thread", + "tokio-executor", + "tokio-fs", + "tokio-io", + "tokio-reactor", + "tokio-sync", + "tokio-tcp", + "tokio-threadpool", + "tokio-timer", + "tokio-udp", + "tokio-uds", +] + +[[package]] +name = "tokio-buf" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fb220f46c53859a4b7ec083e41dec9778ff0b1851c0942b211edb89e0ccdc46" +dependencies = [ + "bytes", + "either", + "futures 0.1.31", ] [[package]] @@ -2289,11 +1694,21 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25b2998660ba0e70d18684de5d06b70b70a3a747469af9dea7618cc59e75976b" dependencies = [ - "bytes 0.4.12", + "bytes", "futures 0.1.31", "tokio-io", ] +[[package]] +name = "tokio-current-thread" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1de0e32a83f131e002238d7ccde18211c0a5397f60cbfffcb112868c2e0e20e" +dependencies = [ + "futures 0.1.31", + "tokio-executor", +] + [[package]] name = "tokio-executor" version = "0.1.10" @@ -2304,28 +1719,28 @@ dependencies = [ "futures 0.1.31", ] +[[package]] +name = "tokio-fs" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "297a1206e0ca6302a0eed35b700d292b275256f596e2f3fea7729d5e629b6ff4" +dependencies = [ + "futures 0.1.31", + "tokio-io", + "tokio-threadpool", +] + [[package]] name = "tokio-io" version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57fc868aae093479e3131e3d165c93b1c7474109d13c90ec0dda2a1bbfff0674" dependencies = [ - "bytes 0.4.12", + "bytes", "futures 0.1.31", "log", ] -[[package]] -name = "tokio-macros" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "caf7b11a536f46a809a8a9f0bb4237020f70ecbf115b842360afb127ea2fda57" -dependencies = [ - "proc-macro2 1.0.26", - "quote 1.0.9", - "syn 1.0.71", -] - [[package]] name = "tokio-reactor" version = "0.1.12" @@ -2336,9 +1751,9 @@ dependencies = [ "futures 0.1.31", "lazy_static", "log", - "mio 0.6.23", + "mio", "num_cpus", - "parking_lot 0.9.0", + "parking_lot", "slab", "tokio-executor", "tokio-io", @@ -2361,41 +1776,74 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "98df18ed66e3b72e742f185882a9e201892407957e45fbff8da17ae7a7c51f72" dependencies = [ - "bytes 0.4.12", + "bytes", "futures 0.1.31", "iovec", - "mio 0.6.23", + "mio", "tokio-io", "tokio-reactor", ] +[[package]] +name = "tokio-threadpool" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df720b6581784c118f0eb4310796b12b1d242a7eb95f716a8367855325c25f89" +dependencies = [ + "crossbeam-deque", + "crossbeam-queue", + "crossbeam-utils 0.7.2", + "futures 0.1.31", + "lazy_static", + "log", + "num_cpus", + "slab", + "tokio-executor", +] + +[[package]] +name = "tokio-timer" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93044f2d313c95ff1cb7809ce9a7a05735b012288a888b62d4434fd58c94f296" +dependencies = [ + "crossbeam-utils 0.7.2", + "futures 0.1.31", + "slab", + "tokio-executor", +] + [[package]] name = "tokio-udp" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2a0b10e610b39c38b031a2fcab08e4b82f16ece36504988dcbd81dbba650d82" dependencies = [ - "bytes 0.4.12", + "bytes", "futures 0.1.31", "log", - "mio 0.6.23", + "mio", "tokio-codec", "tokio-io", "tokio-reactor", ] [[package]] -name = "tokio-util" -version = "0.6.6" +name = "tokio-uds" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "940a12c99365c31ea8dd9ba04ec1be183ffe4920102bb7122c2f515437601e8e" +checksum = "ab57a4ac4111c8c9dbcf70779f6fc8bc35ae4b2454809febac840ad19bd7e4e0" dependencies = [ - "bytes 1.0.1", - "futures-core", - "futures-sink", + "bytes", + "futures 0.1.31", + "iovec", + "libc", "log", - "pin-project-lite", - "tokio", + "mio", + "mio-uds", + "tokio-codec", + "tokio-io", + "tokio-reactor", ] [[package]] @@ -2408,153 +1856,24 @@ dependencies = [ "serde 1.0.125", ] -[[package]] -name = "tower-service" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" - -[[package]] -name = "tracing" -version = "0.1.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01ebdc2bb4498ab1ab5f5b73c5803825e60199229ccba0698170e3be0e7f959f" -dependencies = [ - "cfg-if 1.0.0", - "pin-project-lite", - "tracing-core", -] - -[[package]] -name = "tracing-core" -version = "0.1.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f50de3927f93d202783f4513cda820ab47ef17f624b03c096e86ef00c67e6b5f" -dependencies = [ - "lazy_static", -] - -[[package]] -name = "trust-dns-client" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f557e7009d16747a0363f9127588c3c236f279b4caa1177d703221a258dd3f3" -dependencies = [ - "cfg-if 1.0.0", - "chrono", - "data-encoding", - "futures-channel", - "futures-util", - "lazy_static", - "log", - "radix_trie", - "rand 0.8.3", - "thiserror", - "tokio", - "trust-dns-proto", -] - -[[package]] -name = "trust-dns-proto" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "952a078337565ba39007de99b151770f41039253a31846f0a3d5cd5a4ac8eedf" -dependencies = [ - "async-trait", - "cfg-if 1.0.0", - "data-encoding", - "enum-as-inner", - "futures-channel", - "futures-io", - "futures-util", - "idna", - "ipnet", - "lazy_static", - "log", - "rand 0.8.3", - "smallvec 1.6.1", - "thiserror", - "tinyvec", - "tokio", - "url", -] - -[[package]] -name = "trust-dns-server" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c7f4ae792a675921c8cdea0e32ad5c4105c6054c9cbec0a80281f8b65325c46" -dependencies = [ - "async-trait", - "bytes 1.0.1", - "cfg-if 1.0.0", - "chrono", - "enum-as-inner", - "env_logger 0.8.3", - "futures-executor", - "futures-util", - "log", - "serde 1.0.125", - "thiserror", - "tokio", - "toml", - "trust-dns-client", - "trust-dns-proto", -] - [[package]] name = "try-lock" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" -[[package]] -name = "twoway" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b40075910de3a912adbd80b5d8bad6ad10a23eeb1f5bf9d4006839e899ba5bc" -dependencies = [ - "memchr", - "unchecked-index", -] - [[package]] name = "typenum" version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "879f6906492a7cd215bfa4cf595b600146ccfac0c79bcbd1f3000162af5e8b06" -[[package]] -name = "ubyte" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42756bb9e708855de2f8a98195643dff31a97f0485d90d8467b39dc24be9e8fe" -dependencies = [ - "serde 1.0.125", -] - [[package]] name = "ucd-trie" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c" -[[package]] -name = "uncased" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5baeed7327e25054889b9bd4f975f32e5f4c5d434042d59ab6cd4142c0a76ed0" -dependencies = [ - "serde 1.0.125", - "version_check", -] - -[[package]] -name = "unchecked-index" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eeba86d422ce181a719445e51872fa30f1f7413b62becb52e95ec91aa262d85c" - [[package]] name = "unic-char-property" version = "0.9.0" @@ -2606,21 +1925,12 @@ dependencies = [ ] [[package]] -name = "unicode-bidi" -version = "0.3.5" +name = "unicase" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eeb8be209bb1c96b7c177c7420d26e04eccacb0eeae6b980e35fcb74678107e0" +checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" dependencies = [ - "matches", -] - -[[package]] -name = "unicode-normalization" -version = "0.1.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07fbfce1c8a97d547e8b5334978438d9d6ec8c20e38f56d4a4374d181493eaef" -dependencies = [ - "tinyvec", + "version_check", ] [[package]] @@ -2647,18 +1957,6 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" -[[package]] -name = "url" -version = "2.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ccd964113622c8e9322cfac19eb1004a07e636c545f325da085d5cdde6f1f8b" -dependencies = [ - "form_urlencoded", - "idna", - "matches", - "percent-encoding", -] - [[package]] name = "vec_map" version = "0.8.2" @@ -2690,10 +1988,11 @@ dependencies = [ [[package]] name = "want" -version = "0.3.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" +checksum = "b6395efa4784b027708f7451087e647ec73cc74f5d9bc2e418404248d679a230" dependencies = [ + "futures 0.1.31", "log", "try-lock", ] @@ -2704,60 +2003,6 @@ version = "0.10.2+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" -[[package]] -name = "wasm-bindgen" -version = "0.2.73" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83240549659d187488f91f33c0f8547cbfef0b2088bc470c116d1d260ef623d9" -dependencies = [ - "cfg-if 1.0.0", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.73" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae70622411ca953215ca6d06d3ebeb1e915f0f6613e3b495122878d7ebec7dae" -dependencies = [ - "bumpalo", - "lazy_static", - "log", - "proc-macro2 1.0.26", - "quote 1.0.9", - "syn 1.0.71", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.73" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e734d91443f177bfdb41969de821e15c516931c3c3db3d318fa1b68975d0f6f" -dependencies = [ - "quote 1.0.9", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.73" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d53739ff08c8a68b0fdbcd54c372b8ab800b1449ab3c9d706503bc7dd1621b2c" -dependencies = [ - "proc-macro2 1.0.26", - "quote 1.0.9", - "syn 1.0.71", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.73" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9a543ae66aa233d14bb765ed9af4a33e81b8b58d1584cf1b47ff8cd0b9e4489" - [[package]] name = "winapi" version = "0.2.8" @@ -2819,9 +2064,3 @@ checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" dependencies = [ "linked-hash-map 0.5.4", ] - -[[package]] -name = "yansi" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fc79f4a1e39857fc00c3f662cbf2651c771f00e9c15fe2abc341806bd46bd71" diff --git a/Cargo.toml b/Cargo.toml index 1151d6c..9eba1b6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,18 +11,15 @@ log = "0.4" futures = "0.3.1" nest = "1" structopt = "0.2" -tokio = { version = "1.5.0", features = ["full"] } -tokio-executor = "0.1" -tokio-tcp = "0.1.4" -tokio-udp = "0.1.4" -trust-dns-server = "0.20.2" -trust-dns-client = "0.20.2" -rocket = { git = "https://github.com/SergioBenitez/Rocket", branch = "master" } -rocket_contrib = { git = "https://github.com/SergioBenitez/Rocket", branch = "master" } -serde = "1.0.125" +jsonrpc-core = "11" +jsonrpc-http-server = "11" +serde = { version = "1", features = ["derive"] } +serde_json = "1" dotenv = "0.15.0" tera = "1" regex = "1" +snafu = "0.6" +env_logger = "0.6" [package.metadata.deb] depends = "$auto" diff --git a/debian/peach-dyndns-server.service b/debian/peach-dyndns-server.service index 29b738e..7629d06 100644 --- a/debian/peach-dyndns-server.service +++ b/debian/peach-dyndns-server.service @@ -6,9 +6,9 @@ Type=simple User=peach-dyndns Group=bind Environment="RUST_LOG=info" -Environment="ROCKET_PORT=3002" +Environment="PEACH_DYNDNS_SERVER=127.0.0.1:3002" WorkingDirectory=/srv/peachcloud/peach-dyndns-server/prod-peach-dyndns -ExecStart=/usr/bin/peach-dyndns-server -vv +ExecStart=/usr/bin/peach-dyndns-server Restart=always [Install] diff --git a/src/errors.rs b/src/errors.rs index d3ab7fc..e5533a2 100644 --- a/src/errors.rs +++ b/src/errors.rs @@ -1,23 +1,87 @@ +use std::{error, str}; + +use jsonrpc_core::{types::error::Error, ErrorCode}; +use snafu::Snafu; use std::string::FromUtf8Error; +pub type BoxError = Box; + +#[derive(Debug, Snafu)] +#[snafu(visibility(pub(crate)))] +pub enum PeachDynDnsError { + + #[snafu(display("Missing expected parameters: {}", e))] + MissingParams { e: Error }, + + #[snafu(display("Domain is in invalid format: {}", domain))] + InvalidDomain { domain: String }, + + #[snafu(display("There was an error in the bind configuration"))] + BindConfigurationError, + + #[snafu(display("This domain was already registered: {}", domain))] + DomainAlreadyExistsError { domain: String }, + + #[snafu(display("Error parsing key file: {}", source))] + KeyFileParseError { source: FromUtf8Error }, + + #[snafu(display("Error generating key: {}", source))] + KeyGenerationError { source: std::io::Error } -#[derive(Debug)] -pub enum PeachDynError { - GenerateTsigIoError(std::io::Error), - GenerateTsigParseError(std::string::FromUtf8Error), - DomainAlreadyExistsError(String), - BindConfigurationError(String), - InvalidDomainError(String) } -impl From for PeachDynError { - fn from(err: std::io::Error) -> PeachDynError { - PeachDynError::GenerateTsigIoError(err) + +impl From for Error { + fn from(err: PeachDynDnsError) -> Self { + match &err { + PeachDynDnsError::MissingParams { e } => e.clone(), + PeachDynDnsError::InvalidDomain { domain} => Error { + code: ErrorCode::ServerError(-32028), + message: format!("Domain is invalid format: {}", domain), + data: None, + }, + PeachDynDnsError::BindConfigurationError => Error { + code: ErrorCode::ServerError(-32029), + message: format!("There was a bind configuration error"), + data: None, + }, + PeachDynDnsError::DomainAlreadyExistsError { domain} => Error { + code: ErrorCode::ServerError(-32030), + message: format!("Can't register domain that already exists: {}", domain), + data: None, + }, + PeachDynDnsError::KeyFileParseError { source: _} => Error { + code: ErrorCode::ServerError(-32031), + message: format!("Error parsing key file"), + data: None, + }, + PeachDynDnsError::KeyGenerationError { source: _} => Error { + code: ErrorCode::ServerError(-32032), + message: format!("Key generation error"), + data: None, + }, + } } } -impl From for PeachDynError { - fn from(err: std::string::FromUtf8Error) -> PeachDynError { - PeachDynError::GenerateTsigParseError(err) - } -} \ No newline at end of file +//#[derive(Debug)] +//pub enum PeachDynError { +// GenerateTsigIoError(std::io::Error), +// GenerateTsigParseError(std::string::FromUtf8Error), +// DomainAlreadyExistsError(String), +// BindConfigurationError(String), +// InvalidDomainError(String) +// NetworkError::MissingParams { e } => e.clone(), +//} +// +//impl From for PeachDynError { +// fn from(err: std::io::Error) -> PeachDynError { +// PeachDynError::GenerateTsigIoError(err) +// } +//} +// +//impl From for PeachDynError { +// fn from(err: std::string::FromUtf8Error) -> PeachDynError { +// PeachDynError::GenerateTsigParseError(err) +// } +//} \ No newline at end of file diff --git a/src/generate_zone.rs b/src/generate_zone.rs index 3a9a49b..a3131df 100644 --- a/src/generate_zone.rs +++ b/src/generate_zone.rs @@ -7,18 +7,20 @@ use std::fs::OpenOptions; use std::io::Write; use std::process::Command; use tera::{Tera, Context}; -use crate::errors::PeachDynError; +use snafu::{ResultExt}; +use log::{info, error}; +use crate::errors::*; use crate::constants::DOMAIN_REGEX; /// function to generate the text of a TSIG key file -pub fn generate_tsig_key(full_domain: &str) -> Result { +pub fn generate_tsig_key(full_domain: &str) -> Result { let output = Command::new("/usr/sbin/tsig-keygen") .arg("-a") .arg("hmac-md5") .arg(full_domain) - .output()?; - let key_file_text = String::from_utf8(output.stdout)?; + .output().context(KeyGenerationError)?; + let key_file_text = String::from_utf8(output.stdout).context(KeyFileParseError)?; Ok(key_file_text) } @@ -65,17 +67,17 @@ pub fn check_domain_available(full_domain: &str) -> bool { /// - add a zone section to /etc/bind/named.conf.local, associating the key with the subdomain /// - add a minimal zone file to /var/lib/bind/subdomain.dyn.peachcloud.org /// - reload bind and return the secret key to the client -pub fn generate_zone(full_domain: &str) -> Result { +pub fn generate_zone(full_domain: &str) -> Result { // first safety check domain is in correct format if !validate_domain(full_domain) { - return Err(PeachDynError::InvalidDomainError(full_domain.to_string())); + return Err(PeachDynDnsError::InvalidDomain{ domain: full_domain.to_string() }); } // safety check if the domain is available let is_available = check_domain_available(full_domain); if !is_available { - return Err(PeachDynError::DomainAlreadyExistsError(full_domain.to_string())); + return Err(PeachDynDnsError::DomainAlreadyExistsError { domain: full_domain.to_string() }); } // generate string with text for TSIG key file @@ -134,7 +136,7 @@ pub fn generate_zone(full_domain: &str) -> Result { .arg("/usr/bin/reloadbind") .status().expect("error restarting bind9"); if !status.success() { - return Err(PeachDynError::BindConfigurationError("There was an error in the bind configuration".to_string())); + return Err(PeachDynDnsError::BindConfigurationError); // TODO: for extra safety consider to revert bind configurations to whatever they were before } diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..24b0062 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,152 @@ +/* +* LIST OF ROUTES +* /domain/register (add a new domain and get back the TSIG key for subsequent updating with nsupdate) +* /domain/check-available (check if given domain is available) +* /user/register sends an email verification to create a new account) NOT IMPLEMENTED +* /user/verify (for clicking the link in the email) NOT IMPLEMENTED +*/ +mod errors; +mod generate_zone; +mod constants; +use crate::generate_zone::{check_domain_available, generate_zone, validate_domain}; +use std::result::Result; +use jsonrpc_core::{types::error::Error, IoHandler, Params, Value}; +use jsonrpc_http_server::{AccessControlAllowOrigin, DomainsValidation, ServerBuilder}; +use log::info; +use std::env; + + +use crate::errors::{BoxError, PeachDynDnsError}; +use serde::{Deserialize}; + +#[derive(Deserialize, Debug)] +pub struct RegisterDomainPost { + domain: String, +} + +/// Create JSON-RPC I/O handler, add RPC methods and launch HTTP server. +pub fn run() -> Result<(), BoxError> { + info!("Starting up."); + + info!("Creating JSON-RPC I/O handler."); + let mut io = IoHandler::new(); + + io.add_method("ping", |_| Ok(Value::String("success".to_string()))); + + io.add_method("register_domain", move |params: Params| { + let d: Result = params.parse(); + match d { + Ok(d) => match generate_zone(&d.domain) { + Ok(_) => Ok(Value::String("success".to_string())), + Err(e) => Err(Error::from(e)), + }, + Err(e) => Err(Error::from(PeachDynDnsError::MissingParams { e })), + } + }); + + let http_server = + env::var("PEACH_DYNDNS_SERVER").unwrap_or_else(|_| "127.0.0.1:3001".to_string()); + + info!("Starting JSON-RPC server on {}.", http_server); + let server = ServerBuilder::new(io) + .cors(DomainsValidation::AllowOnly(vec![ + AccessControlAllowOrigin::Null, + ])) + .start_http( + &http_server + .parse() + .expect("Invalid HTTP address and port combination"), + ) + .expect("Unable to start RPC server"); + + server.wait(); + + Ok(()) +} + + + +// +//#[get("/")] +//pub fn index() -> &'static str { +// "This is the peach-dyndns server." +//} +// +//#[derive(Serialize)] +//pub struct JsonResponse { +// pub status: String, +// #[serde(skip_serializing_if = "Option::is_none")] +// pub data: Option, +// #[serde(skip_serializing_if = "Option::is_none")] +// pub msg: Option, +//} +// +//// helper function to build a JsonResponse object +//pub fn build_json_response( +// status: String, +// data: Option, +// msg: Option, +//) -> JsonResponse { +// JsonResponse { status, data, msg } +//} +// +//#[derive(Deserialize, Debug)] +//pub struct RegisterDomainPost { +// domain: String, +//} +// +//#[post("/domain/register", data = "")] +//pub async fn register_domain(data: Json) -> Json { +// info!("++ post request to register new domain: {:?}", data); +// // TODO: grab/create a mutex, so that only one rocket thread is calling register_domain at a time +// // check if its a valid domain +// if !validate_domain(&data.domain) { +// let status = "error".to_string(); +// let msg = "domain is not in a valid format".to_string(); +// Json(build_json_response(status, None, Some(msg))) +// } else { +// // check if the domain is available +// let is_domain_available = check_domain_available(&data.domain); +// if !is_domain_available { +// let status = "error".to_string(); +// let msg = "can't register a domain that is already registered".to_string(); +// Json(build_json_response(status, None, Some(msg))) +// } else { +// // generate configs for the zone +// let result = generate_zone(&data.domain); +// match result { +// Ok(key_file_text) => { +// let status = "success".to_string(); +// let msg = key_file_text.to_string(); +// Json(build_json_response(status, None, Some(msg))) +// } +// Err(_err) => { +// let status = "error".to_string(); +// let msg = "there was an error creating the zone file".to_string(); +// Json(build_json_response(status, None, Some(msg))) +// } +// } +// } +// } +//} +// +//#[derive(Deserialize, Debug)] +//pub struct CheckAvailableDomainPost { +// domain: String, +//} +// +//// route which returns a msg of "true" if the domain is available and "false" if it is already taken +//#[post("/domain/check-available", data = "")] +//pub async fn check_available(data: Json) -> Json { +// info!("post request to check if domain is available {:?}", data); +// if !validate_domain(&data.domain) { +// let status = "error".to_string(); +// let msg = "domain is not in a valid format".to_string(); +// Json(build_json_response(status, None, Some(msg))) +// } else { +// let status = "success".to_string(); +// let is_available = check_domain_available(&data.domain); +// let msg = is_available.to_string(); +// Json(build_json_response(status, None, Some(msg))) +// } +//} diff --git a/src/main.rs b/src/main.rs index 4b7750c..3cafd2f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,33 +1,14 @@ -#![feature(proc_macro_hygiene, decl_macro)] +use std::process; -#[macro_use] -extern crate rocket; +use log::error; -use crate::routes::{index, register_domain, check_available}; -use rocket::figment::{Figment, providers::{Format, Toml, Env}}; +fn main() { + // initalize the logger + env_logger::init(); -mod cli; -mod routes; -mod errors; -mod constants; -mod generate_zone; - -#[tokio::main] -async fn main() { - let _args = cli::args().expect("error parsing args"); - - // the following config says to use all default rocket configs - // and then override them with any configs specified in Rocket.toml if found - // and then override with any configs specified as env variables prefixed with APP_ - let config = Figment::from(rocket::Config::default()) - .merge(Toml::file("Rocket.toml").nested()).merge(Env::prefixed("ROCKET_").global()); - - let rocket_result = rocket::custom(config) - .mount("/", routes![index, register_domain, check_available]) - .launch() - .await; - - if let Err(err) = rocket_result { - error!("++ error launching rocket server: {:?}", err); + // handle errors returned from `run` + if let Err(e) = peach_dyndns_server::run() { + error!("Application error: {}", e); + process::exit(1); } } diff --git a/src/routes.rs b/src/routes.rs deleted file mode 100644 index 8264dd3..0000000 --- a/src/routes.rs +++ /dev/null @@ -1,94 +0,0 @@ -/* -* LIST OF ROUTES -* /domain/register (add a new domain and get back the TSIG key for subsequent updating with nsupdate) -* /domain/check-available (check if given domain is available) -* /user/register sends an email verification to create a new account) NOT IMPLEMENTED -* /user/verify (for clicking the link in the email) NOT IMPLEMENTED -*/ -use crate::generate_zone::{check_domain_available, generate_zone, validate_domain}; -use rocket_contrib::json::{Json, JsonValue}; -use serde::{Deserialize, Serialize}; - -#[get("/")] -pub fn index() -> &'static str { - "This is the peach-dyndns server." -} - -#[derive(Serialize)] -pub struct JsonResponse { - pub status: String, - #[serde(skip_serializing_if = "Option::is_none")] - pub data: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub msg: Option, -} - -// helper function to build a JsonResponse object -pub fn build_json_response( - status: String, - data: Option, - msg: Option, -) -> JsonResponse { - JsonResponse { status, data, msg } -} - -#[derive(Deserialize, Debug)] -pub struct RegisterDomainPost { - domain: String, -} - -#[post("/domain/register", data = "")] -pub async fn register_domain(data: Json) -> Json { - info!("++ post request to register new domain: {:?}", data); - // TODO: grab/create a mutex, so that only one rocket thread is calling register_domain at a time - // check if its a valid domain - if !validate_domain(&data.domain) { - let status = "error".to_string(); - let msg = "domain is not in a valid format".to_string(); - Json(build_json_response(status, None, Some(msg))) - } else { - // check if the domain is available - let is_domain_available = check_domain_available(&data.domain); - if !is_domain_available { - let status = "error".to_string(); - let msg = "can't register a domain that is already registered".to_string(); - Json(build_json_response(status, None, Some(msg))) - } else { - // generate configs for the zone - let result = generate_zone(&data.domain); - match result { - Ok(key_file_text) => { - let status = "success".to_string(); - let msg = key_file_text.to_string(); - Json(build_json_response(status, None, Some(msg))) - } - Err(_err) => { - let status = "error".to_string(); - let msg = "there was an error creating the zone file".to_string(); - Json(build_json_response(status, None, Some(msg))) - } - } - } - } -} - -#[derive(Deserialize, Debug)] -pub struct CheckAvailableDomainPost { - domain: String, -} - -// route which returns a msg of "true" if the domain is available and "false" if it is already taken -#[post("/domain/check-available", data = "")] -pub async fn check_available(data: Json) -> Json { - info!("post request to check if domain is available {:?}", data); - if !validate_domain(&data.domain) { - let status = "error".to_string(); - let msg = "domain is not in a valid format".to_string(); - Json(build_json_response(status, None, Some(msg))) - } else { - let status = "success".to_string(); - let is_available = check_domain_available(&data.domain); - let msg = is_available.to_string(); - Json(build_json_response(status, None, Some(msg))) - } -}