diff --git a/README.md b/README.md new file mode 100644 index 0000000..c39f573 --- /dev/null +++ b/README.md @@ -0,0 +1,4 @@ +# mi + +A personal API. This is a port of [mi](https://tulpa.dev/cadey/mi) to Rust and +without elm-spa. diff --git a/backend/Cargo.lock b/backend/Cargo.lock index 2c1e1be..f9c461f 100644 --- a/backend/Cargo.lock +++ b/backend/Cargo.lock @@ -42,6 +42,61 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" +[[package]] +name = "aead" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cf01b9b56e767bb57b94ebf91a58b338002963785cdd7013e21c0d4679471e4" +dependencies = [ + "generic-array 0.12.3", +] + +[[package]] +name = "aes" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54eb1d8fe354e5fc611daf4f2ea97dd45a765f4f1e4512306ec183ae2e8f20c9" +dependencies = [ + "aes-soft", + "aesni", + "block-cipher-trait", +] + +[[package]] +name = "aes-gcm" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "834a6bda386024dbb7c8fc51322856c10ffe69559f972261c868485f5759c638" +dependencies = [ + "aead", + "aes", + "block-cipher-trait", + "ghash", + "subtle 2.3.0", + "zeroize", +] + +[[package]] +name = "aes-soft" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfd7e7ae3f9a1fb5c03b389fc6bb9a51400d0c13053f0dca698c832bfd893a0d" +dependencies = [ + "block-cipher-trait", + "byteorder", + "opaque-debug 0.2.3", +] + +[[package]] +name = "aesni" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f70a6b5f971e473091ab7cfb5ffac6cde81666c4556751d8d5620ead8abf100" +dependencies = [ + "block-cipher-trait", + "opaque-debug 0.2.3", +] + [[package]] name = "aho-corasick" version = "0.7.13" @@ -66,6 +121,15 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "ansi_term" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" +dependencies = [ + "winapi 0.3.9", +] + [[package]] name = "arrayvec" version = "0.5.1" @@ -109,6 +173,12 @@ dependencies = [ "rustc-demangle", ] +[[package]] +name = "base-x" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b20b618342cf9891c292c4f5ac2cde7287cc5c87e87e9c769d617793607dec1" + [[package]] name = "base64" version = "0.9.3" @@ -140,6 +210,12 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff" +[[package]] +name = "base64" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" + [[package]] name = "bitflags" version = "1.2.1" @@ -167,6 +243,15 @@ dependencies = [ "generic-array 0.14.4", ] +[[package]] +name = "block-cipher-trait" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c924d49bd09e7c06003acda26cd9742e796e34282ec6c1189404dee0c1f4774" +dependencies = [ + "generic-array 0.12.3", +] + [[package]] name = "block-padding" version = "0.1.5" @@ -176,16 +261,6 @@ dependencies = [ "byte-tools", ] -[[package]] -name = "buf_redux" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b953a6887648bb07a535631f2bc00fbdb2a2216f135552cb3f534ed136b9c07f" -dependencies = [ - "memchr", - "safemem", -] - [[package]] name = "bumpalo" version = "3.4.0" @@ -204,12 +279,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b92204551573580e078dc80017f36a213eb77a0450e4ddd8cfa0f3f2d1f0178f" -[[package]] -name = "bytecount" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0017894339f586ccb943b01b9555de56770c11cda818e7e3d8bd93f4ed7f46e" - [[package]] name = "byteorder" version = "1.3.4" @@ -267,9 +336,15 @@ dependencies = [ "num-integer", "num-traits", "serde", - "time", + "time 0.1.44", ] +[[package]] +name = "chunked_transfer" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7477065d45a8fe57167bf3cf8bcd3729b54cfcb81cca49bda2d038ea89ae82ca" + [[package]] name = "cloudabi" version = "0.0.3" @@ -309,39 +384,88 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a99aa4aa18448eef4c7d3f86d2720d2d8cad5c860fe9ff9b279293efdc8f5be" dependencies = [ - "ansi_term", + "ansi_term 0.11.0", "tracing-core", "tracing-error", ] +[[package]] +name = "const_fn" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce90df4c658c62f12d78f7508cf92f9173e5184a539c10bfe54a3107b3ffd0f2" + +[[package]] +name = "cookie" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5795cda0897252e34380a27baf884c53aa7ad9990329cdad96d4c5d027015d44" +dependencies = [ + "aes-gcm", + "base64 0.12.3", + "hkdf", + "hmac 0.7.1", + "percent-encoding 2.1.0", + "rand 0.7.3", + "sha2 0.8.2", + "time 0.1.44", +] + [[package]] name = "cookie" version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "888604f00b3db336d2af898ec3c1d5d0ddf5e6d462220f2ededc33a87ac4bbd5" dependencies = [ - "time", + "time 0.1.44", "url 1.7.2", ] +[[package]] +name = "cookie" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1373a16a4937bc34efec7b391f9c1500c30b8478a701a4f44c9165cc0475a6e0" +dependencies = [ + "percent-encoding 2.1.0", + "time 0.2.22", + "version_check 0.9.2", +] + [[package]] name = "cookie_store" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "46750b3f362965f197996c4448e4a0935e791bf7d6631bfce9ee0af3d24c919c" dependencies = [ - "cookie", + "cookie 0.12.0", "failure", "idna 0.1.5", - "log", + "log 0.4.11", "publicsuffix", "serde", "serde_json", - "time", + "time 0.1.44", "try_from", "url 1.7.2", ] +[[package]] +name = "cookie_store" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3818dfca4b0cb5211a659bbcbb94225b7127407b2b135e650d717bfb78ab10d3" +dependencies = [ + "cookie 0.14.2", + "idna 0.2.0", + "log 0.4.11", + "publicsuffix", + "serde", + "serde_json", + "time 0.2.22", + "url 2.1.1", +] + [[package]] name = "core-foundation" version = "0.7.0" @@ -421,6 +545,16 @@ dependencies = [ "lazy_static", ] +[[package]] +name = "crypto-mac" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4434400df11d95d556bac068ddfedd482915eb18fe8bea89bc80b6e4b1c179e5" +dependencies = [ + "generic-array 0.12.3", + "subtle 1.0.0", +] + [[package]] name = "crypto-mac" version = "0.8.0" @@ -428,7 +562,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" dependencies = [ "generic-array 0.14.4", - "subtle", + "subtle 2.3.0", ] [[package]] @@ -443,16 +577,48 @@ version = "0.99.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1dcfabdab475c16a93d669dddfc393027803e347d09663f524447f642fbb84ba" dependencies = [ - "proc-macro2", - "quote", - "syn", + "proc-macro2 1.0.21", + "quote 1.0.7", + "syn 1.0.40", +] + +[[package]] +name = "devise" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74e04ba2d03c5fa0d954c061fc8c9c288badadffc272ebb87679a89846de3ed3" +dependencies = [ + "devise_codegen", + "devise_core", +] + +[[package]] +name = "devise_codegen" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "066ceb7928ca93a9bedc6d0e612a8a0424048b0ab1f75971b203d01420c055d7" +dependencies = [ + "devise_core", + "quote 0.6.13", +] + +[[package]] +name = "devise_core" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf41c59b22b5e3ec0ea55c7847e5f358d340f3a8d6d53a5cf4f1564967f96487" +dependencies = [ + "bitflags", + "proc-macro2 0.4.30", + "quote 0.6.13", + "syn 0.15.44", ] [[package]] name = "dhall" -version = "0.6.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e29424c9ca9af75146949dac68301ff27ecc292a241f0af8ef4a5cc750f63512" +checksum = "a8e2aa2abb16c2ef064fbc45f5163be5c5ff990e8584e54fb1c8f6e318107289" dependencies = [ "abnf_to_pest", "annotate-snippets", @@ -464,11 +630,11 @@ dependencies = [ "pest", "pest_consume", "pest_generator", - "quote", + "quote 1.0.7", "reqwest 0.10.8", "serde", "serde_cbor", - "sha2", + "sha2 0.9.1", "url 2.1.1", "walkdir", ] @@ -480,9 +646,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bf6cff1e2ddd03851652e0cde982b01dc877c9fc9da9ba25ad4241a151945f09" dependencies = [ "itertools", - "proc-macro2", - "quote", - "syn", + "proc-macro2 1.0.21", + "quote 1.0.7", + "syn 1.0.40", ] [[package]] @@ -492,8 +658,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3e2de9deab977a153492a1468d1b1c0662c1cf39e5ea87d0c060ecd59ef18d8c" dependencies = [ "byteorder", + "chrono", "diesel_derives", "libsqlite3-sys", + "r2d2", + "uuid", ] [[package]] @@ -502,9 +671,9 @@ version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "45f5098f628d02a7a0f68ddba586fb61e80edec3bdc1be3b921f4ceec60858d3" dependencies = [ - "proc-macro2", - "quote", - "syn", + "proc-macro2 1.0.21", + "quote 1.0.7", + "syn 1.0.40", ] [[package]] @@ -525,6 +694,12 @@ dependencies = [ "generic-array 0.14.4", ] +[[package]] +name = "discard" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "212d0f5754cb6769937f4501cc0e67f4f4483c8d2c3e1e922ee9edbe4ab4c7c0" + [[package]] name = "doc-comment" version = "0.3.3" @@ -547,11 +722,11 @@ dependencies = [ "chrono", "derive_more", "futures 0.3.5", - "hmac", + "hmac 0.8.1", "hyper 0.13.7", "hyper-tls 0.4.3", "lazy_static", - "mime", + "mime 0.3.16", "native-tls", "percent-encoding 2.1.0", "rand 0.7.3", @@ -580,7 +755,7 @@ dependencies = [ "doc-comment", "hyper-old-types", "isolang", - "log", + "log 0.4.11", "reqwest 0.9.24", "serde", "serde_derive", @@ -590,10 +765,74 @@ dependencies = [ "skeptic", "tap-reader", "try_from", - "tungstenite 0.10.1", + "tungstenite", "url 1.7.2", ] +[[package]] +name = "encoding" +version = "0.2.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b0d943856b990d12d3b55b359144ff341533e516d94098b1d3fc1ac666d36ec" +dependencies = [ + "encoding-index-japanese", + "encoding-index-korean", + "encoding-index-simpchinese", + "encoding-index-singlebyte", + "encoding-index-tradchinese", +] + +[[package]] +name = "encoding-index-japanese" +version = "1.20141219.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04e8b2ff42e9a05335dbf8b5c6f7567e5591d0d916ccef4e0b1710d32a0d0c91" +dependencies = [ + "encoding_index_tests", +] + +[[package]] +name = "encoding-index-korean" +version = "1.20141219.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4dc33fb8e6bcba213fe2f14275f0963fd16f0a02c878e3095ecfdf5bee529d81" +dependencies = [ + "encoding_index_tests", +] + +[[package]] +name = "encoding-index-simpchinese" +version = "1.20141219.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d87a7194909b9118fc707194baa434a4e3b0fb6a5a757c73c3adb07aa25031f7" +dependencies = [ + "encoding_index_tests", +] + +[[package]] +name = "encoding-index-singlebyte" +version = "1.20141219.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3351d5acffb224af9ca265f435b859c7c01537c0849754d3db3fdf2bfe2ae84a" +dependencies = [ + "encoding_index_tests", +] + +[[package]] +name = "encoding-index-tradchinese" +version = "1.20141219.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd0e20d5688ce3cab59eb3ef3a2083a5c77bf496cb798dc6fcdb75f323890c18" +dependencies = [ + "encoding_index_tests", +] + +[[package]] +name = "encoding_index_tests" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a246d82be1c9d791c5dfde9a2bd045fc3cbba3fa2b11ad558f27d01712f00569" + [[package]] name = "encoding_rs" version = "0.8.24" @@ -603,19 +842,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "env_logger" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44533bbbb3bb3c1fa17d9f2e4e38bbbaf8396ba82193c4cb1b6445d711445d36" -dependencies = [ - "atty", - "humantime", - "log", - "regex", - "termcolor", -] - [[package]] name = "error-chain" version = "0.12.4" @@ -623,7 +849,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d2f06b9cac1506ece98fe3231e3cc9c4410ec3d5b1f24ae1c8946f0742cdefc" dependencies = [ "backtrace", - "version_check", + "version_check 0.9.2", ] [[package]] @@ -652,9 +878,9 @@ version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4" dependencies = [ - "proc-macro2", - "quote", - "syn", + "proc-macro2 1.0.21", + "quote 1.0.7", + "syn 1.0.40", "synstructure", ] @@ -664,6 +890,18 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" +[[package]] +name = "filetime" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed85775dcc68644b5c950ac06a2b23768d3bc9390464151aaf27136998dcf9e" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "winapi 0.3.9", +] + [[package]] name = "flate2" version = "1.0.17" @@ -697,6 +935,25 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" +[[package]] +name = "fsevent" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ab7d1bd1bd33cc98b0889831b72da23c0aa4df9cec7e0702f46ecea04b35db6" +dependencies = [ + "bitflags", + "fsevent-sys", +] + +[[package]] +name = "fsevent-sys" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f41b048a94555da0f42f1d632e2e19510084fb8e303b0daa2816e733fb3644a0" +dependencies = [ + "libc", +] + [[package]] name = "fuchsia-cprng" version = "0.1.1" @@ -790,9 +1047,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0b5a30a4328ab5473878237c447333c093297bded83a4983d10f4deea240d39" dependencies = [ "proc-macro-hack", - "proc-macro2", - "quote", - "syn", + "proc-macro2 1.0.21", + "quote 1.0.7", + "syn 1.0.40", ] [[package]] @@ -846,7 +1103,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "501466ecc8a30d1d3b7fc9229b122b2ce8ed6e9d9223f1138d4babb253e51817" dependencies = [ "typenum", - "version_check", + "version_check 0.9.2", ] [[package]] @@ -860,6 +1117,15 @@ dependencies = [ "wasi 0.9.0+wasi-snapshot-preview1", ] +[[package]] +name = "ghash" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f0930ed19a7184089ea46d2fedead2f6dc2b674c5db4276b7da336c7cd83252" +dependencies = [ + "polyval", +] + [[package]] name = "gimli" version = "0.22.0" @@ -872,6 +1138,12 @@ version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8be18de09a56b60ed0edf84bc9df007e30040691af7acd1c41874faac5895bfb" +[[package]] +name = "glob" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" + [[package]] name = "h2" version = "0.1.26" @@ -884,7 +1156,7 @@ dependencies = [ "futures 0.1.29", "http 0.1.21", "indexmap", - "log", + "log 0.4.11", "slab", "string", "tokio-io", @@ -921,31 +1193,6 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "00d63df3d41950fb462ed38308eea019113ad1508da725bbedcd0fa5a85ef5f7" -[[package]] -name = "headers" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed18eb2459bf1a09ad2d6b1547840c3e5e62882fa09b9a6a20b1de8e3228848f" -dependencies = [ - "base64 0.12.3", - "bitflags", - "bytes 0.5.6", - "headers-core", - "http 0.2.1", - "mime", - "sha-1 0.8.2", - "time", -] - -[[package]] -name = "headers-core" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7f66481bfee273957b1f20485a4ff3362987f85b2c236580d81b4eb7a326429" -dependencies = [ - "http 0.2.1", -] - [[package]] name = "hermit-abi" version = "0.1.15" @@ -961,13 +1208,33 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "644f9158b2f133fd50f5fb3242878846d9eb792e445c893805ff0e3824006e35" +[[package]] +name = "hkdf" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fa08a006102488bd9cd5b8013aabe84955cf5ae22e304c2caf655b633aefae3" +dependencies = [ + "digest 0.8.1", + "hmac 0.7.1", +] + +[[package]] +name = "hmac" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dcb5e64cda4c23119ab41ba960d1e170a774c8e4b9d9e6a9bc18aabf5e59695" +dependencies = [ + "crypto-mac 0.7.0", + "digest 0.8.1", +] + [[package]] name = "hmac" version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840" dependencies = [ - "crypto-mac", + "crypto-mac 0.8.0", "digest 0.9.0", ] @@ -1022,12 +1289,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cd179ae861f0c2e53da70d892f5f3029f9594be0c41dc5269cd371691b1dc2f9" [[package]] -name = "humantime" -version = "1.3.0" +name = "hyper" +version = "0.10.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f" +checksum = "0a0652d9a2609a968c14be1a9ea00bf4b1d64e2e1f53a1b51b6fff3a6e829273" dependencies = [ - "quick-error", + "base64 0.9.3", + "httparse", + "language-tags", + "log 0.3.9", + "mime 0.2.6", + "num_cpus", + "time 0.1.44", + "traitobject", + "typeable", + "unicase 1.4.2", + "url 1.7.2", ] [[package]] @@ -1045,10 +1322,10 @@ dependencies = [ "httparse", "iovec", "itoa", - "log", + "log 0.4.11", "net2", "rustc_version", - "time", + "time 0.1.44", "tokio 0.1.22", "tokio-buf", "tokio-executor", @@ -1077,7 +1354,7 @@ dependencies = [ "itoa", "pin-project", "socket2", - "time", + "time 0.1.44", "tokio 0.2.22", "tower-service", "tracing", @@ -1094,11 +1371,11 @@ dependencies = [ "bytes 0.4.12", "httparse", "language-tags", - "log", - "mime", + "log 0.4.11", + "mime 0.3.16", "percent-encoding 1.0.1", - "time", - "unicase", + "time 0.1.44", + "unicase 2.6.0", ] [[package]] @@ -1165,6 +1442,26 @@ dependencies = [ "hashbrown", ] +[[package]] +name = "inotify" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4816c66d2c8ae673df83366c18341538f234a26d65a9ecea5c348b453ac1d02f" +dependencies = [ + "bitflags", + "inotify-sys", + "libc", +] + +[[package]] +name = "inotify-sys" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e74a1aa87c59aeff6ef2cc2fa62d41bc43f54952f55652656b18a02fd5e356c0" +dependencies = [ + "libc", +] + [[package]] name = "input_buffer" version = "0.3.1" @@ -1269,6 +1566,12 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +[[package]] +name = "lazycell" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" + [[package]] name = "lexical-core" version = "0.7.4" @@ -1345,6 +1648,15 @@ dependencies = [ "scopeguard", ] +[[package]] +name = "log" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b" +dependencies = [ + "log 0.4.11", +] + [[package]] name = "log" version = "0.4.11" @@ -1360,6 +1672,15 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" +[[package]] +name = "matchers" +version = "0.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f099785f7595cc4b4553a174ce30dd7589ef93391ff414dbb67f62392b9e0ce1" +dependencies = [ + "regex-automata", +] + [[package]] name = "matches" version = "0.1.8" @@ -1372,12 +1693,6 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" -[[package]] -name = "md5" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771" - [[package]] name = "memchr" version = "2.3.3" @@ -1402,22 +1717,36 @@ dependencies = [ "diesel", "egg-mode", "elefren", - "hyper 0.13.7", "jsonfeed", "kankyo", - "log", - "mime", + "log 0.4.11", + "mime 0.3.16", "paseto", - "pretty_env_logger", "prometheus", "rand 0.7.3", - "ructe", + "ring", + "rocket", + "rocket_contrib", + "rocket_prometheus", "rusty_ulid", "serde", "serde_dhall", + "serde_json", "thiserror", - "tokio 0.2.22", - "warp", + "tracing", + "tracing-log", + "tracing-subscriber", + "ureq", + "uuid", +] + +[[package]] +name = "mime" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba626b8a6de5da682e1caa06bdb42a335aee5a84db8e5046a3e8ab17ba0a3ae0" +dependencies = [ + "log 0.3.9", ] [[package]] @@ -1432,8 +1761,8 @@ version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2684d4c2e97d99848d30b324b00c8fcc7e5c897b7cbb5819b09e7c90e8baf212" dependencies = [ - "mime", - "unicase", + "mime 0.3.16", + "unicase 2.6.0", ] [[package]] @@ -1457,13 +1786,25 @@ dependencies = [ "iovec", "kernel32-sys", "libc", - "log", + "log 0.4.11", "miow", "net2", "slab", "winapi 0.2.8", ] +[[package]] +name = "mio-extras" +version = "2.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52403fe290012ce777c4626790c8951324a2b9e3316b3143779c72b029742f19" +dependencies = [ + "lazycell", + "log 0.4.11", + "mio", + "slab", +] + [[package]] name = "miow" version = "0.2.1" @@ -1476,24 +1817,6 @@ dependencies = [ "ws2_32-sys", ] -[[package]] -name = "multipart" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8209c33c951f07387a8497841122fc6f712165e3f9bda3e6be4645b58188f676" -dependencies = [ - "buf_redux", - "httparse", - "log", - "mime", - "mime_guess", - "quick-error", - "rand 0.6.5", - "safemem", - "tempfile", - "twoway", -] - [[package]] name = "native-tls" version = "0.2.4" @@ -1502,7 +1825,7 @@ checksum = "2b0d88c06fe90d5ee94048ba40409ef1d9315d86f6f38c2efdaad4fb50c58b2d" dependencies = [ "lazy_static", "libc", - "log", + "log 0.4.11", "openssl", "openssl-probe", "openssl-sys", @@ -1531,7 +1854,25 @@ checksum = "ffb4262d26ed83a1c0a33a38fe2bb15797329c85770da05e6b828ddb782627af" dependencies = [ "lexical-core", "memchr", - "version_check", + "version_check 0.9.2", +] + +[[package]] +name = "notify" +version = "4.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80ae4a7688d1fab81c5bf19c64fc8db920be8d519ce6336ed4e7efe024724dbd" +dependencies = [ + "bitflags", + "filetime", + "fsevent", + "fsevent-sys", + "inotify", + "libc", + "mio", + "mio-extras", + "walkdir", + "winapi 0.3.9", ] [[package]] @@ -1694,6 +2035,28 @@ dependencies = [ "sodiumoxide", ] +[[package]] +name = "pear" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5320f212db967792b67cfe12bd469d08afd6318a249bd917d5c19bc92200ab8a" +dependencies = [ + "pear_codegen", +] + +[[package]] +name = "pear_codegen" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfc1c836fdc3d1ef87c348b237b5b5c4dff922156fb2d968f57734f9669768ca" +dependencies = [ + "proc-macro2 0.4.30", + "quote 0.6.13", + "syn 0.15.44", + "version_check 0.9.2", + "yansi", +] + [[package]] name = "percent-encoding" version = "1.0.1" @@ -1734,9 +2097,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4211c86227964037a5e04d55650bfd4392e7072539fa8cbc5f9ff47e77c22b4e" dependencies = [ "proc-macro-hack", - "proc-macro2", - "quote", - "syn", + "proc-macro2 1.0.21", + "quote 1.0.7", + "syn 1.0.40", ] [[package]] @@ -1757,9 +2120,9 @@ checksum = "99b8db626e31e5b81787b9783425769681b347011cc59471e33ea46d2ea0cf55" dependencies = [ "pest", "pest_meta", - "proc-macro2", - "quote", - "syn", + "proc-macro2 1.0.21", + "quote 1.0.7", + "syn 1.0.40", ] [[package]] @@ -1826,9 +2189,9 @@ version = "0.4.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2c0e815c3ee9a031fdf5af21c10aa17c573c9c6a566328d99e3936c34e36461f" dependencies = [ - "proc-macro2", - "quote", - "syn", + "proc-macro2 1.0.21", + "quote 1.0.7", + "syn 1.0.40", ] [[package]] @@ -1849,6 +2212,16 @@ version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d36492546b6af1463394d46f0c834346f31548646f6ba10849802c9c9a27ac33" +[[package]] +name = "polyval" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ec3341498978de3bfd12d1b22f1af1de22818f5473a11e8a6ef997989e3a212" +dependencies = [ + "cfg-if", + "universal-hash", +] + [[package]] name = "ppv-lite86" version = "0.2.9" @@ -1864,16 +2237,6 @@ dependencies = [ "typed-arena", ] -[[package]] -name = "pretty_env_logger" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "926d36b9553851b8b0005f1275891b392ee4d2d833852c417ed025477350fb9d" -dependencies = [ - "env_logger", - "log", -] - [[package]] name = "proc-macro-hack" version = "0.5.18" @@ -1886,13 +2249,22 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eba180dafb9038b050a4c280019bbedf9f2467b61e5d892dcad585bb57aadc5a" +[[package]] +name = "proc-macro2" +version = "0.4.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" +dependencies = [ + "unicode-xid 0.1.0", +] + [[package]] name = "proc-macro2" version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "36e28516df94f3dd551a587da5357459d9b36d945a7c37c3557928c1c2ff2a2c" dependencies = [ - "unicode-xid", + "unicode-xid 0.2.1", ] [[package]] @@ -1948,10 +2320,22 @@ dependencies = [ ] [[package]] -name = "quick-error" -version = "1.2.3" +name = "qstring" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" +checksum = "d464fae65fff2680baf48019211ce37aaec0c78e9264c84a3e484717f965104e" +dependencies = [ + "percent-encoding 2.1.0", +] + +[[package]] +name = "quote" +version = "0.6.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1" +dependencies = [ + "proc-macro2 0.4.30", +] [[package]] name = "quote" @@ -1959,7 +2343,18 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aa563d17ecb180e500da1cfd2b028310ac758de548efdd203e18f283af693f37" dependencies = [ - "proc-macro2", + "proc-macro2 1.0.21", +] + +[[package]] +name = "r2d2" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "545c5bc2b880973c9c10e4067418407a0ccaa3091781d1671d46eb35107cb26f" +dependencies = [ + "log 0.4.11", + "parking_lot 0.11.0", + "scheduled-thread-pool", ] [[package]] @@ -2149,6 +2544,16 @@ dependencies = [ "thread_local", ] +[[package]] +name = "regex-automata" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae1ded71d66a4a97f5e961fd0cb25a5f366a42a41570d16a763a69c092c26ae4" +dependencies = [ + "byteorder", + "regex-syntax", +] + [[package]] name = "regex-syntax" version = "0.6.18" @@ -2172,22 +2577,22 @@ checksum = "f88643aea3c1343c804950d7bf983bd2067f5ab59db6d613a08e05572f2714ab" dependencies = [ "base64 0.10.1", "bytes 0.4.12", - "cookie", - "cookie_store", + "cookie 0.12.0", + "cookie_store 0.7.0", "encoding_rs", "flate2", "futures 0.1.29", "http 0.1.21", "hyper 0.12.35", "hyper-tls 0.3.2", - "log", - "mime", + "log 0.4.11", + "mime 0.3.16", "mime_guess", "native-tls", "serde", "serde_json", "serde_urlencoded 0.5.5", - "time", + "time 0.1.44", "tokio 0.1.22", "tokio-executor", "tokio-io", @@ -2216,8 +2621,8 @@ dependencies = [ "ipnet", "js-sys", "lazy_static", - "log", - "mime", + "log 0.4.11", + "mime 0.3.16", "mime_guess", "native-tls", "percent-encoding 2.1.0", @@ -2255,17 +2660,96 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cabe4fa914dec5870285fa7f71f602645da47c486e68486d2b4ceb4a343e90ac" [[package]] -name = "ructe" -version = "0.12.0" +name = "rocket" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b8ffc645837eab09b6cbb6772d18897c6309753254592e149b40ff7fb113c01" +checksum = "6130967b369cfb8411b0b73e96fcba1229c32a9cc6f295d144f879bfced13c6e" dependencies = [ + "atty", "base64 0.12.3", - "bytecount 0.6.0", - "itertools", - "md5", - "mime", - "nom", + "log 0.4.11", + "memchr", + "num_cpus", + "pear", + "rocket_codegen", + "rocket_http", + "state", + "time 0.1.44", + "toml", + "version_check 0.9.2", + "yansi", +] + +[[package]] +name = "rocket_codegen" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb852e6da168fb948a8f2b798ba2e2f0e4fc860eae0efa9cf2bf0f5466bb0425" +dependencies = [ + "devise", + "glob 0.3.0", + "indexmap", + "quote 0.6.13", + "rocket_http", + "version_check 0.9.2", + "yansi", +] + +[[package]] +name = "rocket_contrib" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3946ca815127041d8f64455561031d058c22ae1b135251502c5ea523cf9e14b" +dependencies = [ + "diesel", + "log 0.4.11", + "notify", + "r2d2", + "rocket", + "rocket_contrib_codegen", + "serde", + "serde_json", + "time 0.1.44", + "uuid", +] + +[[package]] +name = "rocket_contrib_codegen" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbc1c93c930af81f5097b8fd3cbc245a8b47c906a45a30c167cb3df0cd7ac404" +dependencies = [ + "devise", + "quote 0.6.13", + "version_check 0.9.2", + "yansi", +] + +[[package]] +name = "rocket_http" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aff5a5480175f2f553a876b251e9350c74196128806d176da3a51c82aab5428" +dependencies = [ + "cookie 0.11.3", + "hyper 0.10.16", + "indexmap", + "pear", + "percent-encoding 1.0.1", + "smallvec 1.4.2", + "state", + "time 0.1.44", + "unicode-xid 0.1.0", +] + +[[package]] +name = "rocket_prometheus" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15b33edbbade4a2b478d6c42f81b7db48185e441d0050492906789f01300127" +dependencies = [ + "prometheus", + "rocket", ] [[package]] @@ -2283,6 +2767,19 @@ dependencies = [ "semver", ] +[[package]] +name = "rustls" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d1126dcf58e93cee7d098dbda643b5f92ed724f1f6a63007c1116eed6700c81" +dependencies = [ + "base64 0.12.3", + "log 0.4.11", + "ring", + "sct", + "webpki", +] + [[package]] name = "rusty_ulid" version = "0.10.0" @@ -2327,10 +2824,13 @@ dependencies = [ ] [[package]] -name = "scoped-tls" -version = "1.0.0" +name = "scheduled-thread-pool" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2" +checksum = "dc6f74fd1204073fa02d5d5d68bec8021be4c38690b61264b2fdb48083d0e7d7" +dependencies = [ + "parking_lot 0.11.0", +] [[package]] name = "scopeguard" @@ -2338,6 +2838,16 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +[[package]] +name = "sct" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3042af939fca8c3453b7af0f1c66e533a15a86169e39de2657310ade8f98d3c" +dependencies = [ + "ring", + "untrusted", +] + [[package]] name = "security-framework" version = "0.4.4" @@ -2403,16 +2913,16 @@ version = "1.0.116" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f630a6370fd8e457873b4bd2ffdae75408bc291ba72be773772a4c2a065d9ae8" dependencies = [ - "proc-macro2", - "quote", - "syn", + "proc-macro2 1.0.21", + "quote 1.0.7", + "syn 1.0.40", ] [[package]] name = "serde_dhall" -version = "0.6.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0deb73a9d07e983a229b52e9c6fa8cef6f80688462a66d31f3d9aa5d0aadf4b" +checksum = "313ac1225c35cd2760b4124d39fa4df19b4a5e29edd55a3eb3fc0b01940f8707" dependencies = [ "dhall", "dhall_proc_macros", @@ -2493,6 +3003,24 @@ dependencies = [ "opaque-debug 0.3.0", ] +[[package]] +name = "sha1" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d" + +[[package]] +name = "sha2" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a256f46ea78a0c0d9ff00077504903ac881a1dafdc20da66545699e7776b3e69" +dependencies = [ + "block-buffer 0.7.3", + "digest 0.8.1", + "fake-simd", + "opaque-debug 0.2.3", +] + [[package]] name = "sha2" version = "0.9.1" @@ -2527,10 +3055,10 @@ version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6fb8ed853fdc19ce09752d63f3a2e5b5158aeb261520cd75eb618bd60305165" dependencies = [ - "bytecount 0.4.0", + "bytecount", "cargo_metadata", "error-chain", - "glob", + "glob 0.2.11", "pulldown-cmark", "serde_json", "tempdir", @@ -2587,12 +3115,76 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" +[[package]] +name = "standback" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4e0831040d2cf2bdfd51b844be71885783d489898a192f254ae25d57cce725c" +dependencies = [ + "version_check 0.9.2", +] + +[[package]] +name = "state" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3015a7d0a5fd5105c91c3710d42f9ccf0abfb287d62206484dcc67f9569a6483" + [[package]] name = "static_assertions" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" +[[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" +dependencies = [ + "proc-macro2 1.0.21", + "quote 1.0.7", + "serde", + "serde_derive", + "syn 1.0.40", +] + +[[package]] +name = "stdweb-internal-macros" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58fa5ff6ad0d98d1ffa8cb115892b6e69d67799f6763e162a1c9db421dc22e11" +dependencies = [ + "base-x", + "proc-macro2 1.0.21", + "quote 1.0.7", + "serde", + "serde_derive", + "serde_json", + "sha1", + "syn 1.0.40", +] + +[[package]] +name = "stdweb-internal-runtime" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "213701ba3370744dcd1a12960caa4843b3d68b4d1c0a5d575e0d65b2ee9d16c0" + [[package]] name = "string" version = "0.2.1" @@ -2602,21 +3194,38 @@ dependencies = [ "bytes 0.4.12", ] +[[package]] +name = "subtle" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d67a5a62ba6e01cb2192ff309324cb4875d0c451d55fe2319433abe7a05a8ee" + [[package]] name = "subtle" version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "343f3f510c2915908f155e94f17220b19ccfacf2a64a2a5d8004f2c3e311e7fd" +[[package]] +name = "syn" +version = "0.15.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5" +dependencies = [ + "proc-macro2 0.4.30", + "quote 0.6.13", + "unicode-xid 0.1.0", +] + [[package]] name = "syn" version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "963f7d3cc59b59b9325165add223142bbf1df27655d07789f109896d353d8350" dependencies = [ - "proc-macro2", - "quote", - "unicode-xid", + "proc-macro2 1.0.21", + "quote 1.0.7", + "unicode-xid 0.2.1", ] [[package]] @@ -2625,10 +3234,10 @@ version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b834f2d66f734cb897113e34aaff2f1ab4719ca946f9a7358dba8f8064148701" dependencies = [ - "proc-macro2", - "quote", - "syn", - "unicode-xid", + "proc-macro2 1.0.21", + "quote 1.0.7", + "syn 1.0.40", + "unicode-xid 0.2.1", ] [[package]] @@ -2661,15 +3270,6 @@ dependencies = [ "winapi 0.3.9", ] -[[package]] -name = "termcolor" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb6bfa289a4d7c5766392812c0a1f4c1ba45afa1ad47803c11e1f407d846d75f" -dependencies = [ - "winapi-util", -] - [[package]] name = "thiserror" version = "1.0.20" @@ -2685,9 +3285,9 @@ version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd80fc12f73063ac132ac92aceea36734f04a1d93c1240c6944e23a3b8841793" dependencies = [ - "proc-macro2", - "quote", - "syn", + "proc-macro2 1.0.21", + "quote 1.0.7", + "syn 1.0.40", ] [[package]] @@ -2710,6 +3310,44 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "time" +version = "0.2.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55b7151c9065e80917fbf285d9a5d1432f60db41d170ccafc749a136b41a93af" +dependencies = [ + "const_fn", + "libc", + "standback", + "stdweb", + "time-macros", + "version_check 0.9.2", + "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.21", + "quote 1.0.7", + "standback", + "syn 1.0.40", +] + [[package]] name = "tinyvec" version = "0.3.4" @@ -2793,7 +3431,7 @@ checksum = "57fc868aae093479e3131e3d165c93b1c7474109d13c90ec0dda2a1bbfff0674" dependencies = [ "bytes 0.4.12", "futures 0.1.29", - "log", + "log 0.4.11", ] [[package]] @@ -2802,9 +3440,9 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0c3acc6aa564495a0f2e1d59fab677cd7f81a19994cfc7f3ad0e64301560389" dependencies = [ - "proc-macro2", - "quote", - "syn", + "proc-macro2 1.0.21", + "quote 1.0.7", + "syn 1.0.40", ] [[package]] @@ -2816,7 +3454,7 @@ dependencies = [ "crossbeam-utils", "futures 0.1.29", "lazy_static", - "log", + "log 0.4.11", "mio", "num_cpus", "parking_lot 0.9.0", @@ -2861,7 +3499,7 @@ dependencies = [ "crossbeam-utils", "futures 0.1.29", "lazy_static", - "log", + "log 0.4.11", "num_cpus", "slab", "tokio-executor", @@ -2889,19 +3527,6 @@ dependencies = [ "tokio 0.2.22", ] -[[package]] -name = "tokio-tungstenite" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d9e878ad426ca286e4dcae09cbd4e1973a7f8987d97570e2469703dd7f5720c" -dependencies = [ - "futures-util", - "log", - "pin-project", - "tokio 0.2.22", - "tungstenite 0.11.1", -] - [[package]] name = "tokio-util" version = "0.3.1" @@ -2911,11 +3536,20 @@ dependencies = [ "bytes 0.5.6", "futures-core", "futures-sink", - "log", + "log 0.4.11", "pin-project-lite", "tokio 0.2.22", ] +[[package]] +name = "toml" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "758664fc71a3a69038656bee8b6be6477d2a6c315a6b81f7081f591bffa4111f" +dependencies = [ + "serde", +] + [[package]] name = "tower-service" version = "0.3.0" @@ -2929,7 +3563,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d79ca061b032d6ce30c660fded31189ca0b9922bf483cd70759f13a2d86786c" dependencies = [ "cfg-if", - "log", + "log 0.4.11", "tracing-attributes", "tracing-core", ] @@ -2940,9 +3574,9 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "80e0ccfc3378da0cce270c946b676a376943f5cd16aeba64568e7939806f4ada" dependencies = [ - "proc-macro2", - "quote", - "syn", + "proc-macro2 1.0.21", + "quote 1.0.7", + "syn 1.0.40", ] [[package]] @@ -2965,13 +3599,24 @@ dependencies = [ ] [[package]] -name = "tracing-futures" -version = "0.2.4" +name = "tracing-log" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab7bb6f14721aa00656086e9335d363c5c8747bae02ebe32ea2c7dece5689b4c" +checksum = "5e0f8c7178e13481ff6765bd169b33e8d554c5d2bbede5e32c356194be02b9b9" dependencies = [ - "pin-project", - "tracing", + "lazy_static", + "log 0.4.11", + "tracing-core", +] + +[[package]] +name = "tracing-serde" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb65ea441fbb84f9f6748fd496cf7f63ec9af5bca94dd86456978d055e8eb28b" +dependencies = [ + "serde", + "tracing-core", ] [[package]] @@ -2980,11 +3625,27 @@ version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "82bb5079aa76438620837198db8a5c529fb9878c730bc2b28179b0241cf04c10" dependencies = [ + "ansi_term 0.12.1", + "chrono", + "lazy_static", + "matchers", + "regex", + "serde", + "serde_json", "sharded-slab", + "smallvec 1.4.2", "thread_local", "tracing-core", + "tracing-log", + "tracing-serde", ] +[[package]] +name = "traitobject" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efd1f82c56340fdf16f2a953d7bda4f8fdffba13d93b00844c25572110b26079" + [[package]] name = "try-lock" version = "0.2.3" @@ -3012,7 +3673,7 @@ dependencies = [ "http 0.2.1", "httparse", "input_buffer", - "log", + "log 0.4.11", "native-tls", "rand 0.7.3", "sha-1 0.8.2", @@ -3021,32 +3682,10 @@ dependencies = [ ] [[package]] -name = "tungstenite" -version = "0.11.1" +name = "typeable" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0308d80d86700c5878b9ef6321f020f29b1bb9d5ff3cab25e75e23f3a492a23" -dependencies = [ - "base64 0.12.3", - "byteorder", - "bytes 0.5.6", - "http 0.2.1", - "httparse", - "input_buffer", - "log", - "rand 0.7.3", - "sha-1 0.9.1", - "url 2.1.1", - "utf-8", -] - -[[package]] -name = "twoway" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59b11b2b5241ba34be09c3cc85a36e56e48f9888862e19cedf23336d35316ed1" -dependencies = [ - "memchr", -] +checksum = "1410f6f91f21d1612654e7cc69193b0334f909dcf2c790c4826254fbb86f8887" [[package]] name = "typed-arena" @@ -3066,13 +3705,22 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c" +[[package]] +name = "unicase" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4765f83163b74f957c797ad9253caf97f103fb064d3999aea9568d09fc8a33" +dependencies = [ + "version_check 0.1.5", +] + [[package]] name = "unicase" version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" dependencies = [ - "version_check", + "version_check 0.9.2", ] [[package]] @@ -3093,18 +3741,56 @@ dependencies = [ "tinyvec", ] +[[package]] +name = "unicode-xid" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" + [[package]] name = "unicode-xid" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564" +[[package]] +name = "universal-hash" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df0c900f2f9b4116803415878ff48b63da9edb268668e08cf9292d7503114a01" +dependencies = [ + "generic-array 0.12.3", + "subtle 2.3.0", +] + [[package]] name = "untrusted" version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" +[[package]] +name = "ureq" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed21e32e4e3ff89891022affaa7091c3a164d5049cb3872f1cf0fd6ccd9fc8f7" +dependencies = [ + "base64 0.13.0", + "chunked_transfer", + "cookie 0.14.2", + "cookie_store 0.12.0", + "encoding", + "log 0.4.11", + "once_cell", + "qstring", + "rustls", + "serde", + "serde_json", + "url 2.1.1", + "webpki", + "webpki-roots", +] + [[package]] name = "url" version = "1.7.2" @@ -3127,12 +3813,6 @@ dependencies = [ "percent-encoding 2.1.0", ] -[[package]] -name = "urlencoding" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9232eb53352b4442e40d7900465dfc534e8cb2dc8f18656fcb2ac16112b5593" - [[package]] name = "utf-8" version = "0.7.5" @@ -3146,6 +3826,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90dbc611eb48397705a6b0f6e917da23ae517e4d127123d2cf7674206627d32a" dependencies = [ "rand 0.6.5", + "serde", ] [[package]] @@ -3154,6 +3835,12 @@ version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6454029bf181f092ad1b853286f23e2c507d8e8194d01d92da4a55c274a5508c" +[[package]] +name = "version_check" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd" + [[package]] name = "version_check" version = "0.9.2" @@ -3178,7 +3865,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6395efa4784b027708f7451087e647ec73cc74f5d9bc2e418404248d679a230" dependencies = [ "futures 0.1.29", - "log", + "log 0.4.11", "try-lock", ] @@ -3188,38 +3875,10 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" dependencies = [ - "log", + "log 0.4.11", "try-lock", ] -[[package]] -name = "warp" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f41be6df54c97904af01aa23e613d4521eed7ab23537cede692d4058f6449407" -dependencies = [ - "bytes 0.5.6", - "futures 0.3.5", - "headers", - "http 0.2.1", - "hyper 0.13.7", - "log", - "mime", - "mime_guess", - "multipart", - "pin-project", - "scoped-tls", - "serde", - "serde_json", - "serde_urlencoded 0.6.1", - "tokio 0.2.22", - "tokio-tungstenite", - "tower-service", - "tracing", - "tracing-futures", - "urlencoding", -] - [[package]] name = "wasi" version = "0.9.0+wasi-snapshot-preview1" @@ -3252,10 +3911,10 @@ checksum = "f22b422e2a757c35a73774860af8e112bff612ce6cb604224e8e47641a9e4f68" dependencies = [ "bumpalo", "lazy_static", - "log", - "proc-macro2", - "quote", - "syn", + "log 0.4.11", + "proc-macro2 1.0.21", + "quote 1.0.7", + "syn 1.0.40", "wasm-bindgen-shared", ] @@ -3277,7 +3936,7 @@ version = "0.2.68" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6b13312a745c08c469f0b292dd2fcd6411dba5f7160f593da6ef69b64e407038" dependencies = [ - "quote", + "quote 1.0.7", "wasm-bindgen-macro-support", ] @@ -3287,9 +3946,9 @@ version = "0.2.68" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f249f06ef7ee334cc3b8ff031bfc11ec99d00f34d86da7498396dc1e3b1498fe" dependencies = [ - "proc-macro2", - "quote", - "syn", + "proc-macro2 1.0.21", + "quote 1.0.7", + "syn 1.0.40", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -3310,6 +3969,25 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "webpki" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab146130f5f790d45f82aeeb09e55a256573373ec64409fc19a6fb82fb1032ae" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "webpki-roots" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f20dea7535251981a9670857150d571846545088359b28e4951d350bdaf179f" +dependencies = [ + "webpki", +] + [[package]] name = "winapi" version = "0.2.8" @@ -3380,3 +4058,15 @@ dependencies = [ "winapi 0.2.8", "winapi-build", ] + +[[package]] +name = "yansi" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fc79f4a1e39857fc00c3f662cbf2651c771f00e9c15fe2abc341806bd46bd71" + +[[package]] +name = "zeroize" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f33972566adbd2d3588b0491eb94b98b43695c4ef897903470ede4f3f5a28a" diff --git a/backend/Cargo.toml b/backend/Cargo.toml index 8ee8e65..0730202 100644 --- a/backend/Cargo.toml +++ b/backend/Cargo.toml @@ -3,32 +3,42 @@ name = "mi" version = "1.0.0" authors = ["Christine Dodrill "] edition = "2018" -build = "src/build.rs" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -chrono = "0.4" -color-eyre = "0.5.2" -diesel = { version = "1.4.4", features = ["sqlite"] } -egg-mode = "0.15.0" +chrono = { version = "0.4", features = ["serde"] } +color-eyre = "0.5" +egg-mode = "0.15" elefren = "0.22" -hyper = "0.13" kankyo = "0.3" log = "0.4" mime = "0.3.0" -paseto = "1.0.7" -pretty_env_logger = "0" -prometheus = { version = "0.10", default-features = false, features = ["process"] } +paseto = { version = "1.0", features = ["easy_tokens", "v2"] } +ring = { version = "^0.16", features = ["std"] } rand = "0" -rusty_ulid = "0.10.0" -serde_dhall = "0.6.0" +rusty_ulid = "0.10" +serde_dhall = "0.8" +serde_json = "^1" serde = { version = "1", features = ["derive"] } thiserror = "1" -tokio = { version = "0.2", features = ["macros"] } -warp = "0.2" +rocket = "0.4" +tracing = "0.1" +tracing-log = "0.1" +tracing-subscriber = "0.2" +ureq = { version = "1", features = ["json", "charset"] } +uuid = { version = "0.7", features = ["serde", "v4"] } +rocket_prometheus = "0.7.0" +prometheus = { version = "0.10", default-features = false, features = ["process"] } jsonfeed = { git = "https://github.com/Xe/site" } -[build-dependencies] -ructe = { version = "0.12", features = ["warp02"] } +[dependencies.diesel] +version = "1" +features = ["sqlite", "r2d2", "uuidv07", "chrono"] + +[dependencies.rocket_contrib] +version = "0.4" +default-features = false +features = ["json", "diesel_sqlite_pool", "uuid", "helmet"] + diff --git a/backend/migrations/2020-09-13-154110_switches/up.sql b/backend/migrations/2020-09-13-154110_switches/up.sql index 205b77b..556def1 100644 --- a/backend/migrations/2020-09-13-154110_switches/up.sql +++ b/backend/migrations/2020-09-13-154110_switches/up.sql @@ -1,17 +1,17 @@ PRAGMA foreign_keys = ON; CREATE TABLE IF NOT EXISTS members - ( id INT UNIQUE NOT NULL PRIMARY KEY + ( id INTEGER UNIQUE NOT NULL PRIMARY KEY , cmene TEXT UNIQUE NOT NULL , picurl TEXT UNIQUE NOT NULL ); CREATE TABLE IF NOT EXISTS switches ( id TEXT UNIQUE NOT NULL PRIMARY KEY - , who TEXT NOT NULL - , started_at TEXT NOT NULL - , ended_at TEXT - , duration TEXT NOT NULL - , FOREIGN KEY (who) - REFERENCES members(cmene) + , member_id INTEGER NOT NULL + , started_at TIMESTAMP NOT NULL + , ended_at TIMESTAMP + , duration INTEGER NOT NULL + , FOREIGN KEY (member_id) + REFERENCES members(id) ); diff --git a/backend/migrations/2020-09-13-155542_system/up.sql b/backend/migrations/2020-09-13-155542_system/up.sql index b68d2ff..377b6e3 100644 --- a/backend/migrations/2020-09-13-155542_system/up.sql +++ b/backend/migrations/2020-09-13-155542_system/up.sql @@ -1,4 +1,3 @@ --- Your SQL goes here INSERT INTO members(id, cmene, picurl) VALUES @@ -8,3 +7,10 @@ VALUES (3, 'Ashe', 'https://mi.within.website/static/img/ashe.png'), (4, 'Sephie', 'https://mi.within.website/static/img/sephie.png'), (5, 'Mai', 'https://mi.within.website/static/img/mai.png'); + +-- testing values +INSERT INTO + switches(id, member_id, started_at, ended_at, duration) +VALUES + ( 'ropjar', 0, '2013-10-07 08:23:19.120', datetime('now'), 200), + ( 'flopnax', 5, datetime('now'), NULL, 0) diff --git a/backend/src/api.rs b/backend/src/api.rs new file mode 100644 index 0000000..0dff548 --- /dev/null +++ b/backend/src/api.rs @@ -0,0 +1,140 @@ +use crate::{models, schema, MainDatabase}; +use chrono::NaiveDateTime; +use diesel::prelude::*; +use rocket::{ + data::{self, FromDataSimple}, + http::{ContentType, Status}, + request::{self, FromRequest, Request}, + response::Responder, + Data, + Outcome::*, + Response, +}; +use rocket_contrib::json::Json; +use std::io::Read; + +#[get("/members")] +#[instrument(skip(conn), err)] +pub fn get_members(conn: MainDatabase) -> Result>> { + use schema::members; + let results = members::table + .load::(&*conn) + .map_err(Error::Database)?; + + Ok(Json(results)) +} + +#[derive(serde::Serialize)] +pub struct FrontChange { + pub id: String, + pub who: String, // models::Member.name + pub started_at: NaiveDateTime, + pub ended_at: Option, + pub duration: i32, +} + +#[get("/switches?&")] +#[instrument(skip(conn), err)] +pub fn get_switches( + conn: MainDatabase, + count: Option, + page: Option, +) -> Result>> { + use schema::{members, switches}; + + let count = count.unwrap_or(50); + let page = page.unwrap_or(0); + + let count = if count < 100 { count } else { 100 }; + + let result: Vec = switches::table + .inner_join(members::table) + .order_by(switches::dsl::started_at.desc()) + .limit(count) + .offset(count * (page - 1)) + .load::<(models::Switch, models::Member)>(&*conn) + .map_err(Error::Database)? + .into_iter() + .map(|front| FrontChange { + id: front.0.id, + who: front.1.cmene, + started_at: front.0.started_at, + ended_at: front.0.ended_at, + duration: front.0.duration, + }) + .collect(); + + match result.len() { + 0 => Err(Error::NotFound), + _ => Ok(Json(result)), + } +} + +#[get("/switches/current")] +#[instrument(skip(conn), err)] +pub fn get_current_front(conn: MainDatabase) -> Result> { + use schema::{members, switches}; + + let mut front: Vec<(models::Switch, models::Member)> = switches::table + .inner_join(members::table) + .order_by(switches::dsl::started_at.desc()) + .limit(1) + .load(&*conn) + .map_err(Error::Database)?; + + match front.pop() { + Some(front) => Ok(Json(FrontChange { + id: front.0.id, + who: front.1.cmene, + started_at: front.0.started_at, + ended_at: front.0.ended_at, + duration: front.0.duration, + })), + None => Err(Error::NotFound), + } +} + +#[post("/switches/switch", data = "")] +#[instrument(skip(conn), err)] +pub fn make_switch(conn: MainDatabase, who: StringBody) -> Result { + info!("got here"); + Ok(()) +} + +#[derive(Debug)] +pub struct StringBody(String); + +impl FromDataSimple for StringBody { + type Error = String; + + fn from_data(req: &Request, data: Data) -> data::Outcome { + let mut contents = String::new(); + + if let Err(e) = data.open().take(256).read_to_string(&mut contents) { + return Failure((Status::InternalServerError, format!("{:?}", e))); + } + + Success(StringBody(contents)) + } +} + +#[derive(thiserror::Error, Debug)] +pub enum Error { + #[error("internal database error: {0}")] + Database(#[from] diesel::result::Error), + + #[error("not found")] + NotFound, +} + +pub type Result = std::result::Result; + +impl<'a> Responder<'a> for Error { + fn respond_to(self, _: &Request) -> ::std::result::Result, Status> { + error!("{}", self); + match self { + Error::NotFound => Err(Status::NotFound), + _ => Err(Status::InternalServerError), + } + } +} diff --git a/backend/src/build.rs b/backend/src/build.rs deleted file mode 100644 index e7a9467..0000000 --- a/backend/src/build.rs +++ /dev/null @@ -1,12 +0,0 @@ -use ructe::{Result, Ructe}; -use std::process::Command; - -fn main() -> Result<()> { - Ructe::from_env()?.compile_templates("templates")?; - - let output = Command::new("git").args(&["rev-parse", "HEAD"]).output().unwrap(); - let git_hash = String::from_utf8(output.stdout).unwrap(); - println!("cargo:rustc-env=GITHUB_SHA={}", git_hash); - Ok(()) -} - diff --git a/backend/src/main.rs b/backend/src/main.rs index 9f832a8..bf6e3fa 100644 --- a/backend/src/main.rs +++ b/backend/src/main.rs @@ -1,62 +1,51 @@ +#![feature(proc_macro_hygiene, decl_macro)] + #[macro_use] extern crate diesel; +#[macro_use] +extern crate rocket; +#[macro_use] +extern crate rocket_contrib; +#[macro_use] +extern crate tracing; use color_eyre::eyre::Result; -use diesel::prelude::*; use diesel::sqlite::SqliteConnection; -use hyper::{header::CONTENT_TYPE, Body, Response}; -use prometheus::{Encoder, TextEncoder}; -use warp::Filter; +use rocket_contrib::helmet::SpaceHelmet; +use rocket_prometheus::PrometheusMetrics; const APPLICATION_NAME: &str = concat!(env!("CARGO_PKG_NAME"), "/", env!("CARGO_PKG_VERSION")); -include!(concat!(env!("OUT_DIR"), "/templates.rs")); +pub mod api; pub mod models; pub mod schema; -#[tokio::main] -async fn main() -> Result<()> { +#[database("main_data")] +pub struct MainDatabase(SqliteConnection); + +fn main() -> Result<()> { let _ = kankyo::init(); - pretty_env_logger::init(); color_eyre::install()?; + tracing_subscriber::fmt::init(); - log::info!( - "starting up {} commit {}", - APPLICATION_NAME, - env!("GITHUB_SHA") - ); + info!("{} starting up", APPLICATION_NAME); - let database_url = std::env::var("DATABASE_URL").expect("DATABASE_URL must be set"); - let connection = SqliteConnection::establish(&database_url) - .expect(&format!("Error connecting to {}", database_url)); - - let healthcheck = warp::get().and(warp::path(".within").and(warp::path("health")).map(|| "OK")); - let metrics_endpoint = warp::path("metrics").and(warp::path::end()).map(move || { - let encoder = TextEncoder::new(); - let metric_families = prometheus::gather(); - let mut buffer = vec![]; - encoder.encode(&metric_families, &mut buffer).unwrap(); - Response::builder() - .status(200) - .header(CONTENT_TYPE, encoder.format_type()) - .body(Body::from(buffer)) - .unwrap() - }); - - let site = healthcheck - .or(metrics_endpoint) - .map(|reply| warp::reply::with_header(reply, "X-Clacks-Overhead", "GNU Ashlynn")) - .with(warp::log(APPLICATION_NAME)); - - warp::serve(site).run(([0, 0, 0, 0], 5000)).await; + let prometheus = PrometheusMetrics::with_registry(prometheus::default_registry().clone()); + rocket::ignite() + .attach(prometheus.clone()) + .attach(MainDatabase::fairing()) + .attach(SpaceHelmet::default()) + .mount("/metrics", prometheus) + .mount( + "/api", + routes![ + api::get_members, + api::get_switches, + api::get_current_front, + api::make_switch + ], + ) + .launch(); Ok(()) } - -fn get_members(connection: &SqliteConnection) -> Result> { - use schema::members; - let results = members::table - .load::(connection)?; - - Ok(results) -} diff --git a/backend/src/models.rs b/backend/src/models.rs index 4b0f2e3..bc66bad 100644 --- a/backend/src/models.rs +++ b/backend/src/models.rs @@ -1,15 +1,22 @@ -#[derive(Queryable, Debug)] +use crate::schema::*; +use chrono::NaiveDateTime; +use serde::Serialize; + +#[derive(Queryable, Debug, Serialize)] pub struct Member { pub id: i32, + #[serde(rename = "name")] pub cmene: String, pub picurl: String, } -#[derive(Queryable)] +#[derive(Queryable, Associations)] +#[belongs_to(Member)] +#[table_name = "switches"] pub struct Switch { pub id: String, - pub who: String, - pub started_at: String, - pub ended_at: Option, - pub duration: String, + pub member_id: i32, + pub started_at: NaiveDateTime, + pub ended_at: Option, + pub duration: i32, } diff --git a/backend/src/schema.rs b/backend/src/schema.rs index 604ce77..8051b3d 100644 --- a/backend/src/schema.rs +++ b/backend/src/schema.rs @@ -9,14 +9,25 @@ table! { table! { switches (id) { id -> Text, - who -> Text, - started_at -> Text, - ended_at -> Nullable, - duration -> Text, + member_id -> Integer, + started_at -> Timestamp, + ended_at -> Nullable, + duration -> Integer, } } +table! { + webmentions (id) { + id -> Text, + source_url -> Text, + target_url -> Text, + } +} + +joinable!(switches -> members (member_id)); + allow_tables_to_appear_in_same_query!( members, switches, + webmentions, ); diff --git a/backend/templates/foo.rs.html b/backend/templates/foo.rs.html deleted file mode 100644 index bb21615..0000000 --- a/backend/templates/foo.rs.html +++ /dev/null @@ -1 +0,0 @@ -@() diff --git a/nix/rust.nix b/nix/rust.nix new file mode 100644 index 0000000..0ff25fa --- /dev/null +++ b/nix/rust.nix @@ -0,0 +1,10 @@ +{ sources ? import ./sources.nix }: + +let + pkgs = + import sources.nixpkgs { overlays = [ (import sources.nixpkgs-mozilla) ]; }; + channel = "nightly"; + date = "2020-10-25"; + targets = [ ]; + chan = pkgs.rustChannelOfTargets channel date targets; +in chan diff --git a/nix/sources.json b/nix/sources.json index 08cc5cf..24244cc 100644 --- a/nix/sources.json +++ b/nix/sources.json @@ -5,10 +5,10 @@ "homepage": "https://github.com/nmattia/niv", "owner": "nmattia", "repo": "niv", - "rev": "dd13098d01eaa6be68237e7e38f96782b0480755", - "sha256": "1cfjdbsn0219fjzam1k7nqzkz8fb1ypab50rhyj026qbklqq2kvq", + "rev": "20c899271f288d33114760bc298838575fc6c7f9", + "sha256": "07zswk6dhlydihl9g6skmy52grjvqpra8r98f2dmbgwzc1yhjhxq", "type": "tarball", - "url": "https://github.com/nmattia/niv/archive/dd13098d01eaa6be68237e7e38f96782b0480755.tar.gz", + "url": "https://github.com/nmattia/niv/archive/20c899271f288d33114760bc298838575fc6c7f9.tar.gz", "url_template": "https://github.com///archive/.tar.gz" }, "nixpkgs": { @@ -17,10 +17,10 @@ "homepage": "https://github.com/NixOS/nixpkgs", "owner": "NixOS", "repo": "nixpkgs-channels", - "rev": "51428e8d38271d14146211867984b8742d304ea4", - "sha256": "1pphvg9mrbq4vm73xrbdr7970gb389lp3xbnzgyv3gjri2zrkyl9", + "rev": "502845c3e31ef3de0e424f3fcb09217df2ce6df6", + "sha256": "0fcqpsy6y7dgn0y0wgpa56gsg0b0p8avlpjrd79fp4mp9bl18nda", "type": "tarball", - "url": "https://github.com/NixOS/nixpkgs-channels/archive/51428e8d38271d14146211867984b8742d304ea4.tar.gz", + "url": "https://github.com/NixOS/nixpkgs-channels/archive/502845c3e31ef3de0e424f3fcb09217df2ce6df6.tar.gz", "url_template": "https://github.com///archive/.tar.gz" }, "nixpkgs-mozilla": { @@ -29,10 +29,10 @@ "homepage": null, "owner": "mozilla", "repo": "nixpkgs-mozilla", - "rev": "efda5b357451dbb0431f983cca679ae3cd9b9829", - "sha256": "11wqrg86g3qva67vnk81ynvqyfj0zxk83cbrf0p9hsvxiwxs8469", + "rev": "8c007b60731c07dd7a052cce508de3bb1ae849b4", + "sha256": "1zybp62zz0h077zm2zmqs2wcg3whg6jqaah9hcl1gv4x8af4zhs6", "type": "tarball", - "url": "https://github.com/mozilla/nixpkgs-mozilla/archive/efda5b357451dbb0431f983cca679ae3cd9b9829.tar.gz", + "url": "https://github.com/mozilla/nixpkgs-mozilla/archive/8c007b60731c07dd7a052cce508de3bb1ae849b4.tar.gz", "url_template": "https://github.com///archive/.tar.gz" } } diff --git a/shell.nix b/shell.nix index 7246ab2..8d392ab 100644 --- a/shell.nix +++ b/shell.nix @@ -2,14 +2,11 @@ let sources = import ./nix/sources.nix; pkgs = import sources.nixpkgs { overlays = [ (import sources.nixpkgs-mozilla) ]; }; - ruststable = (pkgs.latest.rustChannels.stable.rust.override { - extensions = [ "rust-src" "rls-preview" "rust-analysis" "rustfmt-preview" ]; - }); - -in pkgs.mkShell { + rust = import ./nix/rust.nix { }; +in pkgs.mkShell rec { buildInputs = with pkgs; [ # rust - ruststable + rust pkgconfig openssl cmake @@ -17,6 +14,7 @@ in pkgs.mkShell { libgit2 diesel-cli sqlite + cargo-watch # elm elmPackages.elm @@ -29,5 +27,6 @@ in pkgs.mkShell { ]; DATABASE_URL = "./mi.db"; + ROCKET_DATABASES = ''{ main_data = { url = "${DATABASE_URL}" } }''; RUST_LOG = "info"; }