diff --git a/Cargo.lock b/Cargo.lock index a4708e5c4..53e648ac2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -45,9 +45,9 @@ dependencies = [ [[package]] name = "actix-cors" -version = "0.6.1" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "414360eed71ba2d5435b185ba43ecbe281dfab5df3898286d6b7be8074372c92" +checksum = "684a6ce1562a5fcca49bc9302896c63547eea78a1e405e837e7416affd8b6eb9" dependencies = [ "actix-utils", "actix-web", @@ -60,15 +60,15 @@ dependencies = [ [[package]] name = "actix-http" -version = "3.0.4" +version = "3.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5885cb81a0d4d0d322864bea1bb6c2a8144626b4fdc625d4c51eba197e7797a" +checksum = "0c83abf9903e1f0ad9973cc4f7b9767fd5a03a583f51a5b7a339e07987cd2724" dependencies = [ "actix-codec", "actix-rt", "actix-service", "actix-utils", - "ahash 0.7.6", + "ahash", "base64", "bitflags", "brotli", @@ -85,13 +85,13 @@ dependencies = [ "itoa", "language-tags", "local-channel", - "log", "mime", "percent-encoding", "pin-project-lite", "rand", - "sha-1", + "sha1 0.10.1", "smallvec", + "tracing", "zstd", ] @@ -189,9 +189,9 @@ dependencies = [ [[package]] name = "actix-web" -version = "4.1.0" +version = "4.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a27e8fe9ba4ae613c21f677c2cfaf0696c3744030c6f485b34634e502d6bb379" +checksum = "d48f7b6534e06c7bfc72ee91db7917d4af6afe23e7d223b51e68fffbb21e96b9" dependencies = [ "actix-codec", "actix-http", @@ -202,7 +202,7 @@ dependencies = [ "actix-service", "actix-utils", "actix-web-codegen", - "ahash 0.7.6", + "ahash", "bytes", "bytestring", "cfg-if", @@ -211,6 +211,7 @@ dependencies = [ "encoding_rs", "futures-core", "futures-util", + "http", "itoa", "language-tags", "log", @@ -223,15 +224,15 @@ dependencies = [ "serde_urlencoded", "smallvec", "socket2", - "time 0.3.9", + "time", "url", ] [[package]] name = "actix-web-codegen" -version = "4.0.0" +version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7525bedf54704abb1d469e88d7e7e9226df73778798a69cea5022d53b2ae91bc" +checksum = "1fa9362663c8643d67b2d5eafba49e4cb2c8a053a29ed00a0bea121f17c76b13" dependencies = [ "actix-router", "proc-macro2", @@ -268,12 +269,6 @@ dependencies = [ "opaque-debug", ] -[[package]] -name = "ahash" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "739f4a8db6605981345c5654f3a85b056ce52f37a39d34da03f25bf2151ea16e" - [[package]] name = "ahash" version = "0.7.6" @@ -310,10 +305,13 @@ dependencies = [ ] [[package]] -name = "anyhow" -version = "1.0.57" +name = "android_system_properties" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f9b8508dccb7687a1d6c4ce66b2b0ecef467c94667de27d8d7fe1f8d2a9cdc" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] [[package]] name = "arrayvec" @@ -354,9 +352,9 @@ dependencies = [ [[package]] name = "attohttpc" -version = "0.18.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e69e13a99a7e6e070bb114f7ff381e58c7ccc188630121fc4c2fe4bcf24cd072" +checksum = "262c3f7f5d61249d8c00e5546e2685cd15ebeeb1bc0f3cc5449350a1cb07319e" dependencies = [ "http", "log", @@ -387,27 +385,27 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "aws-creds" -version = "0.27.1" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "460a75eac8f3cb7683e0a9a588a83c3ff039331ea7bfbfbfcecf1dacab276e11" +checksum = "5aeeee1a5defa63cba39097a510dfe63ef53658fc8995202a610f6a8a4d03639" dependencies = [ - "anyhow", "attohttpc", "dirs", "rust-ini", "serde", "serde-xml-rs", - "serde_derive", + "thiserror", + "time", "url", ] [[package]] name = "aws-region" -version = "0.23.5" +version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10110ddbd800fb47e6bef95e88fc13495795d252f585272a4fa3ac4f5b2e0a4d" +checksum = "f92a8af5850d0ea0916ca3e015ab86951ded0bf4b70fd27896e81ae1dfb0af37" dependencies = [ - "anyhow", + "thiserror", ] [[package]] @@ -553,15 +551,14 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.19" +version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73" +checksum = "bfd4d1b31faaa3a89d7934dbded3111da0d2ef28e3ebccdb4f0179f5929d1ef1" dependencies = [ - "libc", + "iana-time-zone", "num-integer", "num-traits", "serde", - "time 0.1.44", "winapi", ] @@ -574,6 +571,16 @@ dependencies = [ "generic-array", ] +[[package]] +name = "codespan-reporting" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" +dependencies = [ + "termcolor", + "unicode-width", +] + [[package]] name = "concurrent-queue" version = "1.2.2" @@ -602,7 +609,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94d4706de1b0fa5b132270cddffa8585166037822e260a944fe161acd137ca05" dependencies = [ "percent-encoding", - "time 0.3.9", + "time", "version_check", ] @@ -695,16 +702,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", - "subtle", -] - [[package]] name = "curl" version = "0.4.43" @@ -736,6 +733,50 @@ dependencies = [ "winapi", ] +[[package]] +name = "cxx" +version = "1.0.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b7d4e43b25d3c994662706a1d4fcfc32aaa6afd287502c111b237093bb23f3a" +dependencies = [ + "cc", + "cxxbridge-flags", + "cxxbridge-macro", + "link-cplusplus", +] + +[[package]] +name = "cxx-build" +version = "1.0.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84f8829ddc213e2c1368e51a2564c552b65a8cb6a28f31e576270ac81d5e5827" +dependencies = [ + "cc", + "codespan-reporting", + "once_cell", + "proc-macro2", + "quote", + "scratch", + "syn", +] + +[[package]] +name = "cxxbridge-flags" +version = "1.0.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e72537424b474af1460806647c41d4b6d35d09ef7fe031c5c2fa5766047cc56a" + +[[package]] +name = "cxxbridge-macro" +version = "1.0.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "309e4fb93eed90e1e14bea0da16b209f81813ba9fc7830c20ed151dd7bc0a4d7" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "darling" version = "0.13.4" @@ -837,12 +878,9 @@ dependencies = [ [[package]] name = "dlv-list" -version = "0.2.3" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68df3f2b690c1b86e65ef7830956aededf3cb0a16f898f79b9a6f421a7b6211b" -dependencies = [ - "rand", -] +checksum = "0688c2a7f92e427f44895cd63841bff7b29f8d7a1648b9e7e07a4a365b2e1257" [[package]] name = "dotenv" @@ -850,6 +888,12 @@ version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f" +[[package]] +name = "dotenvy" +version = "0.15.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03d8c417d7a8cb362e0c37e5d815f5eb7c37f79ff93707329d5a194e42e54ca0" + [[package]] name = "either" version = "1.6.1" @@ -1126,15 +1170,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "hashbrown" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04" -dependencies = [ - "ahash 0.4.7", -] - [[package]] name = "hashbrown" version = "0.11.2" @@ -1147,7 +1182,7 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "db0d4cf898abf0081f964436dc980e96670a0f36863e4b83aaacdb65c9d7ccc3" dependencies = [ - "ahash 0.7.6", + "ahash", ] [[package]] @@ -1189,17 +1224,7 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "791a029f6b9fc27657f6f188ec6e5e43f6911f6f878e0dc5501396e09809d437" dependencies = [ - "hmac 0.12.1", -] - -[[package]] -name = "hmac" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b" -dependencies = [ - "crypto-mac", - "digest 0.9.0", + "hmac", ] [[package]] @@ -1213,9 +1238,9 @@ dependencies = [ [[package]] name = "http" -version = "0.2.7" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff8670570af52249509a86f5e3e18a08c60b177071826898fde8997cf5f6bfbb" +checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399" dependencies = [ "bytes", "fnv", @@ -1288,6 +1313,30 @@ dependencies = [ "tokio-native-tls", ] +[[package]] +name = "iana-time-zone" +version = "0.1.51" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5a6ef98976b22b3b7f2f3a806f858cb862044cfa66805aa3ad84cb3d3b785ed" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "winapi", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca" +dependencies = [ + "cxx", + "cxx-build", +] + [[package]] name = "ident_case" version = "1.0.1" @@ -1421,7 +1470,7 @@ dependencies = [ "censor", "chrono", "dashmap", - "dotenv", + "dotenvy", "env_logger", "futures", "futures-timer", @@ -1505,6 +1554,15 @@ dependencies = [ "vcpkg", ] +[[package]] +name = "link-cplusplus" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9272ab7b96c9046fbc5bc56c06c117cb639fe2d509df0c421cad82d2915cf369" +dependencies = [ + "cc", +] + [[package]] name = "local-channel" version = "0.1.3" @@ -1588,7 +1646,7 @@ dependencies = [ "log", "serde", "serde_json", - "time 0.3.9", + "time", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", @@ -1608,11 +1666,11 @@ checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" [[package]] name = "minidom" -version = "0.13.0" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "332592c2149fc7dd40a64fc9ef6f0d65607284b474cef9817d1fc8c7e7b3608e" +checksum = "9dddfe21863f8d600ed2bd1096cb9b5cd6ff984be6185cf9d563fb4a107bffc5" dependencies = [ - "quick-xml", + "rxml", ] [[package]] @@ -1778,12 +1836,12 @@ dependencies = [ [[package]] name = "ordered-multimap" -version = "0.3.1" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c672c7ad9ec066e428c00eb917124a06f08db19e2584de982cc34b1f4c12485" +checksum = "ccd746e37177e1711c20dd619a1620f34f5c8b569c53590a72dedd5344d8924a" dependencies = [ "dlv-list", - "hashbrown 0.9.1", + "hashbrown 0.12.1", ] [[package]] @@ -1842,9 +1900,9 @@ dependencies = [ [[package]] name = "password-hash" -version = "0.3.2" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d791538a6dcc1e7cb7fe6f6b58aca40e7f79403c45b2bc274008b5e647af1d8" +checksum = "7676374caaee8a325c9e7a2ae557f216c5563a171d6997b0ef8a65af35147700" dependencies = [ "base64ct", "rand_core", @@ -1859,12 +1917,12 @@ checksum = "0c520e05135d6e763148b6426a837e239041653ba7becd2e538c076c738025fc" [[package]] name = "pbkdf2" -version = "0.10.1" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271779f35b581956db91a3e55737327a03aa051e90b1c47aeb189508533adfd7" +checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" dependencies = [ "digest 0.10.3", - "hmac 0.12.1", + "hmac", "password-hash", "sha2 0.10.2", ] @@ -1965,15 +2023,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "quick-xml" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26aab6b48e2590e4a64d1ed808749ba06257882b461d01ca71baeb747074a6dd" -dependencies = [ - "memchr", -] - [[package]] name = "quote" version = "1.0.18" @@ -2113,9 +2162,9 @@ dependencies = [ [[package]] name = "rust-ini" -version = "0.17.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63471c4aa97a1cf8332a5f97709a79a4234698de6a1f5087faf66f2dae810e22" +checksum = "f6d5f2436026b4f6e79dc829837d467cc7e9a55ee40e750d716713540715a2df" dependencies = [ "cfg-if", "ordered-multimap", @@ -2123,18 +2172,17 @@ dependencies = [ [[package]] name = "rust-s3" -version = "0.30.0" +version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff7c04dc81e5159a1ecc8594361f61cb8a62d4e4d0f5b0a0b4b48c463a55910f" +checksum = "b6009d9d4cf910505534d62d380a0aa305805a2af0b5c3ad59a3024a0715b847" dependencies = [ - "anyhow", "async-trait", "aws-creds", "aws-region", "base64", "cfg-if", "hex", - "hmac 0.11.0", + "hmac", "http", "log", "maybe-async", @@ -2145,8 +2193,9 @@ dependencies = [ "serde", "serde-xml-rs", "serde_derive", - "sha2 0.9.9", - "time 0.3.9", + "sha2 0.10.2", + "thiserror", + "time", "tokio", "tokio-stream", "url", @@ -2188,6 +2237,25 @@ version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2cc38e8fa666e2de3c4aba7edeb5ffc5246c1c2ed0e3d17e560aeeba736b23f" +[[package]] +name = "rxml" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c7c4cd1e0a04c48f953473383a60143884515b7a8eb7ca7d9b1baa9c05dee75" +dependencies = [ + "bytes", + "pin-project-lite", + "rxml_validation", + "smartstring", + "tokio", +] + +[[package]] +name = "rxml_validation" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8633dff4bb93061867c8411c6e99068c5f59d9f890c87384169004b0fbb929a" + [[package]] name = "ryu" version = "1.0.10" @@ -2210,6 +2278,12 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +[[package]] +name = "scratch" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8132065adcfd6e02db789d9285a0deb2f3fcb04002865ab67d5fb103533898" + [[package]] name = "sct" version = "0.7.0" @@ -2420,6 +2494,15 @@ version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83" +[[package]] +name = "smartstring" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e714dff2b33f2321fdcd475b71cec79781a692d846f37f415fb395a1d2bcd48e" +dependencies = [ + "static_assertions", +] + [[package]] name = "socket2" version = "0.4.4" @@ -2463,7 +2546,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6b69bf218860335ddda60d6ce85ee39f6cf6e5630e300e19757d1de15886a093" dependencies = [ - "ahash 0.7.6", + "ahash", "atoi", "base64", "bitflags", @@ -2482,7 +2565,7 @@ dependencies = [ "hashlink", "hex", "hkdf", - "hmac 0.12.1", + "hmac", "indexmap", "itoa", "libc", @@ -2626,17 +2709,6 @@ dependencies = [ "syn", ] -[[package]] -name = "time" -version = "0.1.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" -dependencies = [ - "libc", - "wasi 0.10.0+wasi-snapshot-preview1", - "winapi", -] - [[package]] name = "time" version = "0.3.9" @@ -2854,6 +2926,12 @@ version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99" +[[package]] +name = "unicode-width" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" + [[package]] name = "unicode_categories" version = "0.1.1" @@ -3202,9 +3280,9 @@ dependencies = [ [[package]] name = "zip" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf225bcf73bb52cbb496e70475c7bd7a3f769df699c0020f6c7bd9a96dcf0b8d" +checksum = "537ce7411d25e54e8ae21a7ce0b15840e7bfcff15b51d697ec3266cc76bdf080" dependencies = [ "aes", "byteorder", @@ -3213,27 +3291,27 @@ dependencies = [ "crc32fast", "crossbeam-utils", "flate2", - "hmac 0.12.1", + "hmac", "pbkdf2", "sha1 0.10.1", - "time 0.3.9", + "time", "zstd", ] [[package]] name = "zstd" -version = "0.10.2+zstd.1.5.2" +version = "0.11.2+zstd.1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f4a6bd64f22b5e3e94b4e238669ff9f10815c27a5180108b849d24174a83847" +checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4" dependencies = [ "zstd-safe", ] [[package]] name = "zstd-safe" -version = "4.1.6+zstd.1.5.2" +version = "5.0.2+zstd.1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94b61c51bb270702d6167b8ce67340d2754b088d0c091b06e593aa772c3ee9bb" +checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db" dependencies = [ "libc", "zstd-sys", @@ -3241,9 +3319,9 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "1.6.3+zstd.1.5.2" +version = "2.0.1+zstd.1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc49afa5c8d634e75761feda8c592051e7eeb4683ba827211eb0d731d3402ea8" +checksum = "9fd07cbbc53846d9145dbffdf6dd09a7a0aa52be46741825f5c97bdd4f73f12b" dependencies = [ "cc", "libc", diff --git a/Cargo.toml b/Cargo.toml index 9c02d2261..55ca3ee89 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,12 +13,12 @@ path = "src/main.rs" [dependencies] actix = "0.13.0" -actix-web = "4.1.0" +actix-web = "4.2.1" actix-rt = "2.7.0" tokio = { version = "1.19.0", features = ["sync"] } tokio-stream = "0.1.8" actix-multipart = "0.4.0" -actix-cors = "0.6.1" +actix-cors = "0.6.3" meilisearch-sdk = "0.15.0" reqwest = { version = "0.11.10", features = ["json"] } @@ -30,7 +30,7 @@ xml-rs = "0.8.4" serde_json = "1.0" serde = { version = "1.0", features = ["derive"] } serde_with = "1.12.0" -chrono = { version = "0.4.19", features = ["serde"]} +chrono = { version = "0.4.22", default-features = false, features = ["clock", "serde", "std"] } rand = "0.8.5" base64 = "0.13.0" sha1 = { version = "0.6.1", features = ["std"] } @@ -45,7 +45,7 @@ url = "2.2.2" urlencoding = "2.1.0" gumdrop = "0.8.1" -dotenv = "0.15.0" +dotenvy = "0.15.6" log = "0.4.16" env_logger = "0.9.0" thiserror = "1.0.30" @@ -53,7 +53,7 @@ lazy_static = "1.4.0" futures = "0.3.21" futures-timer = "3.0.2" -rust-s3 = "0.30.0" +rust-s3 = "0.32.3" async-trait = "0.1.53" sqlx = { version = "0.6.0", features = ["runtime-actix-rustls", "postgres", "chrono", "offline", "macros", "migrate"] } diff --git a/src/database/postgres_database.rs b/src/database/postgres_database.rs index d94e1f913..65601bde9 100644 --- a/src/database/postgres_database.rs +++ b/src/database/postgres_database.rs @@ -7,16 +7,16 @@ use std::time::Duration; pub async fn connect() -> Result { info!("Initializing database connection"); let database_url = - dotenv::var("DATABASE_URL").expect("`DATABASE_URL` not in .env"); + dotenvy::var("DATABASE_URL").expect("`DATABASE_URL` not in .env"); let pool = PgPoolOptions::new() .min_connections( - dotenv::var("DATABASE_MIN_CONNECTIONS") + dotenvy::var("DATABASE_MIN_CONNECTIONS") .ok() .and_then(|x| x.parse().ok()) .unwrap_or(0), ) .max_connections( - dotenv::var("DATABASE_MAX_CONNECTIONS") + dotenvy::var("DATABASE_MAX_CONNECTIONS") .ok() .and_then(|x| x.parse().ok()) .unwrap_or(16), @@ -28,7 +28,7 @@ pub async fn connect() -> Result { Ok(pool) } pub async fn check_for_migrations() -> Result<(), sqlx::Error> { - let uri = dotenv::var("DATABASE_URL").expect("`DATABASE_URL` not in .env"); + let uri = dotenvy::var("DATABASE_URL").expect("`DATABASE_URL` not in .env"); let uri = uri.as_str(); if !Postgres::database_exists(uri).await? { info!("Creating database..."); diff --git a/src/file_hosting/mock.rs b/src/file_hosting/mock.rs index f9ff94f85..c8dc60d75 100644 --- a/src/file_hosting/mock.rs +++ b/src/file_hosting/mock.rs @@ -21,7 +21,7 @@ impl FileHost for MockHost { file_bytes: Bytes, ) -> Result { let path = - std::path::Path::new(&dotenv::var("MOCK_FILE_PATH").unwrap()) + std::path::Path::new(&dotenvy::var("MOCK_FILE_PATH").unwrap()) .join(file_name.replace("../", "")); std::fs::create_dir_all( path.parent().ok_or(FileHostingError::InvalidFilename)?, @@ -49,7 +49,7 @@ impl FileHost for MockHost { file_name: &str, ) -> Result { let path = - std::path::Path::new(&dotenv::var("MOCK_FILE_PATH").unwrap()) + std::path::Path::new(&dotenvy::var("MOCK_FILE_PATH").unwrap()) .join(file_name.replace("../", "")); std::fs::remove_file(path)?; diff --git a/src/file_hosting/s3_host.rs b/src/file_hosting/s3_host.rs index eaba327b3..fd84c117e 100644 --- a/src/file_hosting/s3_host.rs +++ b/src/file_hosting/s3_host.rs @@ -23,9 +23,15 @@ impl S3Host { ) -> Result { let mut bucket = Bucket::new( bucket_name, - Region::Custom { - region: bucket_region.to_string(), - endpoint: url.to_string(), + if bucket_region == "r2" { + Region::R2 { + account_id: url.to_string(), + } + } else { + Region::Custom { + region: bucket_region.to_string(), + endpoint: url.to_string(), + } }, Credentials::new( Some(access_token), diff --git a/src/main.rs b/src/main.rs index c806727fa..a4e9da44f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -49,7 +49,7 @@ pub struct Pepper { #[actix_rt::main] async fn main() -> std::io::Result<()> { - dotenv::dotenv().ok(); + dotenvy::dotenv().ok(); env_logger::Builder::from_env(Env::default().default_filter_or("info")) .init(); @@ -65,11 +65,11 @@ async fn main() -> std::io::Result<()> { } } - info!("Starting Labrinth on {}", dotenv::var("BIND_ADDR").unwrap()); + info!("Starting Labrinth on {}", dotenvy::var("BIND_ADDR").unwrap()); let search_config = search::SearchConfig { - address: dotenv::var("MEILISEARCH_ADDR").unwrap(), - key: dotenv::var("MEILISEARCH_KEY").unwrap(), + address: dotenvy::var("MEILISEARCH_ADDR").unwrap(), + key: dotenvy::var("MEILISEARCH_KEY").unwrap(), }; if config.reset_indices { @@ -97,25 +97,25 @@ async fn main() -> std::io::Result<()> { .expect("Database connection failed"); let storage_backend = - dotenv::var("STORAGE_BACKEND").unwrap_or_else(|_| "local".to_string()); + dotenvy::var("STORAGE_BACKEND").unwrap_or_else(|_| "local".to_string()); let file_host: Arc = match storage_backend.as_str() { "backblaze" => Arc::new( file_hosting::BackblazeHost::new( - &dotenv::var("BACKBLAZE_KEY_ID").unwrap(), - &dotenv::var("BACKBLAZE_KEY").unwrap(), - &dotenv::var("BACKBLAZE_BUCKET_ID").unwrap(), + &dotenvy::var("BACKBLAZE_KEY_ID").unwrap(), + &dotenvy::var("BACKBLAZE_KEY").unwrap(), + &dotenvy::var("BACKBLAZE_BUCKET_ID").unwrap(), ) .await, ), "s3" => Arc::new( S3Host::new( - &*dotenv::var("S3_BUCKET_NAME").unwrap(), - &*dotenv::var("S3_REGION").unwrap(), - &*dotenv::var("S3_URL").unwrap(), - &*dotenv::var("S3_ACCESS_TOKEN").unwrap(), - &*dotenv::var("S3_SECRET").unwrap(), + &*dotenvy::var("S3_BUCKET_NAME").unwrap(), + &*dotenvy::var("S3_REGION").unwrap(), + &*dotenvy::var("S3_URL").unwrap(), + &*dotenvy::var("S3_ACCESS_TOKEN").unwrap(), + &*dotenvy::var("S3_SECRET").unwrap(), ) .unwrap(), ), @@ -253,7 +253,7 @@ async fn main() -> std::io::Result<()> { }) .with_interval(std::time::Duration::from_secs(60)) .with_max_requests(300) - .with_ignore_key(dotenv::var("RATE_LIMIT_IGNORE_KEY").ok()), + .with_ignore_key(dotenvy::var("RATE_LIMIT_IGNORE_KEY").ok()), ) .app_data(web::Data::new(pool.clone())) .app_data(web::Data::new(file_host.clone())) @@ -268,7 +268,7 @@ async fn main() -> std::io::Result<()> { .service(web::scope("updates").configure(routes::updates)) .default_service(web::get().to(routes::not_found)) }) - .bind(dotenv::var("BIND_ADDR").unwrap())? + .bind(dotenvy::var("BIND_ADDR").unwrap())? .run() .await } @@ -310,7 +310,7 @@ fn check_env_vars() -> bool { failed |= check_var::("STORAGE_BACKEND"); - let storage_backend = dotenv::var("STORAGE_BACKEND").ok(); + let storage_backend = dotenvy::var("STORAGE_BACKEND").ok(); match storage_backend.as_deref() { Some("backblaze") => { failed |= check_var::("BACKBLAZE_KEY_ID"); diff --git a/src/routes/admin.rs b/src/routes/admin.rs index 59a79ffa1..be83d8098 100644 --- a/src/routes/admin.rs +++ b/src/routes/admin.rs @@ -70,8 +70,8 @@ pub async fn count_download( let client = reqwest::Client::new(); client - .post(format!("{}downloads", dotenv::var("ARIADNE_URL")?)) - .header("Modrinth-Admin", dotenv::var("ARIADNE_ADMIN_KEY")?) + .post(format!("{}downloads", dotenvy::var("ARIADNE_URL")?)) + .header("Modrinth-Admin", dotenvy::var("ARIADNE_ADMIN_KEY")?) .json(&json!({ "url": download_body.url, "project_id": download_body.hash diff --git a/src/routes/auth.rs b/src/routes/auth.rs index e3af2b8aa..52c402a3e 100644 --- a/src/routes/auth.rs +++ b/src/routes/auth.rs @@ -33,7 +33,7 @@ pub fn config(cfg: &mut ServiceConfig) { #[derive(Error, Debug)] pub enum AuthorizationError { #[error("Environment Error")] - Env(#[from] dotenv::Error), + Env(#[from] dotenvy::Error), #[error("An unknown database error occured: {0}")] SqlxDatabase(#[from] sqlx::Error), #[error("Database Error: {0}")] @@ -148,7 +148,7 @@ pub async fn init( transaction.commit().await?; - let client_id = dotenv::var("GITHUB_CLIENT_ID")?; + let client_id = dotenvy::var("GITHUB_CLIENT_ID")?; let url = format!( "https://github.com/login/oauth/authorize?client_id={}&state={}&scope={}", client_id, @@ -196,8 +196,8 @@ pub async fn auth_callback( .execute(&mut *transaction) .await?; - let client_id = dotenv::var("GITHUB_CLIENT_ID")?; - let client_secret = dotenv::var("GITHUB_CLIENT_SECRET")?; + let client_id = dotenvy::var("GITHUB_CLIENT_ID")?; + let client_secret = dotenvy::var("GITHUB_CLIENT_SECRET")?; let url = format!( "https://github.com/login/oauth/access_token?client_id={}&client_secret={}&code={}", diff --git a/src/routes/mod.rs b/src/routes/mod.rs index cd4b08ef4..100c82c35 100644 --- a/src/routes/mod.rs +++ b/src/routes/mod.rs @@ -172,7 +172,7 @@ pub fn admin_config(cfg: &mut web::ServiceConfig) { #[derive(thiserror::Error, Debug)] pub enum ApiError { #[error("Environment Error")] - Env(#[from] dotenv::Error), + Env(#[from] dotenvy::Error), #[error("Error while uploading file")] FileHosting(#[from] FileHostingError), #[error("Database Error: {0}")] diff --git a/src/routes/project_creation.rs b/src/routes/project_creation.rs index eb7459577..82e2cca70 100644 --- a/src/routes/project_creation.rs +++ b/src/routes/project_creation.rs @@ -26,7 +26,7 @@ use validator::Validate; #[derive(Error, Debug)] pub enum CreateError { #[error("Environment Error")] - EnvError(#[from] dotenv::Error), + EnvError(#[from] dotenvy::Error), #[error("An unknown database error occurred")] SqlxDatabaseError(#[from] sqlx::Error), #[error("Database Error: {0}")] @@ -324,7 +324,7 @@ pub async fn project_create_inner( uploaded_files: &mut Vec, ) -> Result { // The base URL for files uploaded to backblaze - let cdn_url = dotenv::var("CDN_URL")?; + let cdn_url = dotenvy::var("CDN_URL")?; // The currently logged in user let current_user = @@ -793,7 +793,7 @@ pub async fn project_create_inner( let _project_id = project_builder.insert(&mut *transaction).await?; if status == ProjectStatus::Processing { - if let Ok(webhook_url) = dotenv::var("MODERATION_DISCORD_WEBHOOK") { + if let Ok(webhook_url) = dotenvy::var("MODERATION_DISCORD_WEBHOOK") { crate::util::webhook::send_discord_webhook( response.clone(), webhook_url, diff --git a/src/routes/projects.rs b/src/routes/projects.rs index 997607997..5fccb3007 100644 --- a/src/routes/projects.rs +++ b/src/routes/projects.rs @@ -478,7 +478,7 @@ pub async fn project_edit( .await?; if let Ok(webhook_url) = - dotenv::var("MODERATION_DISCORD_WEBHOOK") + dotenvy::var("MODERATION_DISCORD_WEBHOOK") { crate::util::webhook::send_discord_webhook( Project::from(project_item.clone()), @@ -1008,7 +1008,7 @@ pub async fn project_icon_edit( if let Some(content_type) = crate::util::ext::get_image_content_type(&*ext.ext) { - let cdn_url = dotenv::var("CDN_URL")?; + let cdn_url = dotenvy::var("CDN_URL")?; let user = get_user_from_headers(req.headers(), &**pool).await?; let string = info.into_inner().0; @@ -1136,7 +1136,7 @@ pub async fn delete_project_icon( } } - let cdn_url = dotenv::var("CDN_URL")?; + let cdn_url = dotenvy::var("CDN_URL")?; if let Some(icon) = project_item.icon_url { let name = icon.split(&format!("{cdn_url}/")).nth(1); @@ -1189,7 +1189,7 @@ pub async fn add_gallery_item( ApiError::Validation(validation_errors_to_string(err, None)) })?; - let cdn_url = dotenv::var("CDN_URL")?; + let cdn_url = dotenvy::var("CDN_URL")?; let user = get_user_from_headers(req.headers(), &**pool).await?; let string = info.into_inner().0; @@ -1490,7 +1490,7 @@ pub async fn delete_gallery_item( })? .id; - let cdn_url = dotenv::var("CDN_URL")?; + let cdn_url = dotenvy::var("CDN_URL")?; let name = item.url.split(&format!("{cdn_url}/")).nth(1); if let Some(icon_path) = name { diff --git a/src/routes/updates.rs b/src/routes/updates.rs index 8d8ab1e3b..d177c40e7 100644 --- a/src/routes/updates.rs +++ b/src/routes/updates.rs @@ -53,7 +53,7 @@ pub async fn forge_updates( let mut response = ForgeUpdates { homepage: format!( "{}/mod/{}", - dotenv::var("SITE_URL").unwrap_or_default(), + dotenvy::var("SITE_URL").unwrap_or_default(), id ), promos: HashMap::new(), diff --git a/src/routes/users.rs b/src/routes/users.rs index cccf653c5..24bcae53f 100644 --- a/src/routes/users.rs +++ b/src/routes/users.rs @@ -328,7 +328,7 @@ pub async fn user_icon_edit( if let Some(content_type) = crate::util::ext::get_image_content_type(&*ext.ext) { - let cdn_url = dotenv::var("CDN_URL")?; + let cdn_url = dotenvy::var("CDN_URL")?; let user = get_user_from_headers(req.headers(), &**pool).await?; let id_option = crate::database::models::User::get_id_from_username_or_id( diff --git a/src/routes/version_creation.rs b/src/routes/version_creation.rs index dd15dfb5f..04777dc3e 100644 --- a/src/routes/version_creation.rs +++ b/src/routes/version_creation.rs @@ -112,7 +112,7 @@ async fn version_create_inner( file_host: &dyn FileHost, uploaded_files: &mut Vec, ) -> Result { - let cdn_url = dotenv::var("CDN_URL")?; + let cdn_url = dotenvy::var("CDN_URL")?; let mut initial_version_data = None; let mut version_builder = None; @@ -483,7 +483,7 @@ async fn upload_file_to_version_inner( uploaded_files: &mut Vec, version_id: models::VersionId, ) -> Result { - let cdn_url = dotenv::var("CDN_URL")?; + let cdn_url = dotenvy::var("CDN_URL")?; let mut initial_file_data: Option = None; let mut file_builders: Vec = Vec::new(); diff --git a/src/search/indexing/mod.rs b/src/search/indexing/mod.rs index f208d637e..e6c603fc3 100644 --- a/src/search/indexing/mod.rs +++ b/src/search/indexing/mod.rs @@ -20,7 +20,7 @@ pub enum IndexingError { #[error("Database Error: {0}")] Database(#[from] crate::database::models::DatabaseError), #[error("Environment Error")] - Env(#[from] dotenv::Error), + Env(#[from] dotenvy::Error), #[error("Error while awaiting index creation task")] Task, } diff --git a/src/search/mod.rs b/src/search/mod.rs index e1384cfd4..516e87599 100644 --- a/src/search/mod.rs +++ b/src/search/mod.rs @@ -24,7 +24,7 @@ pub enum SearchError { #[error("Error while formatting strings: {0}")] FormatError(#[from] std::fmt::Error), #[error("Environment Error")] - Env(#[from] dotenv::Error), + Env(#[from] dotenvy::Error), #[error("Invalid index to sort by: {0}")] InvalidIndex(String), } diff --git a/src/util/env.rs b/src/util/env.rs index e430edcf2..9de970c6f 100644 --- a/src/util/env.rs +++ b/src/util/env.rs @@ -1,10 +1,10 @@ use std::str::FromStr; pub fn parse_var(var: &'static str) -> Option { - dotenv::var(var).ok().and_then(|i| i.parse().ok()) + dotenvy::var(var).ok().and_then(|i| i.parse().ok()) } pub fn parse_strings_from_var(var: &'static str) -> Option> { - dotenv::var(var) + dotenvy::var(var) .ok() .and_then(|s| serde_json::from_str::>(&s).ok()) } diff --git a/src/util/webhook.rs b/src/util/webhook.rs index ce3c91801..3744a6f50 100644 --- a/src/util/webhook.rs +++ b/src/util/webhook.rs @@ -76,7 +76,7 @@ pub async fn send_discord_webhook( let embed = DiscordEmbed { url: format!( "{}/{}/{}", - dotenv::var("SITE_URL").unwrap_or_default(), + dotenvy::var("SITE_URL").unwrap_or_default(), project.project_type, project .clone()