diff --git a/.env b/.env new file mode 100644 index 00000000..81ec293f --- /dev/null +++ b/.env @@ -0,0 +1,79 @@ +# MongoDB URI +MONGODB=mongodb://localhost + +# URL to where the Revolt app is publicly accessible +REVOLT_APP_URL=http://local.revolt.chat:5000 + +# URL to where the API is publicly accessible +REVOLT_PUBLIC_URL=http://local.revolt.chat:8000 +VITE_API_URL=http://local.revolt.chat:8000 + +# URL to where the WebSocket server is publicly accessible +REVOLT_EXTERNAL_WS_URL=ws://local.revolt.chat:9000 + +# URL to where Autumn is publicly available +AUTUMN_PUBLIC_URL=http://local.revolt.chat:3000 + +# URL to where January is publicly available +JANUARY_PUBLIC_URL=http://local.revolt.chat:7000 + +# URL to where Vortex is publicly available +# VOSO_PUBLIC_URL=https://voso.revolt.chat + + +## +## hCaptcha Settings +## + +# If you are sure that you don't want to use hCaptcha, set to 1. +REVOLT_UNSAFE_NO_CAPTCHA=1 + +# hCaptcha API key +# REVOLT_HCAPTCHA_KEY=0x0000000000000000000000000000000000000000 + +# hCaptcha site key +# REVOLT_HCAPTCHA_SITEKEY=10000000-ffff-ffff-ffff-000000000001 + + +## +## Email Settings +## + +# If you are sure that you don't want to use email verification, set to 1. +REVOLT_UNSAFE_NO_EMAIL=1 + +# SMTP host +# REVOLT_SMTP_HOST=smtp.example.com + +# SMTP username +# REVOLT_SMTP_USERNAME=noreply@example.com + +# SMTP password +# REVOLT_SMTP_PASSWORD=CHANGEME + +# SMTP From header +# REVOLT_SMTP_FROM=Revolt + + +## +## Application Settings +## + +# Whether to only allow users to sign up if they have an invite code +REVOLT_INVITE_ONLY=0 + +# Maximum number of people that can be in a group chat +REVOLT_MAX_GROUP_SIZE=150 + +# VAPID keys for push notifications +# Generate using this guide: https://gitlab.insrt.uk/revolt/delta/-/wikis/vapid +# --> Please replace these keys before going into production! <-- +REVOLT_VAPID_PRIVATE_KEY=LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSUJSUWpyTWxLRnBiVWhsUHpUbERvcEliYk1yeVNrNXpKYzVYVzIxSjJDS3hvQW9HQ0NxR1NNNDkKQXdFSG9VUURRZ0FFWnkrQkg2TGJQZ2hEa3pEempXOG0rUXVPM3pCajRXT1phdkR6ZU00c0pqbmFwd1psTFE0WAp1ZDh2TzVodU94QWhMQlU3WWRldVovWHlBdFpWZmNyQi9BPT0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo= +REVOLT_VAPID_PUBLIC_KEY=BGcvgR-i2z4IQ5Mw841vJvkLjt8wY-FjmWrw83jOLCY52qcGZS0OF7nfLzuYbjsQISwVO2HXrmf18gLWVX3Kwfw= + + +## +## Vortex configuration +## + +# VOSO_MANAGE_TOKEN=CHANGEME diff --git a/.gitignore b/.gitignore index 4152308b..56551f44 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ Rocket.toml target +.data diff --git a/Cargo.lock b/Cargo.lock index 81ccab57..6f017f26 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,16 +2,6 @@ # It is not intended for manual editing. version = 3 -[[package]] -name = "Inflector" -version = "0.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" -dependencies = [ - "lazy_static", - "regex", -] - [[package]] name = "addr2line" version = "0.17.0" @@ -27,13 +17,48 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +[[package]] +name = "aead" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877" +dependencies = [ + "generic-array 0.14.5", +] + +[[package]] +name = "aes" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8" +dependencies = [ + "cfg-if 1.0.0", + "cipher", + "cpufeatures", + "opaque-debug 0.3.0", +] + +[[package]] +name = "aes-gcm" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df5f85a83a7d8b0442b6aa7b504b8212c1733da07b98aae43d4bc21b2cb3cdf6" +dependencies = [ + "aead", + "aes", + "cipher", + "ctr", + "ghash", + "subtle", +] + [[package]] name = "ahash" version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" dependencies = [ - "getrandom 0.2.6", + "getrandom", "once_cell", "version_check", ] @@ -64,9 +89,9 @@ checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" [[package]] name = "arrayvec" -version = "0.5.2" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" +checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" [[package]] name = "async-attributes" @@ -75,7 +100,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a3203e79f4dd9bdda415ed03cf14dae5a2bf775c683a00f94e9cd1faf0f596e5" dependencies = [ "quote 1.0.18", - "syn 1.0.95", + "syn 1.0.96", ] [[package]] @@ -173,7 +198,7 @@ checksum = "2cda8f4bcc10624c4e85bc66b3f452cca98cfa5ca002dc83a16aad2367641bea" dependencies = [ "proc-macro2", "quote 1.0.18", - "syn 1.0.95", + "syn 1.0.96", ] [[package]] @@ -217,7 +242,7 @@ dependencies = [ "futures-util", "pin-utils", "socket2 0.4.4", - "trust-dns-resolver 0.21.2", + "trust-dns-resolver", ] [[package]] @@ -238,7 +263,7 @@ checksum = "10f203db73a71dfa2fb6dd22763990fa26f3d2625a6da2da900d23b87d26be27" dependencies = [ "proc-macro2", "quote 1.0.18", - "syn 1.0.95", + "syn 1.0.96", ] [[package]] @@ -249,13 +274,13 @@ checksum = "30696a84d817107fc028e049980e09d5e140e8da8f1caeb17e8e950658a3cea9" [[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 1.0.18", - "syn 1.0.95", + "syn 1.0.96", ] [[package]] @@ -328,12 +353,6 @@ dependencies = [ "rustc-demangle", ] -[[package]] -name = "base-x" -version = "0.2.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc19a4937b4fbd3fe3379793130e42060d10627a360f2127802b10b87e7baf74" - [[package]] name = "base32" version = "0.4.0" @@ -350,12 +369,6 @@ dependencies = [ "safemem", ] -[[package]] -name = "base64" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7" - [[package]] name = "base64" version = "0.13.0" @@ -391,9 +404,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "blake2b_simd" -version = "0.5.11" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afa748e348ad3be8263be728124b24a24f268266f6f5d58af9d75f6a40b5c587" +checksum = "72936ee4afc7f8f736d1c38383b56480b5497b4617b4a77bdbf1d2ababc76127" dependencies = [ "arrayref", "arrayvec", @@ -412,15 +425,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" @@ -453,23 +457,6 @@ dependencies = [ "once_cell", ] -[[package]] -name = "bson" -version = "1.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de0aa578035b938855a710ba58d43cfb4d435f3619f99236fb35922a574d6cb1" -dependencies = [ - "base64 0.13.0", - "chrono", - "hex", - "lazy_static", - "linked-hash-map", - "rand 0.7.3", - "serde", - "serde_json", - "uuid", -] - [[package]] name = "bson" version = "2.2.0" @@ -553,12 +540,20 @@ dependencies = [ "libc", "num-integer", "num-traits", - "serde", "time 0.1.44", "wasm-bindgen", "winapi 0.3.9", ] +[[package]] +name = "cipher" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" +dependencies = [ + "generic-array 0.14.5", +] + [[package]] name = "cloudabi" version = "0.0.3" @@ -591,12 +586,6 @@ dependencies = [ "cache-padded", ] -[[package]] -name = "const_fn" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbdcdcb6d86f71c5e97409ad45898af11cbc995b4ee8112d59095a28d376c935" - [[package]] name = "constant_time_eq" version = "0.1.5" @@ -605,12 +594,19 @@ checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" [[package]] name = "cookie" -version = "0.15.1" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5f1c7727e460397e56abc4bddc1d49e07a1ad78fc98eb2e1c8f032a58a2f80d" +checksum = "94d4706de1b0fa5b132270cddffa8585166037822e260a944fe161acd137ca05" dependencies = [ + "aes-gcm", + "base64 0.13.0", + "hkdf", + "hmac", "percent-encoding", - "time 0.2.27", + "rand 0.8.5", + "sha2", + "subtle", + "time 0.3.9", "version_check", ] @@ -669,16 +665,6 @@ dependencies = [ "typenum", ] -[[package]] -name = "crypto-mac" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714" -dependencies = [ - "generic-array 0.14.5", - "subtle", -] - [[package]] name = "ctor" version = "0.1.22" @@ -686,7 +672,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f877be4f7c9f246b183111634f75baa039715e3f46ce860677d3b19a69fb229c" dependencies = [ "quote 1.0.18", - "syn 1.0.95", + "syn 1.0.96", +] + +[[package]] +name = "ctr" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea" +dependencies = [ + "cipher", ] [[package]] @@ -699,38 +694,14 @@ dependencies = [ "winapi 0.3.9", ] -[[package]] -name = "darling" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d706e75d87e35569db781a9b5e2416cff1236a47ed380831f959382ccd5f858" -dependencies = [ - "darling_core 0.10.2", - "darling_macro 0.10.2", -] - [[package]] name = "darling" version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" dependencies = [ - "darling_core 0.13.4", - "darling_macro 0.13.4", -] - -[[package]] -name = "darling_core" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0c960ae2da4de88a91b2d920c2a7233b400bc33cb28453a2987822d8392519b" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote 1.0.18", - "strsim 0.9.3", - "syn 1.0.95", + "darling_core", + "darling_macro", ] [[package]] @@ -743,19 +714,8 @@ dependencies = [ "ident_case", "proc-macro2", "quote 1.0.18", - "strsim 0.10.0", - "syn 1.0.95", -] - -[[package]] -name = "darling_macro" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b5a2f4ac4969822c62224815d069952656cadc7084fdca9751e6d959189b72" -dependencies = [ - "darling_core 0.10.2", - "quote 1.0.18", - "syn 1.0.95", + "strsim", + "syn 1.0.96", ] [[package]] @@ -764,9 +724,9 @@ version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" dependencies = [ - "darling_core 0.13.4", + "darling_core", "quote 1.0.18", - "syn 1.0.95", + "syn 1.0.96", ] [[package]] @@ -778,7 +738,7 @@ dependencies = [ "cfg-if 1.0.0", "hashbrown 0.12.1", "lock_api", - "parking_lot_core 0.9.3", + "parking_lot_core", ] [[package]] @@ -815,7 +775,7 @@ checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" dependencies = [ "proc-macro2", "quote 1.0.18", - "syn 1.0.95", + "syn 1.0.96", ] [[package]] @@ -848,7 +808,7 @@ dependencies = [ "proc-macro2", "proc-macro2-diagnostics", "quote 1.0.18", - "syn 1.0.95", + "syn 1.0.96", ] [[package]] @@ -860,15 +820,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" @@ -880,12 +831,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "discard" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "212d0f5754cb6769937f4501cc0e67f4f4483c8d2c3e1e922ee9edbe4ab4c7c0" - [[package]] name = "dotenv" version = "0.15.0" @@ -928,18 +873,6 @@ dependencies = [ "cfg-if 1.0.0", ] -[[package]] -name = "enum-as-inner" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "570d109b813e904becc80d8d5da38376818a143348413f7149f1340fe04754d4" -dependencies = [ - "heck", - "proc-macro2", - "quote 1.0.18", - "syn 1.0.95", -] - [[package]] name = "enum-as-inner" version = "0.4.0" @@ -949,7 +882,7 @@ dependencies = [ "heck", "proc-macro2", "quote 1.0.18", - "syn 1.0.95", + "syn 1.0.96", ] [[package]] @@ -974,20 +907,6 @@ dependencies = [ "serde", ] -[[package]] -name = "err-derive" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22deed3a8124cff5fa835713fa105621e43bbdc46690c3a6b68328a012d350d4" -dependencies = [ - "proc-macro-error", - "proc-macro2", - "quote 1.0.18", - "rustversion", - "syn 1.0.95", - "synstructure", -] - [[package]] name = "event-listener" version = "2.5.2" @@ -1147,7 +1066,7 @@ checksum = "33c1e13800337f4d4d7a316bf45a567dbcb6ffe087f16424852d97e97a91f512" dependencies = [ "proc-macro2", "quote 1.0.18", - "syn 1.0.95", + "syn 1.0.96", ] [[package]] @@ -1218,17 +1137,6 @@ dependencies = [ "version_check", ] -[[package]] -name = "getrandom" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" -dependencies = [ - "cfg-if 1.0.0", - "libc", - "wasi 0.9.0+wasi-snapshot-preview1", -] - [[package]] name = "getrandom" version = "0.2.6" @@ -1240,6 +1148,16 @@ dependencies = [ "wasi 0.10.0+wasi-snapshot-preview1", ] +[[package]] +name = "ghash" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1583cc1656d7839fd3732b80cf4f38850336cdb9b8ded1cd399ca62958de3c99" +dependencies = [ + "opaque-debug 0.3.0", + "polyval", +] + [[package]] name = "gimli" version = "0.26.1" @@ -1305,16 +1223,16 @@ dependencies = [ [[package]] name = "handlebars" -version = "3.5.5" +version = "4.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4498fc115fa7d34de968184e473529abb40eeb6be8bc5f7faba3d08c316cb3e3" +checksum = "d113a9853e5accd30f43003560b5563ffbb007e3f325e8b103fa0d0029c6e6df" dependencies = [ "log", "pest", "pest_derive", - "quick-error 2.0.1", "serde", "serde_json", + "thiserror", ] [[package]] @@ -1354,13 +1272,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] -name = "hmac" -version = "0.11.0" +name = "hkdf" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b" +checksum = "791a029f6b9fc27657f6f188ec6e5e43f6911f6f878e0dc5501396e09809d437" dependencies = [ - "crypto-mac", - "digest 0.9.0", + "hmac", ] [[package]] @@ -1439,7 +1356,7 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f" dependencies = [ - "quick-error 1.2.3", + "quick-error", ] [[package]] @@ -1580,18 +1497,6 @@ dependencies = [ "libc", ] -[[package]] -name = "ipconfig" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7e2f18aece9709094573a9f24f483c4f65caa4298e2f7ae1b71cc65d853fad7" -dependencies = [ - "socket2 0.3.19", - "widestring 0.4.3", - "winapi 0.3.9", - "winreg 0.6.2", -] - [[package]] name = "ipconfig" version = "0.3.0" @@ -1599,7 +1504,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "723519edce41262b05d4143ceb95050e4c614f483e78e9fd9e39a8275a84ad98" dependencies = [ "socket2 0.4.4", - "widestring 0.5.1", + "widestring", "winapi 0.3.9", "winreg 0.7.0", ] @@ -1643,12 +1548,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "json" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "078e285eafdfb6c4b434e0d31e8cfcb5115b651496faca5749b88fafd4f23bfd" - [[package]] name = "kernel32-sys" version = "0.2.2" @@ -1805,17 +1704,6 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" -[[package]] -name = "md-5" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5a279bb9607f9f53c22d496eade00d138d1bdcccd07d74650387cf94942a15" -dependencies = [ - "block-buffer 0.9.0", - "digest 0.9.0", - "opaque-debug 0.3.0", -] - [[package]] name = "md-5" version = "0.10.1" @@ -1923,95 +1811,49 @@ dependencies = [ [[package]] name = "mongodb" -version = "1.2.5" +version = "2.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88543485b334691ccd284ea2d6033a5d9b0e5e77db6a0aa7a2da4caaa458f4f9" -dependencies = [ - "async-std", - "async-trait", - "base64 0.11.0", - "bitflags", - "bson 1.2.4", - "chrono", - "derivative", - "err-derive", - "futures", - "hex", - "hmac 0.11.0", - "lazy_static", - "md-5 0.9.1", - "os_info", - "pbkdf2 0.8.0", - "percent-encoding", - "rand 0.7.3", - "rustls 0.17.0", - "rustls-pemfile 0.2.1", - "serde", - "serde_with", - "sha-1 0.9.8", - "sha2 0.9.9", - "socket2 0.3.19", - "stringprep", - "strsim 0.10.0", - "take_mut", - "time 0.1.44", - "tokio 0.2.25", - "tokio-rustls 0.13.1", - "trust-dns-proto 0.19.7", - "trust-dns-resolver 0.19.7", - "typed-builder 0.4.1", - "uuid", - "version_check", - "webpki 0.21.4", - "webpki-roots 0.21.1", -] - -[[package]] -name = "mongodb" -version = "2.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49a2fe500edae1ffc8e4bbc731e54a44638e5ec59fbff967f1cb8306867f5b53" +checksum = "28f3943e379e9dcaaab9dc319c308a8caaf9e7ff083c6838dff740afbba59df7" dependencies = [ "async-std", "async-std-resolver", "async-trait", "base64 0.13.0", "bitflags", - "bson 2.2.0", + "bson", "chrono", "derivative", "futures-core", "futures-executor", - "futures-io", "futures-util", "hex", - "hmac 0.12.1", + "hmac", "lazy_static", - "md-5 0.10.1", + "md-5", "os_info", - "pbkdf2 0.10.1", + "pbkdf2", "percent-encoding", "rand 0.8.5", "rustc_version_runtime", - "rustls 0.20.6", - "rustls-pemfile 0.3.0", + "rustls", + "rustls-pemfile", "serde", "serde_with", "sha-1 0.10.0", - "sha2 0.10.2", + "sha2", "socket2 0.4.4", "stringprep", - "strsim 0.10.0", + "strsim", "take_mut", "thiserror", "tokio 1.18.2", - "tokio-rustls 0.23.4", + "tokio-rustls", "tokio-util 0.7.2", - "trust-dns-proto 0.21.2", - "trust-dns-resolver 0.21.2", - "typed-builder 0.10.0", + "trust-dns-proto", + "trust-dns-resolver", + "typed-builder", "uuid", - "webpki-roots 0.22.3", + "webpki-roots", ] [[package]] @@ -2140,7 +1982,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote 1.0.18", - "syn 1.0.95", + "syn 1.0.96", ] [[package]] @@ -2164,7 +2006,7 @@ dependencies = [ [[package]] name = "okapi" version = "0.7.0-rc.1" -source = "git+https://github.com/insertish/okapi?rev=dcf0df115596ee07a587a7a543cddf3d7944645b#dcf0df115596ee07a587a7a543cddf3d7944645b" +source = "git+https://github.com/insertish/okapi?rev=a1048d0c8cd771e424ec97d33d825c32e06aa120#a1048d0c8cd771e424ec97d33d825c32e06aa120" dependencies = [ "log", "schemars", @@ -2213,7 +2055,7 @@ checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c" dependencies = [ "proc-macro2", "quote 1.0.18", - "syn 1.0.95", + "syn 1.0.96", ] [[package]] @@ -2260,17 +2102,6 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72" -[[package]] -name = "parking_lot" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" -dependencies = [ - "instant", - "lock_api", - "parking_lot_core 0.8.5", -] - [[package]] name = "parking_lot" version = "0.12.1" @@ -2278,21 +2109,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" dependencies = [ "lock_api", - "parking_lot_core 0.9.3", -] - -[[package]] -name = "parking_lot_core" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216" -dependencies = [ - "cfg-if 1.0.0", - "instant", - "libc", - "redox_syscall", - "smallvec", - "winapi 0.3.9", + "parking_lot_core", ] [[package]] @@ -2314,15 +2131,6 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c520e05135d6e763148b6426a837e239041653ba7becd2e538c076c738025fc" -[[package]] -name = "pbkdf2" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d95f5254224e617595d2cc3cc73ff0a5eaf2637519e25f03388154e9378b6ffa" -dependencies = [ - "crypto-mac", -] - [[package]] name = "pbkdf2" version = "0.10.1" @@ -2352,7 +2160,7 @@ dependencies = [ "proc-macro2", "proc-macro2-diagnostics", "quote 1.0.18", - "syn 1.0.95", + "syn 1.0.96", ] [[package]] @@ -2390,7 +2198,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote 1.0.18", - "syn 1.0.95", + "syn 1.0.96", ] [[package]] @@ -2421,7 +2229,7 @@ checksum = "744b6f092ba29c3650faf274db506afd39944f48420f6c86b17cfe0ee1cb36bb" dependencies = [ "proc-macro2", "quote 1.0.18", - "syn 1.0.95", + "syn 1.0.96", ] [[package]] @@ -2461,6 +2269,18 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "polyval" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8419d2b623c7c0896ff2d5d96e2cb4ede590fed28fcc34934f4c33c036e620a1" +dependencies = [ + "cfg-if 1.0.0", + "cpufeatures", + "opaque-debug 0.3.0", + "universal-hash", +] + [[package]] name = "ppv-lite86" version = "0.2.16" @@ -2496,7 +2316,7 @@ dependencies = [ "proc-macro-error-attr", "proc-macro2", "quote 1.0.18", - "syn 1.0.95", + "syn 1.0.96", "version_check", ] @@ -2511,12 +2331,6 @@ dependencies = [ "version_check", ] -[[package]] -name = "proc-macro-hack" -version = "0.5.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" - [[package]] name = "proc-macro2" version = "1.0.39" @@ -2534,7 +2348,7 @@ checksum = "4bf29726d67464d49fa6224a1d07936a8c08bb3fba727c7493f6cf1616fdaada" dependencies = [ "proc-macro2", "quote 1.0.18", - "syn 1.0.95", + "syn 1.0.96", "version_check", "yansi", ] @@ -2551,12 +2365,6 @@ version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" -[[package]] -name = "quick-error" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" - [[package]] name = "quote" version = "0.3.15" @@ -2588,29 +2396,15 @@ dependencies = [ "libc", "rand_chacha 0.1.1", "rand_core 0.4.2", - "rand_hc 0.1.0", + "rand_hc", "rand_isaac", "rand_jitter", "rand_os", - "rand_pcg 0.1.2", + "rand_pcg", "rand_xorshift", "winapi 0.3.9", ] -[[package]] -name = "rand" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" -dependencies = [ - "getrandom 0.1.16", - "libc", - "rand_chacha 0.2.2", - "rand_core 0.5.1", - "rand_hc 0.2.0", - "rand_pcg 0.2.1", -] - [[package]] name = "rand" version = "0.8.5" @@ -2632,16 +2426,6 @@ dependencies = [ "rand_core 0.3.1", ] -[[package]] -name = "rand_chacha" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" -dependencies = [ - "ppv-lite86", - "rand_core 0.5.1", -] - [[package]] name = "rand_chacha" version = "0.3.1" @@ -2667,22 +2451,13 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" -[[package]] -name = "rand_core" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" -dependencies = [ - "getrandom 0.1.16", -] - [[package]] name = "rand_core" version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" dependencies = [ - "getrandom 0.2.6", + "getrandom", ] [[package]] @@ -2694,15 +2469,6 @@ dependencies = [ "rand_core 0.3.1", ] -[[package]] -name = "rand_hc" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" -dependencies = [ - "rand_core 0.5.1", -] - [[package]] name = "rand_isaac" version = "0.1.1" @@ -2748,15 +2514,6 @@ dependencies = [ "rand_core 0.4.2", ] -[[package]] -name = "rand_pcg" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" -dependencies = [ - "rand_core 0.5.1", -] - [[package]] name = "rand_xorshift" version = "0.1.1" @@ -2769,17 +2526,20 @@ dependencies = [ [[package]] name = "rauth" version = "1.0.0" -source = "git+https://github.com/insertish/rauth?rev=001a9698c56cea79e69e4ae71d7bc2cb48aec1a6#001a9698c56cea79e69e4ae71d7bc2cb48aec1a6" +source = "git+https://github.com/insertish/rauth?rev=a82cb5d23da4787e75d6f3c795189ce31e1590c4#a82cb5d23da4787e75d6f3c795189ce31e1590c4" dependencies = [ "async-std", + "async-trait", "base32", + "bson", "chrono", "futures", "handlebars", - "json", + "iso8601-timestamp", "lazy_static", "lettre", - "mongodb 1.2.5", + "log", + "mongodb", "nanoid", "okapi", "rand 0.8.5", @@ -2792,9 +2552,8 @@ dependencies = [ "serde", "serde_json", "totp-lite", - "ulid 0.4.1", - "validator", - "wither", + "ulid 0.5.0", + "validator 0.15.0", ] [[package]] @@ -2890,7 +2649,7 @@ checksum = "a043824e29c94169374ac5183ac0ed43f5724dc4556b19568007486bd840fa1f" dependencies = [ "proc-macro2", "quote 1.0.18", - "syn 1.0.95", + "syn 1.0.96", ] [[package]] @@ -2971,7 +2730,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00" dependencies = [ "hostname", - "quick-error 1.2.3", + "quick-error", ] [[package]] @@ -3011,11 +2770,9 @@ dependencies = [ "lru", "mobc", "mobc-redis", - "mongodb 1.2.5", "nanoid", "num_enum", "once_cell", - "rauth", "redis 0.21.5", "regex", "reqwest", @@ -3024,12 +2781,13 @@ dependencies = [ "rocket_cors", "rocket_empty", "rocket_okapi", + "rocket_rauth", "schemars", "serde", "serde_json", "ulid 0.4.1", "url", - "validator", + "validator 0.14.0", ] [[package]] @@ -3042,7 +2800,7 @@ dependencies = [ "base64 0.13.0", "bincode", "bitfield", - "bson 2.2.0", + "bson", "deadqueue", "dotenv", "futures", @@ -3051,7 +2809,7 @@ dependencies = [ "lazy_static", "linkify 0.8.1", "log", - "mongodb 2.2.1", + "mongodb", "nanoid", "num_enum", "okapi", @@ -3070,7 +2828,7 @@ dependencies = [ "serde", "serde_json", "ulid 0.5.0", - "validator", + "validator 0.14.0", "web-push", ] @@ -3113,9 +2871,9 @@ dependencies = [ [[package]] name = "rocket" -version = "0.5.0-rc.1" +version = "0.5.0-rc.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a71c18c42a0eb15bf3816831caf0dad11e7966f2a41aaf486a701979c4dd1f2" +checksum = "98ead083fce4a405feb349cf09abdf64471c6077f14e0ce59364aa90d4b99317" dependencies = [ "async-stream", "async-trait", @@ -3131,7 +2889,7 @@ dependencies = [ "memchr", "multer", "num_cpus", - "parking_lot 0.11.2", + "parking_lot", "pin-project-lite 0.2.9", "rand 0.8.5", "ref-cast", @@ -3141,10 +2899,10 @@ dependencies = [ "serde_json", "state", "tempfile", - "time 0.2.27", + "time 0.3.9", "tokio 1.18.2", "tokio-stream", - "tokio-util 0.6.10", + "tokio-util 0.7.2", "ubyte", "version_check", "yansi", @@ -3152,9 +2910,9 @@ dependencies = [ [[package]] name = "rocket_codegen" -version = "0.5.0-rc.1" +version = "0.5.0-rc.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66f5fa462f7eb958bba8710c17c5d774bbbd59809fa76fb1957af7e545aea8bb" +checksum = "d6aeb6bb9c61e9cd2c00d70ea267bf36f76a4cc615e5908b349c2f9d93999b47" dependencies = [ "devise", "glob", @@ -3162,7 +2920,7 @@ dependencies = [ "proc-macro2", "quote 1.0.18", "rocket_http", - "syn 1.0.95", + "syn 1.0.96", "unicode-xid 0.2.3", ] @@ -3184,7 +2942,7 @@ dependencies = [ [[package]] name = "rocket_empty" version = "0.1.0" -source = "git+https://github.com/insertish/rocket_empty?branch=rc1#5b987e4d5090d28c6658aca25f09f7458e0de0fe" +source = "git+https://github.com/insertish/rocket_empty?branch=master#9d8234fc3bb215ea241b787301e8cff68ae53652" dependencies = [ "okapi", "rocket", @@ -3193,19 +2951,18 @@ dependencies = [ [[package]] name = "rocket_http" -version = "0.5.0-rc.1" +version = "0.5.0-rc.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23c8b7d512d2fcac2316ebe590cde67573844b99e6cc9ee0f53375fa16e25ebd" +checksum = "2ded65d127954de3c12471630bf4b81a2792f065984461e65b91d0fdaafc17a2" dependencies = [ "cookie", "either", + "futures", "http", "hyper 0.14.19", "indexmap", "log", "memchr", - "mime", - "parking_lot 0.11.2", "pear", "percent-encoding", "pin-project-lite 0.2.9", @@ -3214,7 +2971,7 @@ dependencies = [ "smallvec", "stable-pattern", "state", - "time 0.2.27", + "time 0.3.9", "tokio 1.18.2", "uncased", ] @@ -3222,7 +2979,7 @@ dependencies = [ [[package]] name = "rocket_okapi" version = "0.8.0-rc.1" -source = "git+https://github.com/insertish/okapi?rev=dcf0df115596ee07a587a7a543cddf3d7944645b#dcf0df115596ee07a587a7a543cddf3d7944645b" +source = "git+https://github.com/insertish/okapi?rev=a1048d0c8cd771e424ec97d33d825c32e06aa120#a1048d0c8cd771e424ec97d33d825c32e06aa120" dependencies = [ "either", "log", @@ -3237,20 +2994,34 @@ dependencies = [ [[package]] name = "rocket_okapi_codegen" version = "0.8.0-rc.1" -source = "git+https://github.com/insertish/okapi?rev=dcf0df115596ee07a587a7a543cddf3d7944645b#dcf0df115596ee07a587a7a543cddf3d7944645b" +source = "git+https://github.com/insertish/okapi?rev=a1048d0c8cd771e424ec97d33d825c32e06aa120#a1048d0c8cd771e424ec97d33d825c32e06aa120" dependencies = [ - "darling 0.13.4", + "darling", "proc-macro2", "quote 1.0.18", "rocket_http", - "syn 1.0.95", + "syn 1.0.96", +] + +[[package]] +name = "rocket_rauth" +version = "1.0.0" +source = "git+https://github.com/insertish/rauth?rev=a82cb5d23da4787e75d6f3c795189ce31e1590c4#a82cb5d23da4787e75d6f3c795189ce31e1590c4" +dependencies = [ + "okapi", + "rauth", + "rocket", + "rocket_empty", + "rocket_okapi", + "schemars", + "serde", ] [[package]] name = "rust-argon2" -version = "0.8.3" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b18820d944b33caa75a71378964ac46f58517c92b6ae5f762636247c09e78fb" +checksum = "b50162d19404029c1ceca6f6980fe40d45c8b369f6f44446fa14bb39573b5bb9" dependencies = [ "base64 0.13.0", "blake2b_simd", @@ -3292,19 +3063,6 @@ dependencies = [ "semver 0.9.0", ] -[[package]] -name = "rustls" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0d4a31f5d68413404705d6982529b0e11a9aacd4839d1d6222ee3b8cb4015e1" -dependencies = [ - "base64 0.11.0", - "log", - "ring", - "sct 0.6.1", - "webpki 0.21.4", -] - [[package]] name = "rustls" version = "0.20.6" @@ -3313,17 +3071,8 @@ checksum = "5aab8ee6c7097ed6057f43c187a62418d0c05a4bd5f18b3571db50ee0f9ce033" dependencies = [ "log", "ring", - "sct 0.7.0", - "webpki 0.22.0", -] - -[[package]] -name = "rustls-pemfile" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5eebeaeb360c87bfb72e84abdb3447159c0eaececf1bef2aecd65a8be949d1c9" -dependencies = [ - "base64 0.13.0", + "sct", + "webpki", ] [[package]] @@ -3385,7 +3134,7 @@ dependencies = [ "proc-macro2", "quote 1.0.18", "serde_derive_internals", - "syn 1.0.95", + "syn 1.0.96", ] [[package]] @@ -3400,16 +3149,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" -[[package]] -name = "sct" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce" -dependencies = [ - "ring", - "untrusted 0.7.1", -] - [[package]] name = "sct" version = "0.7.0" @@ -3534,7 +3273,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "825fd3382e2397007499a910e0184e55f7837cb0df4af30ae62bd2123e2ebcd6" dependencies = [ "debugid", - "getrandom 0.2.6", + "getrandom", "hex", "serde", "serde_json", @@ -3570,7 +3309,7 @@ checksum = "1f26faba0c3959972377d3b2d306ee9f71faee9714294e41bb777f83f88578be" dependencies = [ "proc-macro2", "quote 1.0.18", - "syn 1.0.95", + "syn 1.0.96", ] [[package]] @@ -3581,7 +3320,7 @@ checksum = "85bf8229e7920a9f636479437026331ce11aa132b4dde37d121944a44d6e5f3c" dependencies = [ "proc-macro2", "quote 1.0.18", - "syn 1.0.95", + "syn 1.0.96", ] [[package]] @@ -3624,10 +3363,10 @@ version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e182d6ec6f05393cc0e5ed1bf81ad6db3a8feedf8ee515ecdd369809bcce8082" dependencies = [ - "darling 0.13.4", + "darling", "proc-macro2", "quote 1.0.18", - "syn 1.0.95", + "syn 1.0.96", ] [[package]] @@ -3642,19 +3381,6 @@ dependencies = [ "opaque-debug 0.2.3", ] -[[package]] -name = "sha-1" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99cd6713db3cf16b6c84e06321e049a9b9f699826e16096d23bbcc44d15d51a6" -dependencies = [ - "block-buffer 0.9.0", - "cfg-if 1.0.0", - "cpufeatures", - "digest 0.9.0", - "opaque-debug 0.3.0", -] - [[package]] name = "sha-1" version = "0.10.0" @@ -3681,19 +3407,6 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012" -[[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" @@ -3787,15 +3500,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "standback" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e113fb6f3de07a243d434a56ec6f186dfd51cb08448239fe7bcae73f87ff28ff" -dependencies = [ - "version_check", -] - [[package]] name = "state" version = "0.5.3" @@ -3805,55 +3509,6 @@ dependencies = [ "loom", ] -[[package]] -name = "stdweb" -version = "0.4.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d022496b16281348b52d0e30ae99e01a73d737b2f45d38fed4edf79f9325a1d5" -dependencies = [ - "discard", - "rustc_version 0.2.3", - "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", - "quote 1.0.18", - "serde", - "serde_derive", - "syn 1.0.95", -] - -[[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", - "quote 1.0.18", - "serde", - "serde_derive", - "serde_json", - "sha1", - "syn 1.0.95", -] - -[[package]] -name = "stdweb-internal-runtime" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "213701ba3370744dcd1a12960caa4843b3d68b4d1c0a5d575e0d65b2ee9d16c0" - [[package]] name = "stringprep" version = "0.1.2" @@ -3864,12 +3519,6 @@ dependencies = [ "unicode-normalization", ] -[[package]] -name = "strsim" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c" - [[package]] name = "strsim" version = "0.10.0" @@ -3895,9 +3544,9 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.95" +version = "1.0.96" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbaf6116ab8924f39d52792136fb74fd60a80194cf1b1c6ffa6453eef1c3f942" +checksum = "0748dd251e24453cb8717f0354206b91557e4ec8703673a4b30208f2abaf1ebf" dependencies = [ "proc-macro2", "quote 1.0.18", @@ -3913,18 +3562,6 @@ dependencies = [ "unicode-xid 0.0.4", ] -[[package]] -name = "synstructure" -version = "0.12.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" -dependencies = [ - "proc-macro2", - "quote 1.0.18", - "syn 1.0.95", - "unicode-xid 0.2.3", -] - [[package]] name = "take_mut" version = "0.2.2" @@ -3971,7 +3608,7 @@ checksum = "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a" dependencies = [ "proc-macro2", "quote 1.0.18", - "syn 1.0.95", + "syn 1.0.96", ] [[package]] @@ -3994,21 +3631,6 @@ dependencies = [ "winapi 0.3.9", ] -[[package]] -name = "time" -version = "0.2.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4752a97f8eebd6854ff91f1c1824cd6160626ac4bd44287f7f4ea2035a02a242" -dependencies = [ - "const_fn", - "libc", - "standback", - "stdweb", - "time-macros 0.1.1", - "version_check", - "winapi 0.3.9", -] - [[package]] name = "time" version = "0.3.9" @@ -4018,17 +3640,7 @@ dependencies = [ "itoa 1.0.2", "libc", "num_threads", - "time-macros 0.2.4", -] - -[[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", + "time-macros", ] [[package]] @@ -4037,19 +3649,6 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42657b1a6f4d817cda8e7a0ace261fe0cc946cf3a80314390b22cc61ae080792" -[[package]] -name = "time-macros-impl" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd3c141a1b43194f3f56a1411225df8646c55781d5f26db825b3d98507eb482f" -dependencies = [ - "proc-macro-hack", - "proc-macro2", - "quote 1.0.18", - "standback", - "syn 1.0.95", -] - [[package]] name = "tinyvec" version = "1.6.0" @@ -4080,7 +3679,6 @@ dependencies = [ "mio 0.6.23", "pin-project-lite 0.1.12", "slab", - "tokio-macros 0.2.6", ] [[package]] @@ -4098,21 +3696,10 @@ dependencies = [ "pin-project-lite 0.2.9", "signal-hook-registry", "socket2 0.4.4", - "tokio-macros 1.7.0", + "tokio-macros", "winapi 0.3.9", ] -[[package]] -name = "tokio-macros" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e44da00bfc73a25f814cd8d7e57a68a5c31b74b3152a0a1d1f590c97ed06265a" -dependencies = [ - "proc-macro2", - "quote 1.0.18", - "syn 1.0.95", -] - [[package]] name = "tokio-macros" version = "1.7.0" @@ -4121,7 +3708,7 @@ checksum = "b557f72f448c511a979e2564e55d74e6c4432fc96ff4f6241bc6bded342643b7" dependencies = [ "proc-macro2", "quote 1.0.18", - "syn 1.0.95", + "syn 1.0.96", ] [[package]] @@ -4134,27 +3721,15 @@ dependencies = [ "tokio 1.18.2", ] -[[package]] -name = "tokio-rustls" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15cb62a0d2770787abc96e99c1cd98fcf17f94959f3af63ca85bdfb203f051b4" -dependencies = [ - "futures-core", - "rustls 0.17.0", - "tokio 0.2.25", - "webpki 0.21.4", -] - [[package]] name = "tokio-rustls" version = "0.23.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" dependencies = [ - "rustls 0.20.6", + "rustls", "tokio 1.18.2", - "webpki 0.22.0", + "webpki", ] [[package]] @@ -4232,14 +3807,14 @@ dependencies = [ [[package]] name = "totp-lite" -version = "1.0.3" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b18009e8be74bfb2e2cc59a63d078d95c042858a1ca1128a294e1f9ce225148b" +checksum = "5cc496875d9c8fe9a0ce19e3ee8e8808c60376831a439543f0aac71c9dd129fa" dependencies = [ - "digest 0.9.0", - "hmac 0.11.0", - "sha-1 0.9.8", - "sha2 0.9.9", + "digest 0.10.3", + "hmac", + "sha-1 0.10.0", + "sha2", ] [[package]] @@ -4269,7 +3844,7 @@ checksum = "cc6b8ad3567499f98a1db7a752b07a7c8c7c7c34c332ec00effb2b0027974b7c" dependencies = [ "proc-macro2", "quote 1.0.18", - "syn 1.0.95", + "syn 1.0.96", ] [[package]] @@ -4321,27 +3896,6 @@ dependencies = [ "tracing-log", ] -[[package]] -name = "trust-dns-proto" -version = "0.19.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cad71a0c0d68ab9941d2fb6e82f8fb2e86d9945b94e1661dd0aaea2b88215a9" -dependencies = [ - "async-trait", - "backtrace", - "cfg-if 1.0.0", - "enum-as-inner 0.3.4", - "futures", - "idna", - "lazy_static", - "log", - "rand 0.7.3", - "smallvec", - "thiserror", - "tokio 0.2.25", - "url", -] - [[package]] name = "trust-dns-proto" version = "0.21.2" @@ -4351,7 +3905,7 @@ dependencies = [ "async-trait", "cfg-if 1.0.0", "data-encoding", - "enum-as-inner 0.4.0", + "enum-as-inner", "futures-channel", "futures-io", "futures-util", @@ -4367,25 +3921,6 @@ dependencies = [ "url", ] -[[package]] -name = "trust-dns-resolver" -version = "0.19.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "710f593b371175db53a26d0b38ed2978fafb9e9e8d3868b1acd753ea18df0ceb" -dependencies = [ - "cfg-if 0.1.10", - "futures", - "ipconfig 0.2.2", - "lazy_static", - "log", - "lru-cache", - "resolv-conf", - "smallvec", - "thiserror", - "tokio 0.2.25", - "trust-dns-proto 0.19.7", -] - [[package]] name = "trust-dns-resolver" version = "0.21.2" @@ -4394,16 +3929,16 @@ checksum = "e4ba72c2ea84515690c9fcef4c6c660bb9df3036ed1051686de84605b74fd558" dependencies = [ "cfg-if 1.0.0", "futures-util", - "ipconfig 0.3.0", + "ipconfig", "lazy_static", "log", "lru-cache", - "parking_lot 0.12.1", + "parking_lot", "resolv-conf", "smallvec", "thiserror", "tokio 1.18.2", - "trust-dns-proto 0.21.2", + "trust-dns-proto", ] [[package]] @@ -4431,17 +3966,6 @@ dependencies = [ "utf-8", ] -[[package]] -name = "typed-builder" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc955f27acc7a547f328f52f4a5a568986a31efec2fc6de865279f3995787b9" -dependencies = [ - "proc-macro2", - "quote 1.0.18", - "syn 1.0.95", -] - [[package]] name = "typed-builder" version = "0.10.0" @@ -4450,7 +3974,7 @@ checksum = "89851716b67b937e393b3daa8423e67ddfc4bbbf1654bcf05488e95e0828db0c" dependencies = [ "proc-macro2", "quote 1.0.18", - "syn 1.0.95", + "syn 1.0.96", ] [[package]] @@ -4566,6 +4090,16 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "957e51f3646910546462e67d5f7599b9e4fb8acdd304b087a6494730f9eebf04" +[[package]] +name = "universal-hash" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05" +dependencies = [ + "generic-array 0.14.5", + "subtle", +] + [[package]] name = "untrusted" version = "0.6.2" @@ -4603,7 +4137,7 @@ version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" dependencies = [ - "getrandom 0.2.6", + "getrandom", "serde", ] @@ -4624,6 +4158,21 @@ dependencies = [ "validator_types", ] +[[package]] +name = "validator" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f07b0a1390e01c0fc35ebb26b28ced33c9a3808f7f9fbe94d3cc01e233bfeed5" +dependencies = [ + "idna", + "lazy_static", + "regex", + "serde", + "serde_derive", + "serde_json", + "url", +] + [[package]] name = "validator_derive" version = "0.14.0" @@ -4636,7 +4185,7 @@ dependencies = [ "proc-macro2", "quote 1.0.18", "regex", - "syn 1.0.95", + "syn 1.0.96", "validator_types", ] @@ -4647,7 +4196,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ded9d97e1d42327632f5f3bae6403c04886e2de3036261ef42deebd931a6a291" dependencies = [ "proc-macro2", - "syn 1.0.95", + "syn 1.0.96", ] [[package]] @@ -4694,12 +4243,6 @@ dependencies = [ "try-lock", ] -[[package]] -name = "wasi" -version = "0.9.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" - [[package]] name = "wasi" version = "0.10.0+wasi-snapshot-preview1" @@ -4733,7 +4276,7 @@ dependencies = [ "log", "proc-macro2", "quote 1.0.18", - "syn 1.0.95", + "syn 1.0.96", "wasm-bindgen-shared", ] @@ -4767,7 +4310,7 @@ checksum = "99ec0dc7a4756fffc231aab1b9f2f578d23cd391390ab27f952ae0c9b3ece20b" dependencies = [ "proc-macro2", "quote 1.0.18", - "syn 1.0.95", + "syn 1.0.96", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -4813,16 +4356,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "webpki" -version = "0.21.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea" -dependencies = [ - "ring", - "untrusted 0.7.1", -] - [[package]] name = "webpki" version = "0.22.0" @@ -4833,22 +4366,13 @@ dependencies = [ "untrusted 0.7.1", ] -[[package]] -name = "webpki-roots" -version = "0.21.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aabe153544e473b775453675851ecc86863d2a81d786d741f6b76778f2a48940" -dependencies = [ - "webpki 0.21.4", -] - [[package]] name = "webpki-roots" version = "0.22.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44d8de8415c823c8abd270ad483c6feeac771fad964890779f9a8cb24fbbc1bf" dependencies = [ - "webpki 0.22.0", + "webpki", ] [[package]] @@ -4860,12 +4384,6 @@ dependencies = [ "cc", ] -[[package]] -name = "widestring" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c168940144dd21fd8046987c16a46a33d5fc84eec29ef9dcddc2ac9e31526b7c" - [[package]] name = "widestring" version = "0.5.1" @@ -4958,15 +4476,6 @@ version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" -[[package]] -name = "winreg" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2986deb581c4fe11b621998a5e53361efe6b48a151178d0cd9eeffa4dc6acc9" -dependencies = [ - "winapi 0.3.9", -] - [[package]] name = "winreg" version = "0.7.0" @@ -4985,37 +4494,6 @@ dependencies = [ "winapi 0.3.9", ] -[[package]] -name = "wither" -version = "0.9.0" -source = "git+https://github.com/insertish/wither?rev=25226946ff9a2cafac390968b317df83eaafe31f#25226946ff9a2cafac390968b317df83eaafe31f" -dependencies = [ - "async-trait", - "chrono", - "futures", - "log", - "mongodb 1.2.5", - "serde", - "thiserror", - "ulid 0.4.1", - "wither_derive", -] - -[[package]] -name = "wither_derive" -version = "0.9.0" -source = "git+https://github.com/insertish/wither?rev=25226946ff9a2cafac390968b317df83eaafe31f#25226946ff9a2cafac390968b317df83eaafe31f" -dependencies = [ - "Inflector", - "async-trait", - "darling 0.10.2", - "proc-macro-error", - "proc-macro2", - "quote 1.0.18", - "serde", - "syn 1.0.95", -] - [[package]] name = "ws2_32-sys" version = "0.2.1" diff --git a/crates/delta/Cargo.toml b/crates/delta/Cargo.toml index 1d381024..dcc140a7 100644 --- a/crates/delta/Cargo.toml +++ b/crates/delta/Cargo.toml @@ -44,7 +44,6 @@ async-std = { version = "1.8.0", features = ["tokio1", "tokio02", "attributes"] # internal util lettre = "0.10.0-alpha.4" -rauth = { git = "https://github.com/insertish/rauth", rev = "001a9698c56cea79e69e4ae71d7bc2cb48aec1a6" } # redis redis = { version = "0.21.2", features = ["async-std-comp"] } @@ -52,15 +51,15 @@ mobc = { version = "0.7.3" } mobc-redis = { version = "0.7.0", default-features = false, features = ["async-std-comp"] } # web -rocket_empty = { git = "https://github.com/insertish/rocket_empty", branch = "rc1" } -rocket = { version = "0.5.0-rc.1", default-features = false, features = ["json"] } -mongodb = { version = "1.2.2", features = ["async-std-runtime"], default-features = false } +rocket = { version = "0.5.0-rc.2", default-features = false, features = ["json"] } +rocket_empty = { git = "https://github.com/insertish/rocket_empty", branch = "master" } +rocket_rauth = { git = "https://github.com/insertish/rauth", rev = "a82cb5d23da4787e75d6f3c795189ce31e1590c4" } rocket_cors = { git = "https://github.com/lawliet89/rocket_cors", rev = "5843861a88958c16bfaa0b40f0d8910772bcd2f6" } # spec generation schemars = "0.8.8" # rocket_okapi = "0.8.0-rc.1" -rocket_okapi = { git = "https://github.com/insertish/okapi", rev = "dcf0df115596ee07a587a7a543cddf3d7944645b", features = [ "swagger" ] } +rocket_okapi = { git = "https://github.com/insertish/okapi", rev = "a1048d0c8cd771e424ec97d33d825c32e06aa120", features = [ "swagger" ] } # quark revolt-quark = { path = "../quark" } diff --git a/crates/delta/src/main.rs b/crates/delta/src/main.rs index e48eb494..d85dacdd 100644 --- a/crates/delta/src/main.rs +++ b/crates/delta/src/main.rs @@ -13,10 +13,10 @@ pub mod util; pub mod version; use log::info; -use rauth::{ - config::{Captcha, Config, EmailVerification, SMTPSettings, Template, Templates}, - logic::Auth, +use revolt_quark::rauth::config::{ + Captcha, Config, EmailVerificationConfig, SMTPSettings, Template, Templates, }; +use revolt_quark::rauth::RAuth; use revolt_quark::variables::delta::{ APP_URL, HCAPTCHA_KEY, INVITE_ONLY, SMTP_FROM, SMTP_HOST, SMTP_PASSWORD, SMTP_USERNAME, USE_EMAIL, USE_HCAPTCHA, @@ -25,8 +25,8 @@ use revolt_quark::DatabaseInfo; use rocket_cors::AllowedOrigins; use std::str::FromStr; -#[async_std::main] -async fn main() { +#[launch] +async fn rocket() -> _ { let _guard = revolt_quark::setup_logging(); info!( @@ -58,7 +58,7 @@ async fn main() { let mut config = Config { email_verification: if *USE_EMAIL { - EmailVerification::Enabled { + EmailVerificationConfig::Enabled { smtp: SMTPSettings { from: (*SMTP_FROM).to_string(), host: (*SMTP_HOST).to_string(), @@ -86,7 +86,7 @@ async fn main() { }, } } else { - EmailVerification::Disabled + EmailVerificationConfig::Disabled }, ..Default::default() }; @@ -101,23 +101,20 @@ async fn main() { }; } + // Setup database let db = DatabaseInfo::Auto.connect().await.unwrap(); db.migrate_database().await.unwrap(); - // This is entirely temporary code until rauth is migrated to quark. - // (and / or otherwise gets updated to MongoDB v2 driver) - let mongo_db = mongodb::Client::with_uri_str( - &std::env::var("MONGODB").unwrap_or_else(|_| "mongodb://localhost".to_string()), - ) - .await - .expect("Failed to init db connection."); - - rauth::entities::sync_models(&mongo_db.database("revolt")).await; + // Setup rAuth + let rauth = RAuth { + database: db.clone().into(), + config, + }; // Launch background task workers. async_std::task::spawn(revolt_quark::tasks::start_workers(db.clone())); - let auth = Auth::new(mongo_db.database("revolt"), config); + // Configure Rocket let rocket = rocket::build(); routes::mount(rocket) .mount("/", rocket_cors::catch_all_options_routes()) @@ -129,14 +126,11 @@ async fn main() { ..Default::default() }), ) - .manage(auth) + .manage(rauth) .manage(db) .manage(cors.clone()) .attach(util::ratelimiter::RatelimitFairing) .attach(cors) - .launch() - .await - .unwrap(); } /// Resolve asset diff --git a/crates/delta/src/routes/mod.rs b/crates/delta/src/routes/mod.rs index fc8aad7b..830b7388 100644 --- a/crates/delta/src/routes/mod.rs +++ b/crates/delta/src/routes/mod.rs @@ -25,8 +25,9 @@ pub fn mount(mut rocket: Rocket) -> Rocket { "/channels" => channels::routes(), "/servers" => servers::routes(), "/invites" => invites::routes(), - "/auth/account" => rauth::web::account::routes(), - "/auth/session" => rauth::web::session::routes(), + "/auth/account" => rocket_rauth::routes::account::routes(), + "/auth/session" => rocket_rauth::routes::session::routes(), + "/auth/mfa" => rocket_rauth::routes::mfa::routes(), "/onboard" => onboard::routes(), "/push" => push::routes(), "/sync" => sync::routes(), diff --git a/crates/delta/src/routes/onboard/complete.rs b/crates/delta/src/routes/onboard/complete.rs index 97d31a28..b8388304 100644 --- a/crates/delta/src/routes/onboard/complete.rs +++ b/crates/delta/src/routes/onboard/complete.rs @@ -1,7 +1,6 @@ use crate::util::regex::RE_USERNAME; -use revolt_quark::{models::User, Database, EmptyResponse, Error, Result}; +use revolt_quark::{models::User, rauth::models::Session, Database, EmptyResponse, Error, Result}; -use rauth::entities::Session; use rocket::{serde::json::Json, State}; use serde::{Deserialize, Serialize}; use validator::Validate; diff --git a/crates/delta/src/routes/onboard/hello.rs b/crates/delta/src/routes/onboard/hello.rs index d1651338..55bf5cf2 100644 --- a/crates/delta/src/routes/onboard/hello.rs +++ b/crates/delta/src/routes/onboard/hello.rs @@ -1,5 +1,4 @@ -use rauth::entities::Session; -use revolt_quark::models::User; +use revolt_quark::{models::User, rauth::models::Session}; use rocket::serde::json::Json; use serde::Serialize; diff --git a/crates/delta/src/routes/push/subscribe.rs b/crates/delta/src/routes/push/subscribe.rs index f5125f82..098c119d 100644 --- a/crates/delta/src/routes/push/subscribe.rs +++ b/crates/delta/src/routes/push/subscribe.rs @@ -1,9 +1,11 @@ -use revolt_quark::{EmptyResponse, Error, Result}; - -use rauth::{ - entities::{Model, Session, WebPushSubscription}, - logic::Auth, +use revolt_quark::{ + rauth::{ + models::{Session, WebPushSubscription}, + RAuth, + }, + EmptyResponse, Error, Result, }; + use rocket::{serde::json::Json, State}; /// # Push Subscribe @@ -14,13 +16,13 @@ use rocket::{serde::json::Json, State}; #[openapi(tag = "Web Push")] #[post("/subscribe", data = "")] pub async fn req( - auth: &State, + rauth: &State, mut session: Session, data: Json, ) -> Result { session.subscription = Some(data.into_inner()); session - .save(&auth.db, None) + .save(&rauth) .await .map(|_| EmptyResponse) .map_err(|_| Error::DatabaseError { diff --git a/crates/delta/src/routes/push/unsubscribe.rs b/crates/delta/src/routes/push/unsubscribe.rs index 141e72a7..117173e6 100644 --- a/crates/delta/src/routes/push/unsubscribe.rs +++ b/crates/delta/src/routes/push/unsubscribe.rs @@ -1,9 +1,8 @@ -use revolt_quark::{EmptyResponse, Error, Result}; - -use rauth::{ - entities::{Model, Session}, - logic::Auth, +use revolt_quark::{ + rauth::{models::Session, RAuth}, + EmptyResponse, Error, Result, }; + use rocket::State; /// # Unsubscribe @@ -11,10 +10,10 @@ use rocket::State; /// Remove the Web Push subscription associated with the current session. #[openapi(tag = "Web Push")] #[post("/unsubscribe")] -pub async fn req(auth: &State, mut session: Session) -> Result { +pub async fn req(rauth: &State, mut session: Session) -> Result { session.subscription = None; session - .save(&auth.db, None) + .save(&rauth) .await .map(|_| EmptyResponse) .map_err(|_| Error::DatabaseError { diff --git a/crates/delta/src/routes/sync/set_settings.rs b/crates/delta/src/routes/sync/set_settings.rs index d4795c9b..e86f9fcd 100644 --- a/crates/delta/src/routes/sync/set_settings.rs +++ b/crates/delta/src/routes/sync/set_settings.rs @@ -1,5 +1,5 @@ use revolt_quark::models::User; -use revolt_quark::r#impl::generic::users::user_settings::UserSettingsImpl; +use revolt_quark::r#impl::UserSettingsImpl; use revolt_quark::{Db, EmptyResponse, Result}; use chrono::prelude::*; diff --git a/crates/delta/src/routes/users/change_username.rs b/crates/delta/src/routes/users/change_username.rs index fa2bfde7..512e00cf 100644 --- a/crates/delta/src/routes/users/change_username.rs +++ b/crates/delta/src/routes/users/change_username.rs @@ -1,6 +1,5 @@ use crate::util::regex::RE_USERNAME; -use rauth::entities::Account; -use revolt_quark::{models::User, Database, Error, Result}; +use revolt_quark::{models::User, rauth::models::Account, Database, Error, Result}; use rocket::{serde::json::Json, State}; use serde::{Deserialize, Serialize}; use validator::Validate; diff --git a/crates/delta/src/util/idempotency.rs b/crates/delta/src/util/idempotency.rs index 74dfeb40..8a035056 100644 --- a/crates/delta/src/util/idempotency.rs +++ b/crates/delta/src/util/idempotency.rs @@ -1,5 +1,4 @@ use async_std::sync::Mutex; -use mongodb::bson::doc; use revolt_quark::{Error, Result}; use rocket::http::Status; use rocket::request::{FromRequest, Outcome}; diff --git a/crates/delta/src/util/ratelimiter.rs b/crates/delta/src/util/ratelimiter.rs index 85b45778..3f276443 100644 --- a/crates/delta/src/util/ratelimiter.rs +++ b/crates/delta/src/util/ratelimiter.rs @@ -8,6 +8,7 @@ use std::hash::Hasher; use std::ops::Add; use std::time::{Duration, SystemTime, UNIX_EPOCH}; +use revolt_quark::rauth::models::Session; use rocket::fairing::{Fairing, Info, Kind}; use rocket::http::uri::Origin; use rocket::http::{Method, Status}; @@ -207,10 +208,9 @@ impl<'r> FromRequest<'r> for Ratelimiter { let ratelimiter = request .local_cache_async(async { use rocket::outcome::Outcome; - let identifier = if let Outcome::Success(session) = - request.guard::().await + let identifier = if let Outcome::Success(session) = request.guard::().await { - session.id.expect("`id` on User") + session.id } else { to_real_ip(request) }; diff --git a/crates/quark/Cargo.toml b/crates/quark/Cargo.toml index 2c7483f3..0c335ac1 100644 --- a/crates/quark/Cargo.toml +++ b/crates/quark/Cargo.toml @@ -8,8 +8,9 @@ edition = "2021" [features] mongo = [ "mongodb" ] -rocket_impl = [ "rocket", "rocket_empty" ] -test = [ "async-std", "mongo", "mongodb/async-std-runtime", "rocket_impl", "rauth" ] +rocket_impl = [ "rocket", "rocket_empty", "rauth/database-mongodb", "rauth/rocket_impl", "rauth/okapi_impl" ] + +test = [ "async-std", "mongo", "mongodb/async-std-runtime", "rocket_impl" ] default = [ "test" ] [dependencies] @@ -26,8 +27,8 @@ bson = { version = "2.1.0", features = ["chrono-0_4"] } # Spec Generation schemars = "0.8.8" -okapi = { git = "https://github.com/insertish/okapi", rev = "dcf0df115596ee07a587a7a543cddf3d7944645b" } -rocket_okapi = { git = "https://github.com/insertish/okapi", rev = "dcf0df115596ee07a587a7a543cddf3d7944645b" } +okapi = { git = "https://github.com/insertish/okapi", rev = "a1048d0c8cd771e424ec97d33d825c32e06aa120" } +rocket_okapi = { git = "https://github.com/insertish/okapi", rev = "a1048d0c8cd771e424ec97d33d825c32e06aa120" } # okapi = "0.7.0-rc.1" # rocket_okapi = "0.8.0-rc.1" @@ -63,10 +64,12 @@ base64 = "0.13.0" web-push = "0.7.2" # Implementations -rauth = { optional = true, git = "https://github.com/insertish/rauth", rev = "001a9698c56cea79e69e4ae71d7bc2cb48aec1a6" } -rocket = { optional = true, version = "=0.5.0-rc.1", default-features = false, features = ["json"] } -rocket_http = { optional = true, version = "=0.5.0-rc.1" } -rocket_empty = { optional = true, git = "https://github.com/insertish/rocket_empty", branch = "rc1" } +rocket_http = { optional = true, version = "0.5.0-rc.2" } +rocket = { optional = true, version = "0.5.0-rc.2", default-features = false, features = ["json"] } +rocket_empty = { optional = true, git = "https://github.com/insertish/rocket_empty", branch = "master" } + +# rAuth +rauth = { git = "https://github.com/insertish/rauth", rev = "a82cb5d23da4787e75d6f3c795189ce31e1590c4", features = [ "async-std-runtime" ] } # Sentry sentry = "0.25.0" diff --git a/crates/quark/src/database.rs b/crates/quark/src/database.rs index ecdf13c2..1a0b382a 100644 --- a/crates/quark/src/database.rs +++ b/crates/quark/src/database.rs @@ -1,8 +1,7 @@ use std::env; use std::ops::Deref; -use crate::r#impl::dummy::DummyDb; -use crate::r#impl::mongo::MongoDb; +use crate::r#impl::{DummyDb, MongoDb}; use crate::AbstractDatabase; /// Database information to use to create a client @@ -61,3 +60,14 @@ impl Deref for Database { } } } + +impl From for rauth::Database { + fn from(val: Database) -> Self { + match val { + Database::Dummy(_) => rauth::Database::default(), + Database::MongoDb(MongoDb(client)) => { + rauth::Database::MongoDb(rauth::database::MongoDb(client.database("revolt"))) + } + } + } +} diff --git a/crates/quark/src/impl/generic/users/user.rs b/crates/quark/src/impl/generic/users/user.rs index 21f4972f..3063593c 100644 --- a/crates/quark/src/impl/generic/users/user.rs +++ b/crates/quark/src/impl/generic/users/user.rs @@ -8,9 +8,6 @@ use crate::{perms, Database, Error, Result}; use futures::try_join; use impl_ops::impl_op_ex_commutative; -use okapi::openapi3::{SecurityScheme, SecuritySchemeData}; -use rocket_okapi::gen::OpenApiGenerator; -use rocket_okapi::request::{OpenApiFromRequest, RequestHeaderInput}; use std::ops; impl_op_ex_commutative!(+ |a: &i32, b: &Badges| -> i32 { *a | *b as i32 }); @@ -359,72 +356,3 @@ impl User { } } } - -use rauth::entities::Session; -use rocket::http::Status; -use rocket::request::{self, FromRequest, Outcome, Request}; - -#[rocket::async_trait] -impl<'r> FromRequest<'r> for User { - type Error = rauth::util::Error; - - async fn from_request(request: &'r Request<'_>) -> request::Outcome { - let user: &Option = request - .local_cache_async(async { - let db = request - .rocket() - .state::() - .expect("Database state not reachable!"); - - let header_bot_token = request - .headers() - .get("x-bot-token") - .next() - .map(|x| x.to_string()); - - if let Some(bot_token) = header_bot_token { - if let Ok(user) = User::from_token(db, &bot_token, UserHint::Bot).await { - return Some(user); - } - } else if let Outcome::Success(session) = request.guard::().await { - // This uses a guard so can't really easily be refactored into from_token at this stage. - if let Ok(user) = db.fetch_user(&session.user_id).await { - return Some(user); - } - } - - None - }) - .await; - - if let Some(user) = user { - Outcome::Success(user.clone()) - } else { - Outcome::Failure((Status::Unauthorized, rauth::util::Error::InvalidSession)) - } - } -} - -impl<'r> OpenApiFromRequest<'r> for User { - fn from_request_input( - _gen: &mut OpenApiGenerator, - _name: String, - _required: bool, - ) -> rocket_okapi::Result { - let mut requirements = schemars::Map::new(); - requirements.insert("Api Key".to_owned(), vec![]); - - Ok(RequestHeaderInput::Security( - "Api Key".to_owned(), - SecurityScheme { - data: SecuritySchemeData::ApiKey { - name: "x-session-token".to_owned(), - location: "header".to_owned(), - }, - description: Some("Session Token".to_owned()), - extensions: schemars::Map::new(), - }, - requirements, - )) - } -} diff --git a/crates/quark/src/impl/mod.rs b/crates/quark/src/impl/mod.rs index fdc7bfed..effaf7b8 100644 --- a/crates/quark/src/impl/mod.rs +++ b/crates/quark/src/impl/mod.rs @@ -1,3 +1,10 @@ -pub mod dummy; -pub mod generic; -pub mod mongo; +mod dummy; +mod generic; +mod mongo; + +#[cfg(feature = "rocket_impl")] +mod rocket; + +pub use self::generic::users::user_settings::UserSettingsImpl; +pub use dummy::DummyDb; +pub use mongo::MongoDb; diff --git a/crates/quark/src/impl/mongo/admin/migrations/scripts.rs b/crates/quark/src/impl/mongo/admin/migrations/scripts.rs index 792c0297..375e13d9 100644 --- a/crates/quark/src/impl/mongo/admin/migrations/scripts.rs +++ b/crates/quark/src/impl/mongo/admin/migrations/scripts.rs @@ -17,7 +17,7 @@ struct MigrationInfo { revision: i32, } -pub const LATEST_REVISION: i32 = 15; +pub const LATEST_REVISION: i32 = 16; pub async fn migrate_database(db: &MongoDb) { let migrations = db.col::("migrations"); @@ -603,6 +603,15 @@ pub async fn run_migrations(db: &MongoDb, revision: i32) -> i32 { .unwrap(); } + if revision <= 15 { + info!("Running migration [revision 15 / 04-06-2022]: Migrate rAuth to latest version."); + + let db = rauth::Database::MongoDb(rauth::database::MongoDb(db.db())); + db.run_migration(rauth::Migration::M2022_06_03EnsureUpToSpec) + .await + .unwrap(); + } + // Need to migrate fields on attachments, change `user_id`, `object_id`, etc to `parent`. // Reminder to update LATEST_REVISION when adding new migrations. diff --git a/crates/quark/src/impl/rocket.rs b/crates/quark/src/impl/rocket.rs new file mode 100644 index 00000000..a68d011c --- /dev/null +++ b/crates/quark/src/impl/rocket.rs @@ -0,0 +1,73 @@ +use okapi::openapi3::{SecurityScheme, SecuritySchemeData}; +use rauth::models::Session; +use rocket_okapi::gen::OpenApiGenerator; +use rocket_okapi::request::{OpenApiFromRequest, RequestHeaderInput}; + +use rocket::http::Status; +use rocket::request::{self, FromRequest, Outcome, Request}; + +use crate::models::user::UserHint; +use crate::models::User; +use crate::Database; + +#[rocket::async_trait] +impl<'r> FromRequest<'r> for User { + type Error = rauth::Error; + + async fn from_request(request: &'r Request<'_>) -> request::Outcome { + let user: &Option = request + .local_cache_async(async { + let db = request.rocket().state::().expect("`Database`"); + + let header_bot_token = request + .headers() + .get("x-bot-token") + .next() + .map(|x| x.to_string()); + + if let Some(bot_token) = header_bot_token { + if let Ok(user) = User::from_token(db, &bot_token, UserHint::Bot).await { + return Some(user); + } + } else if let Outcome::Success(session) = request.guard::().await { + // This uses a guard so can't really easily be refactored into from_token at this stage. + if let Ok(user) = db.fetch_user(&session.user_id).await { + return Some(user); + } + } + + None + }) + .await; + + if let Some(user) = user { + Outcome::Success(user.clone()) + } else { + Outcome::Failure((Status::Unauthorized, rauth::Error::InvalidSession)) + } + } +} + +impl<'r> OpenApiFromRequest<'r> for User { + fn from_request_input( + _gen: &mut OpenApiGenerator, + _name: String, + _required: bool, + ) -> rocket_okapi::Result { + let mut requirements = schemars::Map::new(); + requirements.insert("Api Key".to_owned(), vec![]); + + Ok(RequestHeaderInput::Security( + "Api Key".to_owned(), + SecurityScheme { + data: SecuritySchemeData::ApiKey { + name: "x-session-token".to_owned(), + location: "header".to_owned(), + }, + description: Some("Session Token".to_owned()), + extensions: schemars::Map::new(), + }, + requirements, + )) + } +} diff --git a/crates/quark/src/lib.rs b/crates/quark/src/lib.rs index 1ec6e3c9..26fe3863 100644 --- a/crates/quark/src/lib.rs +++ b/crates/quark/src/lib.rs @@ -18,6 +18,7 @@ extern crate bitfield; pub extern crate bson; pub use iso8601_timestamp::Timestamp; +pub use rauth; pub use redis_kiss; pub mod events; @@ -27,6 +28,9 @@ pub mod presence; pub mod tasks; pub mod types; +#[cfg(feature = "rocket_impl")] +pub mod web; + mod database; mod permissions; mod traits; @@ -38,38 +42,11 @@ pub use traits::*; pub use permissions::defn::*; pub use permissions::{get_relationship, perms}; -pub use util::r#ref::Ref; -pub use util::result::{Error, Result}; -pub use util::variables; +pub use util::{ + log::setup_logging, + r#ref::Ref, + result::{Error, Result}, + variables, +}; -#[cfg(feature = "rocket_impl")] -pub use rocket_empty::EmptyResponse; - -#[cfg(feature = "rocket_impl")] -use rocket::State; - -#[cfg(feature = "rocket_impl")] -pub type Db = State; - -/// Configure logging and common Rust variables -pub fn setup_logging() -> sentry::ClientInitGuard { - dotenv::dotenv().ok(); - - if std::env::var("RUST_LOG").is_err() { - std::env::set_var("RUST_LOG", "info"); - } - - if std::env::var("ROCKET_ADDRESS").is_err() { - std::env::set_var("ROCKET_ADDRESS", "0.0.0.0"); - } - - pretty_env_logger::init(); - - sentry::init(( - "https://62fd0e02c5354905b4e286757f4beb16@sentry.insert.moe/4", - sentry::ClientOptions { - release: sentry::release_name!(), - ..Default::default() - }, - )) -} +pub use web::{Db, EmptyResponse}; diff --git a/crates/quark/src/tasks/mod.rs b/crates/quark/src/tasks/mod.rs index 9d8787ad..93f15a5a 100644 --- a/crates/quark/src/tasks/mod.rs +++ b/crates/quark/src/tasks/mod.rs @@ -18,7 +18,7 @@ pub async fn start_workers(db: Database) { task::spawn(ack::worker(db.clone())); task::spawn(last_message_id::worker(db.clone())); task::spawn(process_embeds::worker(db.clone())); - task::spawn(web_push::worker(db.clone())); + task::spawn(web_push::worker(db.clone().into())); } } diff --git a/crates/quark/src/tasks/web_push.rs b/crates/quark/src/tasks/web_push.rs index 4c72d062..08a6d851 100644 --- a/crates/quark/src/tasks/web_push.rs +++ b/crates/quark/src/tasks/web_push.rs @@ -1,9 +1,8 @@ +use crate::bson::doc; use crate::util::variables::delta::VAPID_PRIVATE_KEY; -use crate::{bson::doc, r#impl::mongo::MongoDb, Database}; use deadqueue::limited::Queue; -use futures::StreamExt; -use rauth::entities::Session; +use rauth::Database; use web_push::{ ContentEncoding, SubscriptionInfo, SubscriptionKeys, VapidSignatureBuilder, WebPushClient, WebPushMessageBuilder, @@ -43,90 +42,69 @@ pub async fn worker(db: Database) { let key = base64::decode_config(VAPID_PRIVATE_KEY.clone(), base64::URL_SAFE) .expect("valid `VAPID_PRIVATE_KEY`"); - if let Database::MongoDb(MongoDb(db)) = db { - loop { - let task = Q.pop().await; + loop { + let task = Q.pop().await; - // ! FIXME: this is hard-coded until rauth is merged into quark - if let Ok(mut cursor) = db - .database("revolt") - .collection::("sessions") - .find( - doc! { - "user_id": { - "$in": task.recipients + if let Ok(sessions) = db.find_sessions_with_subscription(&task.recipients).await { + for session in sessions { + if let Some(sub) = session.subscription { + let subscription = SubscriptionInfo { + endpoint: sub.endpoint, + keys: SubscriptionKeys { + auth: sub.auth, + p256dh: sub.p256dh, }, - "subscription": { - "$exists": true - } - }, - None, - ) - .await - { - while let Some(Ok(session)) = cursor.next().await { - if let Some(sub) = session.subscription { - let subscription = SubscriptionInfo { - endpoint: sub.endpoint, - keys: SubscriptionKeys { - auth: sub.auth, - p256dh: sub.p256dh, - }, - }; + }; - match WebPushMessageBuilder::new(&subscription) { - Ok(mut builder) => { - match VapidSignatureBuilder::from_pem( - std::io::Cursor::new(&key), - &subscription, - ) { - Ok(sig_builder) => match sig_builder.build() { - Ok(signature) => { - builder.set_vapid_signature(signature); - builder.set_payload( - ContentEncoding::AesGcm, - task.payload.as_bytes(), - ); + match WebPushMessageBuilder::new(&subscription) { + Ok(mut builder) => { + match VapidSignatureBuilder::from_pem( + std::io::Cursor::new(&key), + &subscription, + ) { + Ok(sig_builder) => match sig_builder.build() { + Ok(signature) => { + builder.set_vapid_signature(signature); + builder.set_payload( + ContentEncoding::AesGcm, + task.payload.as_bytes(), + ); - match builder.build() { - Ok(msg) => match client.send(msg).await { - Ok(_) => { - info!( - "Sent Web Push notification to {:?}.", - session.id - ) - } - Err(err) => { - error!( - "Hit error sending Web Push! {:?}", - err - ) - } - }, - Err(err) => { - error!( - "Failed to build message for {}! {:?}", - session.user_id, err + match builder.build() { + Ok(msg) => match client.send(msg).await { + Ok(_) => { + info!( + "Sent Web Push notification to {:?}.", + session.id ) } + Err(err) => { + error!("Hit error sending Web Push! {:?}", err) + } + }, + Err(err) => { + error!( + "Failed to build message for {}! {:?}", + session.user_id, err + ) } } - Err(err) => error!( - "Failed to build signature for {}! {:?}", - session.user_id, err - ), - }, + } Err(err) => error!( - "Failed to create signature builder for {}! {:?}", + "Failed to build signature for {}! {:?}", session.user_id, err ), - } + }, + Err(err) => error!( + "Failed to create signature builder for {}! {:?}", + session.user_id, err + ), } - Err(err) => error!( - "Invalid subscription information for {}! {:?}", - session.user_id, err - ), } + Err(err) => error!( + "Invalid subscription information for {}! {:?}", + session.user_id, err + ), } } } diff --git a/crates/quark/src/util/log.rs b/crates/quark/src/util/log.rs new file mode 100644 index 00000000..5eba2f5d --- /dev/null +++ b/crates/quark/src/util/log.rs @@ -0,0 +1,22 @@ +/// Configure logging and common Rust variables +pub fn setup_logging() -> sentry::ClientInitGuard { + dotenv::dotenv().ok(); + + if std::env::var("RUST_LOG").is_err() { + std::env::set_var("RUST_LOG", "info"); + } + + if std::env::var("ROCKET_ADDRESS").is_err() { + std::env::set_var("ROCKET_ADDRESS", "0.0.0.0"); + } + + pretty_env_logger::init(); + + sentry::init(( + "https://62fd0e02c5354905b4e286757f4beb16@sentry.insert.moe/4", + sentry::ClientOptions { + release: sentry::release_name!(), + ..Default::default() + }, + )) +} diff --git a/crates/quark/src/util/mod.rs b/crates/quark/src/util/mod.rs index c419bae1..9306cbd0 100644 --- a/crates/quark/src/util/mod.rs +++ b/crates/quark/src/util/mod.rs @@ -1,3 +1,4 @@ +pub mod log; pub mod manipulation; pub mod r#ref; pub mod result; diff --git a/crates/quark/src/web/mod.rs b/crates/quark/src/web/mod.rs new file mode 100644 index 00000000..b9a1cff7 --- /dev/null +++ b/crates/quark/src/web/mod.rs @@ -0,0 +1,5 @@ +use crate::Database; +use rocket::State; + +pub use rocket_empty::EmptyResponse; +pub type Db = State; diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..6b536602 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,12 @@ +version: "3.3" +services: + redis: + image: eqalpha/keydb + ports: + - "6379:6379" + database: + image: mongo + ports: + - "27017:27017" + volumes: + - ./.data/db:/data/db