From e19af54cafdc1ab2ba3b2f882544529346937ce6 Mon Sep 17 00:00:00 2001 From: jude Date: Fri, 22 Jul 2022 23:30:45 +0100 Subject: [PATCH] Import todo lists. Export other data. --- Cargo.lock | 621 +++++++++--------- Cargo.toml | 2 +- postman/Cargo.toml | 2 - postman/src/sender.rs | 3 +- web/Cargo.toml | 2 +- web/src/consts.rs | 8 +- web/src/lib.rs | 5 + web/src/routes/dashboard/export.rs | 375 +++++++++++ web/src/routes/dashboard/mod.rs | 66 +- web/src/routes/login.rs | 1 - .../support/iemanager/edit_spreadsheet.png | Bin 0 -> 44931 bytes .../img/support/iemanager/format_text.png | Bin 0 -> 40862 bytes web/static/img/support/iemanager/import.png | Bin 0 -> 45543 bytes .../img/support/iemanager/select_export.png | Bin 0 -> 18444 bytes .../img/support/iemanager/sheets_settings.png | Bin 0 -> 20917 bytes web/static/js/main.js | 39 +- web/templates/dashboard.html.tera | 39 +- web/templates/errors/500.html.tera | 2 +- web/templates/privacy.html.tera | 4 +- web/templates/support/iemanager.html.tera | 70 +- web/templates/terms.html.tera | 13 +- 21 files changed, 899 insertions(+), 353 deletions(-) create mode 100644 web/src/routes/dashboard/export.rs create mode 100644 web/static/img/support/iemanager/edit_spreadsheet.png create mode 100644 web/static/img/support/iemanager/format_text.png create mode 100644 web/static/img/support/iemanager/import.png create mode 100644 web/static/img/support/iemanager/select_export.png create mode 100644 web/static/img/support/iemanager/sheets_settings.png diff --git a/Cargo.lock b/Cargo.lock index be44253..48d46f4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -49,7 +49,7 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" dependencies = [ - "getrandom 0.2.6", + "getrandom 0.2.7", "once_cell", "version_check", ] @@ -95,9 +95,9 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.53" +version = "0.1.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed6aa3524a2dfcf9fe180c51eae2b58738348d819517ceadf95789c51fff7600" +checksum = "96cf8829f67d2eab0b2dfa42c5d0ef737e0724e4a82b01b3e292456202b19716" dependencies = [ "proc-macro2", "quote", @@ -115,9 +115,9 @@ dependencies = [ "log", "pin-project-lite", "tokio", - "tokio-rustls 0.23.3", + "tokio-rustls 0.23.4", "tungstenite", - "webpki-roots 0.22.3", + "webpki-roots 0.22.4", ] [[package]] @@ -163,9 +163,9 @@ checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" [[package]] name = "base64ct" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dea908e7347a8c64e378c17e30ef880ad73e3b4498346b055c2c00ea342f3179" +checksum = "3bdca834647821e0b13d9539a8634eb62d3501b6b6c2cec1722786ee6671b851" [[package]] name = "bigdecimal" @@ -202,15 +202,6 @@ dependencies = [ "generic-array 0.12.4", ] -[[package]] -name = "block-buffer" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" -dependencies = [ - "generic-array 0.14.5", -] - [[package]] name = "block-buffer" version = "0.10.2" @@ -235,14 +226,17 @@ version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223" dependencies = [ + "lazy_static", "memchr", + "regex-automata", + "serde", ] [[package]] name = "bumpalo" -version = "3.9.1" +version = "3.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a45a46ab1f2412e53d3a0ade76ffad2025804294569aae387231a0cd6e0899" +checksum = "37ccbd214614c6783386c1af30caf03192f17891059cecc394b4fb119e363de3" [[package]] name = "byte-tools" @@ -290,7 +284,7 @@ dependencies = [ "num-integer", "num-traits", "serde", - "time 0.1.43", + "time 0.1.44", "winapi 0.3.9", ] @@ -351,12 +345,11 @@ dependencies = [ "aes-gcm", "base64", "hkdf", - "hmac", "percent-encoding", "rand 0.8.5", - "sha2 0.10.2", + "sha2", "subtle", - "time 0.3.9", + "time 0.3.11", "version_check", ] @@ -421,12 +414,12 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.8" +version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf124c720b7686e3c2663cf54062ab0f68a88af2fb6a030e87e30bf721fcb38" +checksum = "7d82ee10ce34d7bc12c2122495e7593a9c41347ecdd64185af4ecf72cb1a7f83" dependencies = [ "cfg-if 1.0.0", - "lazy_static", + "once_cell", ] [[package]] @@ -441,14 +434,36 @@ dependencies = [ [[package]] name = "crypto-common" -version = "0.1.3" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57952ca27b5e3606ff4dd79b0020231aaf9d6aa76dc05fd30137538c50bd3ce8" +checksum = "2ccfd8c0ee4cce11e45b3fd6f9d5e69e0cc62912aa6a0cb1bf4617b0eba5a12f" dependencies = [ "generic-array 0.14.5", "typenum", ] +[[package]] +name = "csv" +version = "1.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22813a6dc45b335f9bade10bf7271dc477e81113e89eb251a0bc2a8a81c536e1" +dependencies = [ + "bstr", + "csv-core", + "itoa 0.4.8", + "ryu", + "serde", +] + +[[package]] +name = "csv-core" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b2466559f260f48ad25fe6317b3c8dac77b5bdb5763ac7d9d6103530663bc90" +dependencies = [ + "memchr", +] + [[package]] name = "ctr" version = "0.8.0" @@ -495,13 +510,14 @@ dependencies = [ [[package]] name = "dashmap" -version = "5.2.0" +version = "5.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c8858831f7781322e539ea39e72449c46b059638250c14344fec8d0aa6e539c" +checksum = "3495912c9c1ccf2e18976439f4443f3fee0fd61f424ff99fde6a66b15ecb448f" dependencies = [ "cfg-if 1.0.0", - "num_cpus", - "parking_lot 0.12.0", + "hashbrown 0.12.2", + "lock_api", + "parking_lot_core 0.9.3", "serde", ] @@ -575,15 +591,6 @@ dependencies = [ "generic-array 0.12.4", ] -[[package]] -name = "digest" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" -dependencies = [ - "generic-array 0.14.5", -] - [[package]] name = "digest" version = "0.10.3" @@ -603,9 +610,9 @@ checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f" [[package]] name = "either" -version = "1.6.1" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" +checksum = "3f107b87b6afc2a64fd13cac55fe06d6c8859f12d4b14cbcdd2c67d0976781be" [[package]] name = "encoding_rs" @@ -666,25 +673,23 @@ dependencies = [ [[package]] name = "filetime" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0408e2626025178a6a7f7ffc05a25bc47103229f19c113755de7bf63816290c" +checksum = "e94a7bbaa59354bc20dd75b67f23e2797b4490e9d6928203fb105c79e448c86c" dependencies = [ "cfg-if 1.0.0", "libc", "redox_syscall", - "winapi 0.3.9", + "windows-sys", ] [[package]] name = "flate2" -version = "1.0.23" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b39522e96686d38f4bc984b9198e3a0613264abaebaff2c5c918bfa6b6da09af" +checksum = "f82b0f4c27ad9f8bfd1f3208d882da2b09c301bc1c828fd3a00d0216d2fbbff6" dependencies = [ - "cfg-if 1.0.0", "crc32fast", - "libc", "miniz_oxide", ] @@ -875,14 +880,14 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9be70c98951c83b8d2f8f60d7065fa6d5146873094452a1008da8c2f1e4205ad" +checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6" dependencies = [ "cfg-if 1.0.0", "js-sys", "libc", - "wasi 0.10.2+wasi-snapshot-preview1", + "wasi 0.11.0+wasi-snapshot-preview1", "wasm-bindgen", ] @@ -904,9 +909,9 @@ checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" [[package]] name = "globset" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10463d9ff00a2a068db14231982f5132edebad0d7660cd956a1c30292dbcbfbd" +checksum = "0a1e17342619edbc21a964c2afbeb6c820c6a2560032872f397bb97ea127bd0a" dependencies = [ "aho-corasick", "bstr", @@ -941,7 +946,7 @@ dependencies = [ "indexmap", "slab", "tokio", - "tokio-util 0.7.1", + "tokio-util 0.7.3", "tracing", ] @@ -954,13 +959,19 @@ dependencies = [ "ahash", ] +[[package]] +name = "hashbrown" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "607c8a29735385251a339424dd462993c0fed8fa09d378f259377df08c126022" + [[package]] name = "hashlink" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7249a3129cbc1ffccd74857f81464a323a152173cdb134e0fd81bc803b29facf" dependencies = [ - "hashbrown", + "hashbrown 0.11.2", ] [[package]] @@ -1007,20 +1018,20 @@ dependencies = [ [[package]] name = "http" -version = "0.2.6" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31f4c6746584866f0feabcc69893c5b51beef3831656a968ed7ae254cdc4fd03" +checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399" dependencies = [ "bytes", "fnv", - "itoa", + "itoa 1.0.2", ] [[package]] name = "http-body" -version = "0.4.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ff4f84919677303da5f147645dbea6b1881f368d03ac84e1dc09031ebd7b2c6" +checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" dependencies = [ "bytes", "http", @@ -1029,9 +1040,9 @@ dependencies = [ [[package]] name = "httparse" -version = "1.7.0" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6330e8a36bd8c859f3fa6d9382911fbb7147ec39807f63b923933a247240b9ba" +checksum = "496ce29bb5a52785b44e0f7ca2847ae0bb839c9bd28f69acac9b99d461c0c04c" [[package]] name = "httpdate" @@ -1053,9 +1064,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "0.14.18" +version = "0.14.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b26ae0a80afebe130861d90abf98e3814a4f28a4c6ffeb5ab8ebb2be311e0ef2" +checksum = "02c929dc5c39e335a03c405292728118860721b10190d98c2a0f0efd5baafbac" dependencies = [ "bytes", "futures-channel", @@ -1066,7 +1077,7 @@ dependencies = [ "http-body", "httparse", "httpdate", - "itoa", + "itoa 1.0.2", "pin-project-lite", "socket2", "tokio", @@ -1083,9 +1094,9 @@ checksum = "d87c48c02e0dc5e3b849a2041db3029fd066650f8f717c07bf8ed78ccb895cac" dependencies = [ "http", "hyper", - "rustls 0.20.4", + "rustls 0.20.6", "tokio", - "tokio-rustls 0.23.3", + "tokio-rustls 0.23.4", ] [[package]] @@ -1138,12 +1149,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "1.8.1" +version = "1.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f647032dfaa1f8b6dc29bd3edb7bbef4861b8b8007ebb118d6db284fd59f6ee" +checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e" dependencies = [ "autocfg", - "hashbrown", + "hashbrown 0.12.2", "serde", ] @@ -1208,15 +1219,21 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.1" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35" +checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" + +[[package]] +name = "itoa" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d" [[package]] name = "js-sys" -version = "0.3.57" +version = "0.3.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "671a26f820db17c2a2750743f1dd03bafd15b98c9f30c7c2628c024c05d73397" +checksum = "c3fac17f7123a73ca62df411b1bf727ccc805daa070338fda671c86dac1bdc27" dependencies = [ "wasm-bindgen", ] @@ -1254,9 +1271,9 @@ checksum = "db13adb97ab515a3691f56e4dbab09283d0b86cb45abd991d8634a9d6f501760" [[package]] name = "libc" -version = "0.2.124" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21a41fed9d98f27ab1c6d161da622a4fa35e8a54a8adc24bbf3ddd0ef70b0e50" +checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836" [[package]] name = "libm" @@ -1276,18 +1293,18 @@ dependencies = [ [[package]] name = "log" -version = "0.4.16" +version = "0.4.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6389c490849ff5bc16be905ae24bc913a9c8892e19b2341dbc175e14c341c2b8" +checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" dependencies = [ "cfg-if 1.0.0", ] [[package]] name = "loom" -version = "0.5.4" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edc5c7d328e32cc4954e8e01193d7f0ef5ab257b5090b70a964e099a36034309" +checksum = "ff50ecb28bb86013e935fb6683ab1f6d3a20016f123c76fd4c27470076ac30f5" dependencies = [ "cfg-if 1.0.0", "generator", @@ -1321,9 +1338,9 @@ checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" [[package]] name = "memchr" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" [[package]] name = "mime" @@ -1349,9 +1366,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.5.1" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2b29bd4bc3f33391105ebee3589c19197c4271e3e5a9ec9bfe8127eeff8f082" +checksum = "6f5c75688da582b8ffc1f1799e9db273f32133c49e048f614d22ec3256773ccc" dependencies = [ "adler", ] @@ -1369,7 +1386,7 @@ dependencies = [ "kernel32-sys", "libc", "log", - "miow 0.2.2", + "miow", "net2", "slab", "winapi 0.2.8", @@ -1377,16 +1394,14 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.2" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52da4364ffb0e4fe33a9841a98a3f3014fb964045ce4f7a45a398243c8d6b0c9" +checksum = "57ee1c23c7c63b0c9250c339ffdc69255f110b298b901b9f6c82547b7b87caaf" dependencies = [ "libc", "log", - "miow 0.3.7", - "ntapi", "wasi 0.11.0+wasi-snapshot-preview1", - "winapi 0.3.9", + "windows-sys", ] [[package]] @@ -1413,15 +1428,6 @@ 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 = "multer" version = "2.0.2" @@ -1438,7 +1444,7 @@ dependencies = [ "mime", "spin 0.9.3", "tokio", - "tokio-util 0.6.9", + "tokio-util 0.6.10", "version_check", ] @@ -1508,15 +1514,6 @@ dependencies = [ "winapi 0.3.9", ] -[[package]] -name = "ntapi" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28774a7fd2fbb4f0babd8237ce554b73af68021b5f695a3cebd6c59bac0980f" -dependencies = [ - "winapi 0.3.9", -] - [[package]] name = "num-bigint" version = "0.3.3" @@ -1547,9 +1544,9 @@ dependencies = [ [[package]] name = "num-integer" -version = "0.1.44" +version = "0.1.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" dependencies = [ "autocfg", "num-traits", @@ -1557,9 +1554,9 @@ dependencies = [ [[package]] name = "num-iter" -version = "0.1.42" +version = "0.1.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2021c8337a54d21aca0d59a92577a029af9431cb59b909b03252b9c164fad59" +checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" dependencies = [ "autocfg", "num-integer", @@ -1568,9 +1565,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" dependencies = [ "autocfg", "libm", @@ -1588,38 +1585,38 @@ dependencies = [ [[package]] name = "num_threads" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aba1801fb138d8e85e11d0fc70baf4fe1cdfffda7c6cd34a854905df588e5ed0" +checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44" dependencies = [ "libc", ] [[package]] name = "oauth2" -version = "4.1.0" +version = "4.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80e47cfc4c0a1a519d9a025ebfbac3a2439d1b5cdf397d72dcb79b11d9920dab" +checksum = "6d62c436394991641b970a92e23e8eeb4eb9bca74af4f5badc53bcd568daadbd" dependencies = [ "base64", "chrono", - "getrandom 0.2.6", + "getrandom 0.2.7", "http", "rand 0.8.5", "reqwest", "serde", "serde_json", "serde_path_to_error", - "sha2 0.9.9", + "sha2", "thiserror", "url", ] [[package]] name = "once_cell" -version = "1.10.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f3e037eac156d1775da914196f0f37741a274155e34a0b7e427c35d2a2ecb9" +checksum = "18a6dbe30758c9f83eb00cbea4ac95966305f5a7772f3f42ebfc7fc7eddbd8e1" [[package]] name = "opaque-debug" @@ -1635,18 +1632,30 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] name = "openssl" -version = "0.10.38" +version = "0.10.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c7ae222234c30df141154f159066c5093ff73b63204dcda7121eb082fc56a95" +checksum = "618febf65336490dfcf20b73f885f5651a0c89c64c2d4a8c3662585a70bf5bd0" dependencies = [ "bitflags", "cfg-if 1.0.0", "foreign-types", "libc", "once_cell", + "openssl-macros", "openssl-sys", ] +[[package]] +name = "openssl-macros" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "openssl-probe" version = "0.1.5" @@ -1655,9 +1664,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.72" +version = "0.9.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e46109c383602735fa0a2e48dd2b7c892b048e1bf69e5c3b1d804b7d9c203cb" +checksum = "e5f9bd0c2710541a3cda73d6f9ac4f1b240de4ae261065d309dbe73d9dceb42f" dependencies = [ "autocfg", "cc", @@ -1688,12 +1697,12 @@ dependencies = [ [[package]] name = "parking_lot" -version = "0.12.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f5ec2493a61ac0506c0f4199f99070cbe83857b0337006a30f3e6719b8ef58" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" dependencies = [ "lock_api", - "parking_lot_core 0.9.2", + "parking_lot_core 0.9.3", ] [[package]] @@ -1712,9 +1721,9 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.2" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "995f667a6c822200b0433ac218e05582f0e2efa1b922a3fd2fbaadc5f87bab37" +checksum = "09a279cbf25cb0757810394fbc1e359949b59e348145c643a939a525692e6929" dependencies = [ "cfg-if 1.0.0", "libc", @@ -1860,9 +1869,9 @@ dependencies = [ [[package]] name = "pin-project-lite" -version = "0.2.8" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e280fbe77cc62c91527259e9442153f4688736748d24660126286329742b4c6c" +checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" [[package]] name = "pin-utils" @@ -1900,9 +1909,9 @@ checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae" [[package]] name = "poise" -version = "0.2.0" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c2eb79ba8241eb65b549e778e22a242ea30f5829f7487f10d8d95cfff9a4729" +checksum = "8af8ef2efaa133d674482f40665db3424cb2c5660a2707918c869603c843b7ad" dependencies = [ "async-trait", "derivative", @@ -1918,9 +1927,9 @@ dependencies = [ [[package]] name = "poise_macros" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15b786b4bdc58345204469420c306d8c638e465b4b1ecad7e27bf9c8a45096cf" +checksum = "94d99712c7e3cef666f344ccf5c5c729939331096d16c35eba3275028191a1af" dependencies = [ "darling", "proc-macro2", @@ -1946,13 +1955,11 @@ version = "0.1.0" dependencies = [ "chrono", "chrono-tz 0.5.3", - "env_logger", "lazy_static", "log", "num-integer", "regex", "serde", - "serde_json", "serenity", "sqlx", "tokio", @@ -1966,11 +1973,11 @@ checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" [[package]] name = "proc-macro2" -version = "1.0.37" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec757218438d5fda206afc041538b2f6d889286160d649a86a24d37e1235afd1" +checksum = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7" dependencies = [ - "unicode-xid", + "unicode-ident", ] [[package]] @@ -1988,9 +1995,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.18" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1feb54ed693b93a84e14094943b84b7c4eae204c512b7ccb95ab0c66d278ad1" +checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804" dependencies = [ "proc-macro2", ] @@ -2054,7 +2061,7 @@ version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" dependencies = [ - "getrandom 0.2.6", + "getrandom 0.2.7", ] [[package]] @@ -2077,18 +2084,18 @@ dependencies = [ [[package]] name = "ref-cast" -version = "1.0.6" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "300f2a835d808734ee295d45007adacb9ebb29dd3ae2424acfa17930cae541da" +checksum = "685d58625b6c2b83e4cc88a27c4bf65adb7b6b16dbdc413e515c9405b47432ab" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.6" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c38e3aecd2b21cb3959637b883bb3714bc7e43f0268b9a29d3743ee3e55cdd2" +checksum = "a043824e29c94169374ac5183ac0ed43f5724dc4556b19568007486bd840fa1f" dependencies = [ "proc-macro2", "quote", @@ -2097,9 +2104,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.5.5" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a11647b6b25ff05a515cb92c365cec08801e83423a235b51e231e1808747286" +checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b" dependencies = [ "aho-corasick", "memchr", @@ -2117,9 +2124,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.6.25" +version = "0.6.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" +checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244" [[package]] name = "reminder_rs" @@ -2155,6 +2162,7 @@ dependencies = [ "base64", "chrono", "chrono-tz 0.5.3", + "csv", "lazy_static", "log", "oauth2", @@ -2163,7 +2171,6 @@ dependencies = [ "rocket", "rocket_dyn_templates", "serde", - "serde_json", "serenity", "sqlx", ] @@ -2179,9 +2186,9 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.11.10" +version = "0.11.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46a1f7aa4f35e5e8b4160449f51afc758f0ce6454315a9fa7d0d113e958c41eb" +checksum = "b75aa69a3f06bbcc66ede33af2af253c6f7a86b1ca0033f60c580a27074fbf92" dependencies = [ "base64", "bytes", @@ -2203,20 +2210,21 @@ dependencies = [ "native-tls", "percent-encoding", "pin-project-lite", - "rustls 0.20.4", + "rustls 0.20.6", "rustls-pemfile", "serde", "serde_json", "serde_urlencoded", "tokio", "tokio-native-tls", - "tokio-rustls 0.23.3", - "tokio-util 0.6.9", + "tokio-rustls 0.23.4", + "tokio-util 0.7.3", + "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "webpki-roots 0.22.3", + "webpki-roots 0.22.4", "winreg", ] @@ -2259,8 +2267,8 @@ dependencies = [ [[package]] name = "rocket" -version = "0.5.0-rc.1" -source = "git+https://github.com/SergioBenitez/Rocket?branch=master#49d138de14074d40fb9223467434a5626782f51a" +version = "0.5.0-rc.2" +source = "git+https://github.com/SergioBenitez/Rocket?branch=master#7275df9fdfab84c493c0fe4cc3f16e66018f2f14" dependencies = [ "async-stream", "async-trait", @@ -2276,7 +2284,7 @@ dependencies = [ "memchr", "multer", "num_cpus", - "parking_lot 0.12.0", + "parking_lot 0.12.1", "pin-project-lite", "rand 0.8.5", "ref-cast", @@ -2286,10 +2294,10 @@ dependencies = [ "serde_json", "state", "tempfile", - "time 0.3.9", + "time 0.3.11", "tokio", "tokio-stream", - "tokio-util 0.7.1", + "tokio-util 0.7.3", "ubyte", "version_check", "yansi", @@ -2297,8 +2305,8 @@ dependencies = [ [[package]] name = "rocket_codegen" -version = "0.5.0-rc.1" -source = "git+https://github.com/SergioBenitez/Rocket?branch=master#49d138de14074d40fb9223467434a5626782f51a" +version = "0.5.0-rc.2" +source = "git+https://github.com/SergioBenitez/Rocket?branch=master#7275df9fdfab84c493c0fe4cc3f16e66018f2f14" dependencies = [ "devise", "glob", @@ -2312,8 +2320,8 @@ dependencies = [ [[package]] name = "rocket_dyn_templates" -version = "0.1.0-rc.1" -source = "git+https://github.com/SergioBenitez/Rocket?branch=master#49d138de14074d40fb9223467434a5626782f51a" +version = "0.1.0-rc.2" +source = "git+https://github.com/SergioBenitez/Rocket?branch=master#7275df9fdfab84c493c0fe4cc3f16e66018f2f14" dependencies = [ "glob", "normpath", @@ -2324,11 +2332,12 @@ dependencies = [ [[package]] name = "rocket_http" -version = "0.5.0-rc.1" -source = "git+https://github.com/SergioBenitez/Rocket?branch=master#49d138de14074d40fb9223467434a5626782f51a" +version = "0.5.0-rc.2" +source = "git+https://github.com/SergioBenitez/Rocket?branch=master#7275df9fdfab84c493c0fe4cc3f16e66018f2f14" dependencies = [ "cookie", "either", + "futures", "http", "hyper", "indexmap", @@ -2338,15 +2347,15 @@ dependencies = [ "percent-encoding", "pin-project-lite", "ref-cast", - "rustls 0.20.4", + "rustls 0.20.6", "rustls-pemfile", "serde", "smallvec", "stable-pattern", "state", - "time 0.3.9", + "time 0.3.11", "tokio", - "tokio-rustls 0.23.3", + "tokio-rustls 0.23.4", "uncased", ] @@ -2385,9 +2394,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.20.4" +version = "0.20.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fbfeb8d0ddb84706bc597a5574ab8912817c52a397f819e5b614e2265206921" +checksum = "5aab8ee6c7097ed6057f43c187a62418d0c05a4bd5f18b3571db50ee0f9ce033" dependencies = [ "log", "ring", @@ -2397,24 +2406,24 @@ dependencies = [ [[package]] name = "rustls-pemfile" -version = "0.3.0" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ee86d63972a7c661d1536fefe8c3c8407321c3df668891286de28abcd087360" +checksum = "e7522c9de787ff061458fe9a829dc790a3f5b22dc571694fc5883f448b94d9a9" dependencies = [ "base64", ] [[package]] name = "rustversion" -version = "1.0.6" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2cc38e8fa666e2de3c4aba7edeb5ffc5246c1c2ed0e3d17e560aeeba736b23f" +checksum = "a0a5f7c728f5d284929a1cccb5bc19884422bfe6ef4d6c409da2c41838983fcf" [[package]] name = "ryu" -version = "1.0.9" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f" +checksum = "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695" [[package]] name = "same-file" @@ -2427,12 +2436,12 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.19" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f05ba609c234e60bee0d547fe94a4c7e9da733d1c962cf6e59efa4cd9c8bc75" +checksum = "88d6731146462ea25d9244b2ed5fd1d716d25c52e4d54aa4fb0f3c4e9854dbe2" dependencies = [ "lazy_static", - "winapi 0.3.9", + "windows-sys", ] [[package]] @@ -2492,9 +2501,9 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.136" +version = "1.0.139" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789" +checksum = "0171ebb889e45aa68b44aee0859b3eede84c6f5f5c228e6f140c0b2a0a46cad6" dependencies = [ "serde_derive", ] @@ -2511,9 +2520,9 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.136" +version = "1.0.139" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08597e7152fcd306f41838ed3e37be9eaeed2b61c42e2117266a554fab4662f9" +checksum = "dc1d3230c1de7932af58ad8ffbe1d784bd55efd5a9d84ac24f69c72d83543dfb" dependencies = [ "proc-macro2", "quote", @@ -2522,11 +2531,11 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.79" +version = "1.0.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e8d9fa5c3b304765ce1fd9c4c8a3de2c8db365a5b91be52f186efc675681d95" +checksum = "82c2c1fdcd807d1098552c5b9a36e425e42e9fbd7c6a37a8425f390f781f7fa7" dependencies = [ - "itoa", + "itoa 1.0.2", "ryu", "serde", ] @@ -2542,9 +2551,9 @@ dependencies = [ [[package]] name = "serde_repr" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98d0516900518c29efa217c298fa1f4e6c6ffc85ae29fd7f4ee48f176e1a9ed5" +checksum = "a2ad84e47328a31223de7fed7a4f5087f2d6ddfe586cf3ca25b7a165bc0a5aed" dependencies = [ "proc-macro2", "quote", @@ -2558,7 +2567,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" dependencies = [ "form_urlencoded", - "itoa", + "itoa 1.0.2", "ryu", "serde", ] @@ -2581,13 +2590,13 @@ dependencies = [ "futures", "mime", "mime_guess", - "parking_lot 0.12.0", + "parking_lot 0.12.1", "percent-encoding", "reqwest", "serde", "serde-value", "serde_json", - "time 0.3.9", + "time 0.3.11", "tokio", "tracing", "typemap_rev", @@ -2617,19 +2626,6 @@ dependencies = [ "digest 0.10.3", ] -[[package]] -name = "sha2" -version = "0.9.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" -dependencies = [ - "block-buffer 0.9.0", - "cfg-if 1.0.0", - "cpufeatures", - "digest 0.9.0", - "opaque-debug 0.3.0", -] - [[package]] name = "sha2" version = "0.10.2" @@ -2682,9 +2678,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.8.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83" +checksum = "2fd0db749597d91ff862fd1d55ea87f7855a744a8425a64695b6fca237d1dad1" [[package]] name = "socket2" @@ -2765,7 +2761,7 @@ dependencies = [ "hashlink", "hex", "indexmap", - "itoa", + "itoa 1.0.2", "libc", "log", "memchr", @@ -2779,7 +2775,7 @@ dependencies = [ "serde", "serde_json", "sha-1 0.10.0", - "sha2 0.10.2", + "sha2", "smallvec", "sqlformat", "sqlx-rt", @@ -2804,7 +2800,7 @@ dependencies = [ "proc-macro2", "quote", "serde_json", - "sha2 0.10.2", + "sha2", "sqlx-core", "sqlx-rt", "syn", @@ -2833,9 +2829,9 @@ dependencies = [ [[package]] name = "state" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cf4f5369e6d3044b5e365c9690f451516ac8f0954084622b49ea3fde2f6de5" +checksum = "dbe866e1e51e8260c9eed836a042a5e7f6726bb2b411dffeaa712e19c388f23b" dependencies = [ "loom", ] @@ -2864,13 +2860,13 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" [[package]] name = "syn" -version = "1.0.91" +version = "1.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b683b2b825c8eef438b77c36a06dc262294da3d5a5813fac20da149241dcd44d" +checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd" dependencies = [ "proc-macro2", "quote", - "unicode-xid", + "unicode-ident", ] [[package]] @@ -2889,9 +2885,9 @@ dependencies = [ [[package]] name = "tera" -version = "1.15.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3cac831b615c25bcef632d1cabf864fa05813baad3d526829db18eb70e8b58d" +checksum = "7c9783d6ff395ae80cf17ed9a25360e7ba37742a79fa8fddabb073c5c7c8856d" dependencies = [ "chrono", "chrono-tz 0.6.1", @@ -2920,18 +2916,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.30" +version = "1.0.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "854babe52e4df1653706b98fcfc05843010039b406875930a70e4d9644e5c417" +checksum = "bd829fe32373d27f76265620b5309d0340cb8550f523c1dda251d6298069069a" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.30" +version = "1.0.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b" +checksum = "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a" dependencies = [ "proc-macro2", "quote", @@ -2949,21 +2945,22 @@ dependencies = [ [[package]] name = "time" -version = "0.1.43" +version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438" +checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" dependencies = [ "libc", + "wasi 0.10.0+wasi-snapshot-preview1", "winapi 0.3.9", ] [[package]] name = "time" -version = "0.3.9" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2702e08a7a860f005826c6815dcac101b19b5eb330c27fe4a5928fec1d20ddd" +checksum = "72c91f41dcb2f096c05f0873d667dceec1087ce5bcf984ec8ffb19acddbb3217" dependencies = [ - "itoa", + "itoa 1.0.2", "libc", "num_threads", "serde", @@ -2978,9 +2975,9 @@ checksum = "42657b1a6f4d817cda8e7a0ace261fe0cc946cf3a80314390b22cc61ae080792" [[package]] name = "tinyvec" -version = "1.5.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c1c1d5a42b6245520c249549ec267180beaffcc0615401ac8e31853d4b6d8d2" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" dependencies = [ "tinyvec_macros", ] @@ -2993,17 +2990,17 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] name = "tokio" -version = "1.17.0" +version = "1.19.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2af73ac49756f3f7c01172e34a23e5d0216f6c32333757c2c61feb2bbff5a5ee" +checksum = "c51a52ed6686dd62c320f9b89299e9dfb46f730c7a48e635c19f21d116cb1439" dependencies = [ "bytes", "libc", "memchr", - "mio 0.8.2", + "mio 0.8.4", "num_cpus", "once_cell", - "parking_lot 0.12.0", + "parking_lot 0.12.1", "pin-project-lite", "signal-hook-registry", "socket2", @@ -3013,9 +3010,9 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "1.7.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b557f72f448c511a979e2564e55d74e6c4432fc96ff4f6241bc6bded342643b7" +checksum = "9724f9a975fb987ef7a3cd9be0350edcbe130698af5b8f7a631e23d42d052484" dependencies = [ "proc-macro2", "quote", @@ -3045,20 +3042,20 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.23.3" +version = "0.23.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4151fda0cf2798550ad0b34bcfc9b9dcc2a9d2471c895c68f3a8818e54f2389e" +checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" dependencies = [ - "rustls 0.20.4", + "rustls 0.20.6", "tokio", "webpki 0.22.0", ] [[package]] name = "tokio-stream" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50145484efff8818b5ccd256697f36863f587da82cf8b409c53adf1e840798e3" +checksum = "df54d54117d6fdc4e4fea40fe1e4e566b3505700e148a6827e59b34b0d2600d9" dependencies = [ "futures-core", "pin-project-lite", @@ -3067,9 +3064,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.6.9" +version = "0.6.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e99e1983e5d376cd8eb4b66604d2e99e79f5bd988c3055891dcd8c9e2604cc0" +checksum = "36943ee01a6d67977dd3f84a5a1d2efeb4ada3a1ae771cadfaa535d9d9fc6507" dependencies = [ "bytes", "futures-core", @@ -3081,9 +3078,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.1" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0edfdeb067411dba2044da6d1cb2df793dd35add7888d73c16e3381ded401764" +checksum = "cc463cd8deddc3770d20f9852143d50bf6094e640b485cb2e189a2099085ff45" dependencies = [ "bytes", "futures-core", @@ -3104,15 +3101,15 @@ dependencies = [ [[package]] name = "tower-service" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" [[package]] name = "tracing" -version = "0.1.34" +version = "0.1.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d0ecdcb44a79f0fe9844f0c4f33a342cbcbb5117de8001e6ba0dc2351327d09" +checksum = "a400e31aa60b9d44a52a8ee0343b5b18566b03a8321e0d321f695cf56e940160" dependencies = [ "cfg-if 1.0.0", "log", @@ -3123,9 +3120,9 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.20" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e65ce065b4b5c53e73bb28912318cb8c9e9ad3921f1d669eb0e68b4c8143a2b" +checksum = "11c75893af559bc8e10716548bdef5cb2b983f8e637db9d0e15126b61b484ee2" dependencies = [ "proc-macro2", "quote", @@ -3134,19 +3131,19 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.26" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f54c8ca710e81886d498c2fd3331b56c93aa248d49de2222ad2742247c60072f" +checksum = "7b7358be39f2f274f322d2aaed611acc57f382e8eb1e5b48cb9ae30933495ce7" dependencies = [ - "lazy_static", + "once_cell", "valuable", ] [[package]] name = "tracing-log" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6923477a48e41c1951f1999ef8bb5a3023eb723ceadafe78ffb65dc366761e3" +checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" dependencies = [ "lazy_static", "log", @@ -3155,13 +3152,13 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.11" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bc28f93baff38037f64e6f43d34cfa1605f27a49c34e8a04c5e78b0babf2596" +checksum = "3a713421342a5a666b7577783721d3117f1b69a393df803ee17bb73b1e122a59" dependencies = [ "ansi_term", - "lazy_static", "matchers", + "once_cell", "regex", "sharded-slab", "smallvec", @@ -3190,7 +3187,7 @@ dependencies = [ "httparse", "log", "rand 0.8.5", - "rustls 0.20.4", + "rustls 0.20.6", "sha-1 0.10.0", "thiserror", "url", @@ -3212,24 +3209,24 @@ checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" [[package]] name = "ubyte" -version = "0.10.1" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42756bb9e708855de2f8a98195643dff31a97f0485d90d8467b39dc24be9e8fe" +checksum = "a58e29f263341a29bb79e14ad7fda5f63b1c7e48929bad4c685d7876b1d04e94" dependencies = [ "serde", ] [[package]] name = "ucd-trie" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c" +checksum = "89570599c4fe5585de2b388aab47e99f7fa4e9238a1399f707a02e356058141c" [[package]] name = "uncased" -version = "0.9.6" +version = "0.9.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5baeed7327e25054889b9bd4f975f32e5f4c5d434042d59ab6cd4142c0a76ed0" +checksum = "09b01702b0fd0b3fadcf98e098780badda8742d4f4a7676615cad90e8ac73622" dependencies = [ "serde", "version_check", @@ -3296,15 +3293,21 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.7" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a01404663e3db436ed2746d9fefef640d868edae3cceb81c3b8d5732fda678f" +checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" + +[[package]] +name = "unicode-ident" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c" [[package]] name = "unicode-normalization" -version = "0.1.19" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9" +checksum = "854cbdc4f7bc6ae19c820d44abdc3277ac3e1b2b93db20a636825d9322fb60e6" dependencies = [ "tinyvec", ] @@ -3317,9 +3320,9 @@ checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99" [[package]] name = "unicode-xid" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" +checksum = "957e51f3646910546462e67d5f7599b9e4fb8acdd304b087a6494730f9eebf04" [[package]] name = "unicode_categories" @@ -3409,9 +3412,9 @@ checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" [[package]] name = "wasi" -version = "0.10.2+wasi-snapshot-preview1" +version = "0.10.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" +checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" [[package]] name = "wasi" @@ -3421,9 +3424,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.80" +version = "0.2.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27370197c907c55e3f1a9fbe26f44e937fe6451368324e009cba39e139dc08ad" +checksum = "7c53b543413a17a202f4be280a7e5c62a1c69345f5de525ee64f8cfdbc954994" dependencies = [ "cfg-if 1.0.0", "wasm-bindgen-macro", @@ -3431,9 +3434,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.80" +version = "0.2.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53e04185bfa3a779273da532f5025e33398409573f348985af9a1cbf3774d3f4" +checksum = "5491a68ab4500fa6b4d726bd67408630c3dbe9c4fe7bda16d5c82a1fd8c7340a" dependencies = [ "bumpalo", "lazy_static", @@ -3446,9 +3449,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.30" +version = "0.4.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f741de44b75e14c35df886aff5f1eb73aa114fa5d4d00dcd37b5e01259bf3b2" +checksum = "de9a9cec1733468a8c657e57fa2413d2ae2c0129b95e87c5b72b8ace4d13f31f" dependencies = [ "cfg-if 1.0.0", "js-sys", @@ -3458,9 +3461,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.80" +version = "0.2.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17cae7ff784d7e83a2fe7611cfe766ecf034111b49deb850a3dc7699c08251f5" +checksum = "c441e177922bc58f1e12c022624b6216378e5febc2f0533e41ba443d505b80aa" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3468,9 +3471,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.80" +version = "0.2.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99ec0dc7a4756fffc231aab1b9f2f578d23cd391390ab27f952ae0c9b3ece20b" +checksum = "7d94ac45fcf608c1f45ef53e748d35660f168490c10b23704c7779ab8f5c3048" dependencies = [ "proc-macro2", "quote", @@ -3481,15 +3484,15 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.80" +version = "0.2.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d554b7f530dee5964d9a9468d95c1f8b8acae4f282807e7d27d4b03099a46744" +checksum = "6a89911bd99e5f3659ec4acf9c4d93b0a90fe4a2a11f15328472058edc5261be" [[package]] name = "web-sys" -version = "0.3.57" +version = "0.3.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b17e741662c70c8bd24ac5c5b18de314a2c26c32bf8346ee1e6f53de919c283" +checksum = "2fed94beee57daf8dd7d51f2b15dc2bcde92d7a72304cdf662a4371008b71b90" dependencies = [ "js-sys", "wasm-bindgen", @@ -3526,9 +3529,9 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.22.3" +version = "0.22.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d8de8415c823c8abd270ad483c6feeac771fad964890779f9a8cb24fbbc1bf" +checksum = "f1c760f0d366a6c24a02ed7816e23e691f5d92291f94d15e836006fd11b04daf" dependencies = [ "webpki 0.22.0", ] @@ -3578,9 +3581,9 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows-sys" -version = "0.34.0" +version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5acdd78cb4ba54c0045ac14f62d8f94a03d10047904ae2a40afa1e99d8f70825" +checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" dependencies = [ "windows_aarch64_msvc", "windows_i686_gnu", @@ -3591,33 +3594,33 @@ dependencies = [ [[package]] name = "windows_aarch64_msvc" -version = "0.34.0" +version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17cffbe740121affb56fad0fc0e421804adf0ae00891205213b5cecd30db881d" +checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" [[package]] name = "windows_i686_gnu" -version = "0.34.0" +version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2564fde759adb79129d9b4f54be42b32c89970c18ebf93124ca8870a498688ed" +checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" [[package]] name = "windows_i686_msvc" -version = "0.34.0" +version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cd9d32ba70453522332c14d38814bceeb747d80b3958676007acadd7e166956" +checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" [[package]] name = "windows_x86_64_gnu" -version = "0.34.0" +version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfce6deae227ee8d356d19effc141a509cc503dfd1f850622ec4b0f84428e1f4" +checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" [[package]] name = "windows_x86_64_msvc" -version = "0.34.0" +version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d19538ccc21819d01deaf88d6a17eae6596a12e9aafdbb97916fb49896d89de9" +checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" [[package]] name = "winreg" @@ -3646,6 +3649,6 @@ checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" [[package]] name = "zeroize" -version = "1.5.4" +version = "1.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7eb5728b8afd3f280a869ce1d4c554ffaed35f45c231fc41bfbd0381bef50317" +checksum = "20b578acffd8516a6c3f2a1bdefc1ec37e547bb4e0fb8b6b01a4cafc886b4442" diff --git a/Cargo.toml b/Cargo.toml index 1a07122..6dc6a42 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,7 +23,7 @@ rmp-serde = "0.15" rand = "0.7" levenshtein = "1.0" sqlx = { version = "0.5", features = ["runtime-tokio-rustls", "macros", "mysql", "bigdecimal", "chrono"]} -base64 = "0.13.0" +base64 = "0.13" [dependencies.postman] path = "postman" diff --git a/postman/Cargo.toml b/postman/Cargo.toml index c17d5d5..c72fdbc 100644 --- a/postman/Cargo.toml +++ b/postman/Cargo.toml @@ -7,12 +7,10 @@ edition = "2021" tokio = { version = "1", features = ["process", "full"] } regex = "1.4" log = "0.4" -env_logger = "0.8" chrono = "0.4" chrono-tz = { version = "0.5", features = ["serde"] } lazy_static = "1.4" num-integer = "0.1" serde = "1.0" -serde_json = "1.0" sqlx = { version = "0.5", features = ["runtime-tokio-rustls", "macros", "mysql", "bigdecimal", "chrono", "json"]} serenity = { version = "0.11.1", default-features = false, features = ["builder", "cache", "client", "gateway", "http", "model", "utils", "rustls_backend"] } diff --git a/postman/src/sender.rs b/postman/src/sender.rs index 138d3c7..0a641b3 100644 --- a/postman/src/sender.rs +++ b/postman/src/sender.rs @@ -226,7 +226,6 @@ impl Into for Embed { } } -#[derive(Debug)] pub struct Reminder { id: u32, @@ -566,7 +565,7 @@ UPDATE `channels` SET paused = 0, paused_until = NULL WHERE `channel` = ? }; if let Err(e) = result { - error!("Error sending {:?}: {:?}", self, e); + error!("Error sending reminder {}: {:?}", self.id, e); if let Error::Http(error) = e { if error.status_code() == Some(StatusCode::NOT_FOUND) { diff --git a/web/Cargo.toml b/web/Cargo.toml index 41771a2..6045c1e 100644 --- a/web/Cargo.toml +++ b/web/Cargo.toml @@ -12,10 +12,10 @@ oauth2 = "4" log = "0.4" reqwest = "0.11" serde = { version = "1.0", features = ["derive"] } -serde_json = "1.0" sqlx = { version = "0.5", features = ["runtime-tokio-rustls", "macros", "mysql", "chrono", "json"] } chrono = "0.4" chrono-tz = "0.5" lazy_static = "1.4.0" rand = "0.7" base64 = "0.13" +csv = "1.1" diff --git a/web/src/consts.rs b/web/src/consts.rs index da09229..906c574 100644 --- a/web/src/consts.rs +++ b/web/src/consts.rs @@ -26,12 +26,8 @@ use serenity::model::prelude::AttachmentType; lazy_static! { pub static ref DEFAULT_AVATAR: AttachmentType<'static> = ( - include_bytes!(concat!( - env!("CARGO_MANIFEST_DIR"), - "/../assets/", - env!("WEBHOOK_AVATAR", "WEBHOOK_AVATAR not provided for compilation") - )) as &[u8], - env!("WEBHOOK_AVATAR"), + include_bytes!(concat!(env!("CARGO_MANIFEST_DIR"), "/../assets/webhook.jpg")) as &[u8], + "webhook.jpg", ) .into(); pub static ref SUBSCRIPTION_ROLES: HashSet = HashSet::from_iter( diff --git a/web/src/lib.rs b/web/src/lib.rs index 10fdb41..783658d 100644 --- a/web/src/lib.rs +++ b/web/src/lib.rs @@ -150,6 +150,11 @@ pub async fn initialize( routes::dashboard::guild::get_reminders, routes::dashboard::guild::edit_reminder, routes::dashboard::guild::delete_reminder, + routes::dashboard::export::export_reminders, + routes::dashboard::export::export_reminder_templates, + routes::dashboard::export::export_todos, + routes::dashboard::export::import_reminders, + routes::dashboard::export::import_todos, ], ) .launch() diff --git a/web/src/routes/dashboard/export.rs b/web/src/routes/dashboard/export.rs new file mode 100644 index 0000000..b0005bf --- /dev/null +++ b/web/src/routes/dashboard/export.rs @@ -0,0 +1,375 @@ +use csv::{QuoteStyle, WriterBuilder}; +use rocket::{ + http::CookieJar, + serde::json::{json, Json, Value as JsonValue}, + State, +}; +use serenity::{ + client::Context, + model::id::{ChannelId, GuildId}, +}; +use sqlx::{MySql, Pool}; + +use crate::routes::dashboard::{ImportBody, ReminderCsv, ReminderTemplateCsv, TodoCsv}; + +#[get("/api/guild//export/reminders")] +pub async fn export_reminders( + id: u64, + cookies: &CookieJar<'_>, + ctx: &State, + pool: &State>, +) -> JsonValue { + check_authorization!(cookies, ctx.inner(), id); + + let mut csv_writer = WriterBuilder::new().quote_style(QuoteStyle::Always).from_writer(vec![]); + + let channels_res = GuildId(id).channels(&ctx.inner()).await; + + match channels_res { + Ok(channels) => { + let channels = channels + .keys() + .into_iter() + .map(|k| k.as_u64().to_string()) + .collect::>() + .join(","); + + let result = sqlx::query_as_unchecked!( + ReminderCsv, + "SELECT + reminders.attachment, + reminders.attachment_name, + reminders.avatar, + channels.channel, + reminders.content, + reminders.embed_author, + reminders.embed_author_url, + reminders.embed_color, + reminders.embed_description, + reminders.embed_footer, + reminders.embed_footer_url, + reminders.embed_image_url, + reminders.embed_thumbnail_url, + reminders.embed_title, + reminders.embed_fields, + reminders.enabled, + reminders.expires, + reminders.interval_seconds, + reminders.interval_months, + reminders.name, + reminders.restartable, + reminders.tts, + reminders.username, + reminders.utc_time + FROM reminders + LEFT JOIN channels ON channels.id = reminders.channel_id + WHERE FIND_IN_SET(channels.channel, ?)", + channels + ) + .fetch_all(pool.inner()) + .await; + + match result { + Ok(reminders) => { + reminders.iter().for_each(|reminder| { + csv_writer.serialize(reminder).unwrap(); + }); + + match csv_writer.into_inner() { + Ok(inner) => match String::from_utf8(inner) { + Ok(encoded) => { + json!({ "body": encoded }) + } + + Err(e) => { + warn!("Failed to write UTF-8: {:?}", e); + + json!({"error": "Failed to write UTF-8"}) + } + }, + + Err(e) => { + warn!("Failed to extract CSV: {:?}", e); + + json!({"error": "Failed to extract CSV"}) + } + } + } + + Err(e) => { + warn!("Failed to complete SQL query: {:?}", e); + + json!({"error": "Failed to query reminders"}) + } + } + } + + Err(e) => { + warn!("Could not fetch channels from {}: {:?}", id, e); + + json!({"error": "Failed to get guild channels"}) + } + } +} + +#[put("/api/guild//export/reminders", data = "")] +pub async fn import_reminders( + id: u64, + cookies: &CookieJar<'_>, + body: Json, + ctx: &State, + pool: &State>, +) -> JsonValue { + check_authorization!(cookies, ctx.inner(), id); + + match base64::decode(&body.body) { + Ok(body) => { + let mut reader = csv::Reader::from_reader(body.as_slice()); + + for result in reader.deserialize::() { + match result { + Ok(record) => {} + + Err(e) => { + warn!("Couldn't deserialize CSV row: {:?}", e); + } + } + } + + json!({"error": "Not implemented"}) + } + + Err(_) => { + json!({"error": "Malformed base64"}) + } + } +} + +#[get("/api/guild//export/todos")] +pub async fn export_todos( + id: u64, + cookies: &CookieJar<'_>, + ctx: &State, + pool: &State>, +) -> JsonValue { + check_authorization!(cookies, ctx.inner(), id); + + let mut csv_writer = WriterBuilder::new().quote_style(QuoteStyle::Always).from_writer(vec![]); + + match sqlx::query_as_unchecked!( + TodoCsv, + "SELECT value, CONCAT('#', channels.channel) AS channel_id FROM todos + LEFT JOIN channels ON todos.channel_id = channels.id + INNER JOIN guilds ON todos.guild_id = guilds.id + WHERE guilds.guild = ?", + id + ) + .fetch_all(pool.inner()) + .await + { + Ok(todos) => { + todos.iter().for_each(|todo| { + csv_writer.serialize(todo).unwrap(); + }); + + match csv_writer.into_inner() { + Ok(inner) => match String::from_utf8(inner) { + Ok(encoded) => { + json!({ "body": encoded }) + } + + Err(e) => { + warn!("Failed to write UTF-8: {:?}", e); + + json!({"error": "Failed to write UTF-8"}) + } + }, + + Err(e) => { + warn!("Failed to extract CSV: {:?}", e); + + json!({"error": "Failed to extract CSV"}) + } + } + } + Err(e) => { + warn!("Could not fetch templates from {}: {:?}", id, e); + + json!({"error": "Failed to query templates"}) + } + } +} + +#[put("/api/guild//export/todos", data = "")] +pub async fn import_todos( + id: u64, + cookies: &CookieJar<'_>, + body: Json, + ctx: &State, + pool: &State>, +) -> JsonValue { + check_authorization!(cookies, ctx.inner(), id); + + let channels_res = GuildId(id).channels(&ctx.inner()).await; + + match channels_res { + Ok(channels) => match base64::decode(&body.body) { + Ok(body) => { + let mut reader = csv::Reader::from_reader(body.as_slice()); + + let query_placeholder = "(?, (SELECT id FROM channels WHERE channel = ?), (SELECT id FROM guilds WHERE guild = ?))"; + let mut query_params = vec![]; + + for result in reader.deserialize::() { + match result { + Ok(record) => match record.channel_id { + Some(channel_id) => { + let channel_id = channel_id.split_at(1).1; + + match channel_id.parse::() { + Ok(channel_id) => { + if channels.contains_key(&ChannelId(channel_id)) { + query_params.push((record.value, Some(channel_id), id)); + } else { + return json!({ + "error": + format!("Invalid channel ID {}", channel_id) + }); + } + } + + Err(_) => { + return json!({ + "error": format!("Invalid channel ID {}", channel_id) + }); + } + } + } + + None => { + query_params.push((record.value, None, id)); + } + }, + + Err(e) => { + warn!("Couldn't deserialize CSV row: {:?}", e); + + return json!({"error": "Deserialize error. Aborted"}); + } + } + } + + let _ = sqlx::query!( + "DELETE FROM todos WHERE guild_id = (SELECT id FROM guilds WHERE guild = ?)", + id + ) + .execute(pool.inner()) + .await; + + let query_str = format!( + "INSERT INTO todos (value, channel_id, guild_id) VALUES {}", + vec![query_placeholder].repeat(query_params.len()).join(",") + ); + let mut query = sqlx::query(&query_str); + + for param in query_params { + query = query.bind(param.0).bind(param.1).bind(param.2); + } + + let res = query.execute(pool.inner()).await; + + match res { + Ok(_) => { + json!({}) + } + + Err(e) => { + warn!("Couldn't execute todo query: {:?}", e); + + json!({"error": "An unexpected error occured."}) + } + } + } + + Err(_) => { + json!({"error": "Malformed base64"}) + } + }, + + Err(e) => { + warn!("Couldn't fetch channels for guild {}: {:?}", id, e); + + json!({"error": "Couldn't fetch channels."}) + } + } +} + +#[get("/api/guild//export/reminder_templates")] +pub async fn export_reminder_templates( + id: u64, + cookies: &CookieJar<'_>, + ctx: &State, + pool: &State>, +) -> JsonValue { + check_authorization!(cookies, ctx.inner(), id); + + let mut csv_writer = WriterBuilder::new().quote_style(QuoteStyle::Always).from_writer(vec![]); + + match sqlx::query_as_unchecked!( + ReminderTemplateCsv, + "SELECT + name, + attachment, + attachment_name, + avatar, + content, + embed_author, + embed_author_url, + embed_color, + embed_description, + embed_footer, + embed_footer_url, + embed_image_url, + embed_thumbnail_url, + embed_title, + embed_fields, + tts, + username + FROM reminder_template WHERE guild_id = (SELECT id FROM guilds WHERE guild = ?)", + id + ) + .fetch_all(pool.inner()) + .await + { + Ok(templates) => { + templates.iter().for_each(|template| { + csv_writer.serialize(template).unwrap(); + }); + + match csv_writer.into_inner() { + Ok(inner) => match String::from_utf8(inner) { + Ok(encoded) => { + json!({ "body": encoded }) + } + + Err(e) => { + warn!("Failed to write UTF-8: {:?}", e); + + json!({"error": "Failed to write UTF-8"}) + } + }, + + Err(e) => { + warn!("Failed to extract CSV: {:?}", e); + + json!({"error": "Failed to extract CSV"}) + } + } + } + Err(e) => { + warn!("Could not fetch templates from {}: {:?}", id, e); + + json!({"error": "Failed to query templates"}) + } + } +} diff --git a/web/src/routes/dashboard/mod.rs b/web/src/routes/dashboard/mod.rs index 5c9b5fb..a04ee50 100644 --- a/web/src/routes/dashboard/mod.rs +++ b/web/src/routes/dashboard/mod.rs @@ -13,6 +13,7 @@ use crate::{ Database, Error, }; +pub mod export; pub mod guild; pub mod user; @@ -60,6 +61,28 @@ pub struct ReminderTemplate { username: Option, } +#[derive(Serialize, Deserialize)] +pub struct ReminderTemplateCsv { + #[serde(default = "template_name_default")] + name: String, + attachment: Option>, + attachment_name: Option, + avatar: Option, + content: String, + embed_author: String, + embed_author_url: Option, + embed_color: u32, + embed_description: String, + embed_footer: String, + embed_footer_url: Option, + embed_image_url: Option, + embed_thumbnail_url: Option, + embed_title: String, + embed_fields: Option, + tts: bool, + username: Option, +} + #[derive(Deserialize)] pub struct DeleteReminderTemplate { id: u32, @@ -105,6 +128,36 @@ pub struct Reminder { utc_time: NaiveDateTime, } +#[derive(Serialize, Deserialize)] +pub struct ReminderCsv { + #[serde(with = "base64s")] + attachment: Option>, + attachment_name: Option, + avatar: Option, + channel: u64, + content: String, + embed_author: String, + embed_author_url: Option, + embed_color: u32, + embed_description: String, + embed_footer: String, + embed_footer_url: Option, + embed_image_url: Option, + embed_thumbnail_url: Option, + embed_title: String, + embed_fields: Option, + enabled: bool, + expires: Option, + interval_seconds: Option, + interval_months: Option, + #[serde(default = "name_default")] + name: String, + restartable: bool, + tts: bool, + username: Option, + utc_time: NaiveDateTime, +} + #[derive(Deserialize)] pub struct PatchReminder { uid: String, @@ -220,13 +273,22 @@ pub struct DeleteReminder { uid: String, } +#[derive(Deserialize)] +pub struct ImportBody { + body: String, +} + +#[derive(Serialize, Deserialize)] +pub struct TodoCsv { + value: String, + channel_id: Option, +} + async fn create_database_channel( ctx: impl AsRef, channel: ChannelId, pool: impl Executor<'_, Database = Database> + Copy, ) -> Result { - println!("{:?}", channel); - let row = sqlx::query!("SELECT webhook_token, webhook_id FROM channels WHERE channel = ?", channel.0) .fetch_one(pool) diff --git a/web/src/routes/login.rs b/web/src/routes/login.rs index 0c83c04..d5894c9 100644 --- a/web/src/routes/login.rs +++ b/web/src/routes/login.rs @@ -25,7 +25,6 @@ pub async fn discord_login( // Set the desired scopes. .add_scope(Scope::new("identify".to_string())) .add_scope(Scope::new("guilds".to_string())) - .add_scope(Scope::new("email".to_string())) // Set the PKCE code challenge. .set_pkce_challenge(pkce_challenge) .url(); diff --git a/web/static/img/support/iemanager/edit_spreadsheet.png b/web/static/img/support/iemanager/edit_spreadsheet.png new file mode 100644 index 0000000000000000000000000000000000000000..931ffe83ee5869fd45a2e71500d608d6fceb9b16 GIT binary patch literal 44931 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 literal 0 HcmV?d00001 diff --git a/web/static/img/support/iemanager/format_text.png b/web/static/img/support/iemanager/format_text.png new file mode 100644 index 0000000000000000000000000000000000000000..0a600895413a60282d6c01110999372d7379f833 GIT binary patch literal 40862 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 literal 0 HcmV?d00001 diff --git a/web/static/img/support/iemanager/import.png b/web/static/img/support/iemanager/import.png new file mode 100644 index 0000000000000000000000000000000000000000..9e2bc74e0778765bd4747d172ccf7f23fcc9e730 GIT binary patch literal 45543 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 lLz=NcK5ZF7Cx}xk~+Jzg8sywo+0r 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 literal 0 HcmV?d00001 diff --git a/web/static/img/support/iemanager/sheets_settings.png b/web/static/img/support/iemanager/sheets_settings.png new file mode 100644 index 0000000000000000000000000000000000000000..4cbc6496b9603daa8274db1a4b8dab5b3d495eec GIT binary patch literal 20917 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 { + const urlTail = document.querySelector('input[name="exportSelect"]:checked').value; + + new Promise((resolve) => { + let fileReader = new FileReader(); + fileReader.onload = (e) => resolve(fileReader.result); + fileReader.readAsDataURL($uploader.files[0]); + }).then((dataUrl) => { + fetch(`/dashboard/api/guild/${guildId()}/export/${urlTail}`, { + method: "PUT", + body: JSON.stringify({ body: dataUrl.split(",")[1] }), + }).then(() => { + delete $uploader.files[0]; + }); + }); +}); + +$importBtn.addEventListener("click", () => { + $uploader.click(); +}); + +$exportBtn.addEventListener("click", () => { + const urlTail = document.querySelector('input[name="exportSelect"]:checked').value; + + fetch(`/dashboard/api/guild/${guildId()}/export/${urlTail}`) + .then((response) => response.json()) + .then((data) => { + $downloader.href = + "data:text/plain;charset=utf-8," + encodeURIComponent(data.body); + $downloader.click(); + }); +}); + $createReminderBtn.addEventListener("click", async () => { $createReminderBtn.querySelector("span.icon > i").classList = [ "fas fa-spinner fa-spin", @@ -834,7 +871,7 @@ document.addEventListener("remindersLoaded", () => { }); }); - const fileInput = document.querySelectorAll("input[type=file]"); + const fileInput = document.querySelectorAll("input.file-input[type=file]"); fileInput.forEach((element) => { element.addEventListener("change", () => { diff --git a/web/templates/dashboard.html.tera b/web/templates/dashboard.html.tera index c01e793..4a56955 100644 --- a/web/templates/dashboard.html.tera +++ b/web/templates/dashboard.html.tera @@ -177,38 +177,41 @@ diff --git a/web/templates/errors/500.html.tera b/web/templates/errors/500.html.tera index 0bae3b5..ed86651 100644 --- a/web/templates/errors/500.html.tera +++ b/web/templates/errors/500.html.tera @@ -5,5 +5,5 @@ {% set show_contact = True %} {% set page_title = "An Error Has Occurred" %} - {% set page_subtitle = "A server error has occurred. Please contact me and I will try and resolve this" %} + {% set page_subtitle = "A server error has occurred. Please retry, or ask in our Discord." %} {% endblock %} diff --git a/web/templates/privacy.html.tera b/web/templates/privacy.html.tera index d99d5d4..6898472 100644 --- a/web/templates/privacy.html.tera +++ b/web/templates/privacy.html.tera @@ -49,7 +49,7 @@

Who your data is shared with

- Your data may also be guarded by the privacy policies of MEGA, our backup provider, and + Your data is also guarded by the privacy policies of MEGA, our backup provider, and Hetzner, our hosting provider.

@@ -68,7 +68,7 @@

Reminders deleted with /del or via the dashboard are removed from the live database - instantly, but may persist in backups. + instantly, but may persist in backups for up to a year.

diff --git a/web/templates/support/iemanager.html.tera b/web/templates/support/iemanager.html.tera index 007daa1..b139817 100644 --- a/web/templates/support/iemanager.html.tera +++ b/web/templates/support/iemanager.html.tera @@ -14,13 +14,75 @@

Export your data

- You can create reminders with the /remind command. -
- Fill out the "time" and "content" fields. If you wish, press on "Optional" to view other options - for the reminder. + You can export data associated with your server from the dashboard. The data will export as a CSV + file. The CSV file can then be edited and imported to bulk edit server data.

+
+
+
+

Import data

+

+ You can import previous exports or modified exports. When importing a file, existing data + will be overwritten. +

+
+
+
+ +
+
+
+

Edit your data

+

+ The CSV can be edited either as a text file or in a spreadsheet editor such as LibreOffice Calc. To + set up LibreOffice Calc for editing, do the following: +

+
    +
  1. + Export data from dashboard. +
    + Selecting export button +
    +
  2. +
  3. + Open the file in LibreOffice. During the import dialogue, select "Format quoted field as text". +
    + Selecting format button +
    +
  4. +
  5. + Make edits to the spreadsheet. You can add, edit, and remove rows for reminders. Don't remove the title row. +
    + Editing spreadsheet +
    +
  6. +
  7. + Save the edited CSV file and import it on the dashboard. +
    + Import new reminders +
    +
  8. +
+ Other spreadsheet tools can also be used to edit exports, as long as they are properly configured: +
    +
  • + Google Sheets: Create a new blank spreadsheet. Select File >> Import >> Upload >> export.csv. + Use the following import settings: +
    + Google sheets import settings +
    +
  • +
  • + Excel (including Excel Online): Avoid using Excel. Excel will not correctly import channels, or give + clear options to correct imports. +
  • +
+
+
+
+ {% endblock %} diff --git a/web/templates/terms.html.tera b/web/templates/terms.html.tera index 9eee18f..fb74fbd 100644 --- a/web/templates/terms.html.tera +++ b/web/templates/terms.html.tera @@ -20,11 +20,12 @@
Violating the Terms of Service may result in receiving a permanent ban from the Discord server, permanent restriction on your usage of Reminder Bot, or removal of some or all of your content on - Reminder Bot or the Discord server. + Reminder Bot or the Discord server. None of these will necessarily be preceded or succeeded by a warning + or notice.

- The Terms of Service may be updated at any time. Notice will be provided via the Discord server. You - should consider the Terms of Service to be a guideline for appropriate behaviour. + The Terms of Service may be updated. Notice will be provided via the Discord server. You + should consider the Terms of Service to be a strong for appropriate behaviour.

@@ -37,6 +38,12 @@
  • Do not use the bot to harass other Discord users
  • Do not use the bot to transmit malware or other illegal content
  • Do not use the bot to send more than 15 messages during a 60 second period
  • +
  • + Do not attempt to circumvent restrictions imposed by the bot or website, including trying to access + data of other users, circumvent Patreon restrictions, or uploading files and creating reminders that + are too large for the bot to send or process. Some or all of these actions may be illegal in your + country +