From 12787a0dcf562edbb744683cd986a9d61d23d3e7 Mon Sep 17 00:00:00 2001 From: valkyrie_pilot Date: Sun, 2 Feb 2025 17:12:48 -0700 Subject: [PATCH] Dependency updates --- Cargo.lock | 497 ++++++++++++++++++------------------------------- Cargo.toml | 14 +- src/filters.rs | 13 +- src/main.rs | 82 +++++--- 4 files changed, 246 insertions(+), 360 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 00eab94..751225b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -24,7 +24,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ "cfg-if", - "getrandom", + "getrandom 0.2.15", "once_cell", "version_check", "zerocopy", @@ -118,66 +118,11 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" -[[package]] -name = "askama" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b79091df18a97caea757e28cd2d5fda49c6cd4bd01ddffd7ff01ace0c0ad2c28" -dependencies = [ - "askama_derive", - "askama_escape", - "humansize", - "num-traits", - "percent-encoding", -] - -[[package]] -name = "askama_axum" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a41603f7cdbf5ac4af60760f17253eb6adf6ec5b6f14a7ed830cf687d375f163" -dependencies = [ - "askama", - "axum-core", - "http", -] - -[[package]] -name = "askama_derive" -version = "0.12.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19fe8d6cb13c4714962c072ea496f3392015f0989b1a2847bb4b2d9effd71d83" -dependencies = [ - "askama_parser", - "basic-toml", - "mime", - "mime_guess", - "proc-macro2", - "quote", - "serde", - "syn", -] - -[[package]] -name = "askama_escape" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "619743e34b5ba4e9703bba34deac3427c72507c7159f5fd030aea8cac0cfe341" - -[[package]] -name = "askama_parser" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acb1161c6b64d1c3d83108213c2a2533a342ac225aabd0bda218278c2ddb00c0" -dependencies = [ - "nom", -] - [[package]] name = "async-trait" -version = "0.1.85" +version = "0.1.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f934833b4b7233644e5848f235df3f57ed8c80f1528a26c3dfa13d2147fa056" +checksum = "644dd749086bf3771a2fbc5f256fdb982d53f011c7d5d560304eafeecebce79d" dependencies = [ "proc-macro2", "quote", @@ -221,13 +166,13 @@ dependencies = [ [[package]] name = "axum" -version = "0.7.9" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edca88bc138befd0323b20752846e6587272d3b03b0343c8ea28a6f819e6e71f" +checksum = "6d6fd624c75e18b3b4c6b9caf42b1afe24437daaee904069137d8bab077be8b8" dependencies = [ - "async-trait", "axum-core", "bytes", + "form_urlencoded", "futures-util", "http", "http-body", @@ -242,6 +187,7 @@ dependencies = [ "pin-project-lite", "rustversion", "serde", + "serde_path_to_error", "serde_urlencoded", "sync_wrapper", "tokio", @@ -253,11 +199,10 @@ dependencies = [ [[package]] name = "axum-core" -version = "0.4.5" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09f2bd6146b97ae3359fa0cc6d6b376d9539582c7b4220f041a33ec24c226199" +checksum = "df1362f362fd16024ae199c1970ce98f9661bf5ef94b9808fee734bc3698b733" dependencies = [ - "async-trait", "bytes", "futures-util", "http", @@ -274,20 +219,18 @@ dependencies = [ [[package]] name = "axum-extra" -version = "0.9.6" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c794b30c904f0a1c2fb7740f7df7f7972dfaa14ef6f57cb6178dc63e5dca2f04" +checksum = "460fc6f625a1f7705c6cf62d0d070794e94668988b1c38111baeec177c715f7b" dependencies = [ "axum", "axum-core", "bytes", - "fastrand", "futures-util", "http", "http-body", "http-body-util", "mime", - "multer", "pin-project-lite", "serde", "tower 0.5.2", @@ -339,9 +282,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.7.0" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1be3f42a67d6d345ecd59f675f3f012d6974981560836e938c22b424b85ce1be" +checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36" [[package]] name = "bitstream-io" @@ -370,20 +313,20 @@ checksum = "c360505aed52b7ec96a3636c3f039d99103c37d1d9b4f7a8c743d3ea9ffcd03b" [[package]] name = "bumpalo" -version = "3.16.0" +version = "3.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" [[package]] name = "bustdir" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03176591ec0985c52fbf5b0676a878a69de1043f1d36eae033fc9c0775376f9e" +checksum = "a977456c660c4465edcfe6bee1cc8ad678f8787dd3d45a4b3e6e45483c48682f" dependencies = [ "ahash", - "askama", "blake3", "rand", + "rinja", ] [[package]] @@ -412,9 +355,9 @@ checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" [[package]] name = "cc" -version = "1.2.8" +version = "1.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad0cf6e91fde44c773c6ee7ec6bba798504641a8bc2eb7e37a04ffbf4dfaa55a" +checksum = "e4730490333d58093109dc02c23174c3f4d490998c3fed3cc8e82d57afedb9cf" dependencies = [ "jobserver", "libc", @@ -517,7 +460,7 @@ version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "829d955a0bb380ef178a640b91779e3987da38c9aea133b20614cfed8cdea9c6" dependencies = [ - "bitflags 2.7.0", + "bitflags 2.8.0", "crossterm_winapi", "parking_lot", "rustix", @@ -535,15 +478,15 @@ dependencies = [ [[package]] name = "crunchy" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" +checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929" [[package]] name = "data-encoding" -version = "2.6.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" +checksum = "0e60eed09d8c01d3cee5b7d30acb059b76614c918fa0f992e0dd6eeb10daad6f" [[package]] name = "displaydoc" @@ -568,15 +511,6 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" -[[package]] -name = "encoding_rs" -version = "0.8.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" -dependencies = [ - "cfg-if", -] - [[package]] name = "enum-as-inner" version = "0.6.1" @@ -595,16 +529,6 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" -[[package]] -name = "erased-serde" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24e2389d65ab4fab27dc2a5de7b191e1f6617d1f1c8855c0dc569c94a4cbb18d" -dependencies = [ - "serde", - "typeid", -] - [[package]] name = "errno" version = "0.3.10" @@ -737,10 +661,22 @@ dependencies = [ "cfg-if", "js-sys", "libc", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", "wasm-bindgen", ] +[[package]] +name = "getrandom" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.13.3+wasi-0.2.2", + "windows-targets 0.52.6", +] + [[package]] name = "gif" version = "0.13.1" @@ -902,9 +838,9 @@ checksum = "9171a2ea8a68358193d15dd5d70c1c10a2afc3e7e4c5bc92bc9f025cebd7359c" [[package]] name = "httparse" -version = "1.9.5" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" +checksum = "f2d708df4e7140240a16cd6ab0ab65c972d7433ab77819ea693fde9c43811e2a" [[package]] name = "httpdate" @@ -923,9 +859,9 @@ dependencies = [ [[package]] name = "hyper" -version = "1.5.2" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "256fb8d4bd6413123cc9d91832d78325c48ff41677595be797d90f42969beae0" +checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" dependencies = [ "bytes", "futures-channel", @@ -1143,9 +1079,9 @@ dependencies = [ [[package]] name = "image-webp" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e031e8e3d94711a9ccb5d6ea357439ef3dcbed361798bd4071dc4d9793fbe22f" +checksum = "b77d01e822461baa8409e156015a1d91735549f0f2c17691bd2d996bef238f7f" dependencies = [ "byteorder-lite", "quick-error 2.0.1", @@ -1159,9 +1095,9 @@ checksum = "d0263a3d970d5c054ed9312c0057b4f3bde9c0b33836d3637361d4a9e6e7a408" [[package]] name = "indexmap" -version = "2.7.0" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" +checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" dependencies = [ "equivalent", "hashbrown 0.15.2", @@ -1192,9 +1128,9 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.10.1" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" [[package]] name = "itertools" @@ -1228,9 +1164,9 @@ checksum = "f5d4a7da358eff58addd2877a45865158f0d78c911d43a5784ceb7bbf52833b0" [[package]] name = "js-sys" -version = "0.3.76" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" dependencies = [ "once_cell", "wasm-bindgen", @@ -1256,9 +1192,9 @@ checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" [[package]] name = "libfuzzer-sys" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b9569d2f74e257076d8c6bfa73fb505b46b851e51ddaecc825944aa3bed17fa" +checksum = "cf78f52d400cf2d84a3a973a78a592b4adc535739e0a5597a0da6f0c357adc75" dependencies = [ "arbitrary", "cc", @@ -1300,12 +1236,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.24" +version = "0.4.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6ea2a48c204030ee31a7d7fc72c93294c92fe87ecb1789881c9543516e1a0d" -dependencies = [ - "value-bag", -] +checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f" [[package]] name = "loop9" @@ -1333,9 +1266,9 @@ checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" [[package]] name = "matchit" -version = "0.7.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" +checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3" [[package]] name = "maybe-rayon" @@ -1362,9 +1295,6 @@ name = "mcping" version = "1.0.0" dependencies = [ "arc-swap", - "askama", - "askama_axum", - "askama_escape", "axum", "axum-extra", "base64", @@ -1372,6 +1302,7 @@ dependencies = [ "futures-util", "pyng", "reqwest", + "rinja", "serde", "serde_json", "thiserror 2.0.11", @@ -1416,9 +1347,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ffbe83022cedc1d264172192511ae958937694cd57ce297164951b8b3568394" +checksum = "b8402cab7aefae129c6977bb0ff1b8fd9a04eb5b51efc50a70bea51cda0c7924" dependencies = [ "adler2", "simd-adler32", @@ -1431,27 +1362,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" dependencies = [ "libc", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", "windows-sys 0.52.0", ] -[[package]] -name = "multer" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83e87776546dc87511aa5ee218730c92b666d7264ab6ed41f9d215af9cd5224b" -dependencies = [ - "bytes", - "encoding_rs", - "futures-util", - "http", - "httparse", - "memchr", - "mime", - "spin", - "version_check", -] - [[package]] name = "new_debug_unreachable" version = "1.0.6" @@ -1722,7 +1636,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d" dependencies = [ "bytes", - "getrandom", + "getrandom 0.2.15", "rand", "ring", "rustc-hash", @@ -1785,7 +1699,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom", + "getrandom 0.2.15", ] [[package]] @@ -1864,7 +1778,7 @@ version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" dependencies = [ - "bitflags 2.7.0", + "bitflags 2.8.0", ] [[package]] @@ -1937,13 +1851,54 @@ checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" dependencies = [ "cc", "cfg-if", - "getrandom", + "getrandom 0.2.15", "libc", "spin", "untrusted", "windows-sys 0.52.0", ] +[[package]] +name = "rinja" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dc4940d00595430b3d7d5a01f6222b5e5b51395d1120bdb28d854bb8abb17a5" +dependencies = [ + "humansize", + "itoa", + "percent-encoding", + "rinja_derive", +] + +[[package]] +name = "rinja_derive" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d9ed0146aef6e2825f1b1515f074510549efba38d71f4554eec32eb36ba18b" +dependencies = [ + "basic-toml", + "memchr", + "mime", + "mime_guess", + "proc-macro2", + "quote", + "rinja_parser", + "rustc-hash", + "serde", + "syn", +] + +[[package]] +name = "rinja_parser" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93f9a866e2e00a7a1fb27e46e9e324a6f7c0e7edc4543cae1d38f4e4a100c610" +dependencies = [ + "memchr", + "nom", + "serde", +] + [[package]] name = "rust-fuzzy-search" version = "0.1.1" @@ -1964,11 +1919,11 @@ checksum = "c7fb8039b3032c191086b10f11f319a6e99e1e82889c5cc6046f515c9db1d497" [[package]] name = "rustix" -version = "0.38.43" +version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a78891ee6bf2340288408954ac787aa063d8e8817e9f53abb37c695c6d834ef6" +checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.7.0", + "bitflags 2.8.0", "errno", "libc", "linux-raw-sys", @@ -1977,9 +1932,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.21" +version = "0.23.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f287924602bf649d949c63dc8ac8b235fa5387d394020705b80c4eb597ce5b8" +checksum = "9fb9263ab4eb695e42321db096e3b8fbd715a59b154d5c88d82db2175b681ba7" dependencies = [ "once_cell", "ring", @@ -2000,9 +1955,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.10.1" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2bf47e6ff922db3825eb750c4e2ff784c6ff8fb9e13046ef6a1d1c5401b0b37" +checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" dependencies = [ "web-time", ] @@ -2026,9 +1981,9 @@ checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" [[package]] name = "ryu" -version = "1.0.18" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" +checksum = "6ea1a2d0a644769cc99faa24c3ad26b379b786fe7c36fd3c546254801650e6dd" [[package]] name = "scopeguard" @@ -2057,23 +2012,24 @@ dependencies = [ ] [[package]] -name = "serde_fmt" -version = "1.0.3" +name = "serde_json" +version = "1.0.138" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1d4ddca14104cd60529e8c7f7ba71a2c8acd8f7f5cfcdc2faf97eeb7c3010a4" +checksum = "d434192e7da787e94a6ea7e9670b26a036d0ca41e0b7efb2676dd32bae872949" dependencies = [ + "itoa", + "memchr", + "ryu", "serde", ] [[package]] -name = "serde_json" -version = "1.0.138" +name = "serde_path_to_error" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d434192e7da787e94a6ea7e9670b26a036d0ca41e0b7efb2676dd32bae872949" +checksum = "af99884400da37c88f5e9146b7f1fd0fbcae8f6eec4e9da38b67d05486f814a6" dependencies = [ "itoa", - "memchr", - "ryu", "serde", ] @@ -2180,89 +2136,11 @@ version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" -[[package]] -name = "sval" -version = "2.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6dc0f9830c49db20e73273ffae9b5240f63c42e515af1da1fceefb69fceafd8" - -[[package]] -name = "sval_buffer" -version = "2.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "429922f7ad43c0ef8fd7309e14d750e38899e32eb7e8da656ea169dd28ee212f" -dependencies = [ - "sval", - "sval_ref", -] - -[[package]] -name = "sval_dynamic" -version = "2.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f16ff5d839396c11a30019b659b0976348f3803db0626f736764c473b50ff4" -dependencies = [ - "sval", -] - -[[package]] -name = "sval_fmt" -version = "2.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c01c27a80b6151b0557f9ccbe89c11db571dc5f68113690c1e028d7e974bae94" -dependencies = [ - "itoa", - "ryu", - "sval", -] - -[[package]] -name = "sval_json" -version = "2.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0deef63c70da622b2a8069d8600cf4b05396459e665862e7bdb290fd6cf3f155" -dependencies = [ - "itoa", - "ryu", - "sval", -] - -[[package]] -name = "sval_nested" -version = "2.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a39ce5976ae1feb814c35d290cf7cf8cd4f045782fe1548d6bc32e21f6156e9f" -dependencies = [ - "sval", - "sval_buffer", - "sval_ref", -] - -[[package]] -name = "sval_ref" -version = "2.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb7c6ee3751795a728bc9316a092023529ffea1783499afbc5c66f5fabebb1fa" -dependencies = [ - "sval", -] - -[[package]] -name = "sval_serde" -version = "2.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a5572d0321b68109a343634e3a5d576bf131b82180c6c442dee06349dfc652a" -dependencies = [ - "serde", - "sval", - "sval_nested", -] - [[package]] name = "syn" -version = "2.0.96" +version = "2.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5d0adab1ae378d7f53bdebc67a39f1f151407ef230f0ce2883572f5d8985c80" +checksum = "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1" dependencies = [ "proc-macro2", "quote", @@ -2310,13 +2188,13 @@ checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" [[package]] name = "tempfile" -version = "3.15.0" +version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8a559c81686f576e8cd0290cd2a24a2a9ad80c98b3478856500fcbd7acd704" +checksum = "38c246215d7d24f48ae091a2902398798e05d978b24315d6efbc00ede9a8bb91" dependencies = [ "cfg-if", "fastrand", - "getrandom", + "getrandom 0.3.1", "once_cell", "rustix", "windows-sys 0.59.0", @@ -2493,9 +2371,9 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.22.22" +version = "0.22.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" +checksum = "02a8b472d1a3d7c18e2d61a489aee3453fd9031c33e4f55bd533f4a7adca1bee" dependencies = [ "indexmap", "serde", @@ -2536,7 +2414,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5" dependencies = [ - "bitflags 2.7.0", + "bitflags 2.8.0", "bytes", "futures-util", "http", @@ -2569,11 +2447,10 @@ checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tower-sombrero" -version = "0.0.5" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3375f3914ba7d6ff5d27f95262576ed65c7f346ef301d08751eeca96213e18e4" +checksum = "59d0202dfa4ae0feb0affc65f40ed20b2fa53fcc12e381abfa6881a26f71a639" dependencies = [ - "async-trait", "axum-core", "futures-util", "http", @@ -2660,12 +2537,6 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" -[[package]] -name = "typeid" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e13db2e0ccd5e14a544e8a246ba2312cd25223f616442d7f2cb0e3db614236e" - [[package]] name = "unicase" version = "2.8.1" @@ -2674,9 +2545,9 @@ checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" [[package]] name = "unicode-ident" -version = "1.0.14" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" +checksum = "a210d160f08b701c8721ba1c726c11662f877ea6b7094007e1ca9a1041945034" [[package]] name = "untrusted" @@ -2726,45 +2597,9 @@ checksum = "ea1b9bde601c35a8d06cb6238d98720fa7621d8b25c6c07893f84bebb6e0344c" [[package]] name = "valuable" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" - -[[package]] -name = "value-bag" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ef4c4aa54d5d05a279399bfa921ec387b7aba77caf7a682ae8d86785b8fdad2" -dependencies = [ - "value-bag-serde1", - "value-bag-sval2", -] - -[[package]] -name = "value-bag-serde1" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bb773bd36fd59c7ca6e336c94454d9c66386416734817927ac93d81cb3c5b0b" -dependencies = [ - "erased-serde", - "serde", - "serde_fmt", -] - -[[package]] -name = "value-bag-sval2" -version = "1.10.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53a916a702cac43a88694c97657d449775667bcd14b70419441d05b7fea4a83a" -dependencies = [ - "sval", - "sval_buffer", - "sval_dynamic", - "sval_fmt", - "sval_json", - "sval_ref", - "sval_serde", -] +checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" [[package]] name = "version-compare" @@ -2819,22 +2654,32 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasi" +version = "0.13.3+wasi-0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2" +dependencies = [ + "wit-bindgen-rt", +] + [[package]] name = "wasm-bindgen" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" dependencies = [ "cfg-if", "once_cell", + "rustversion", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" dependencies = [ "bumpalo", "log", @@ -2846,9 +2691,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.49" +version = "0.4.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38176d9b44ea84e9184eff0bc34cc167ed044f816accfe5922e54d84cf48eca2" +checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" dependencies = [ "cfg-if", "js-sys", @@ -2859,9 +2704,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2869,9 +2714,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", @@ -2882,15 +2727,18 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +dependencies = [ + "unicode-ident", +] [[package]] name = "web-sys" -version = "0.3.76" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04dd7223427d52553d3702c004d3b2fe07c148165faa56313cb00211e31c12bc" +checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" dependencies = [ "js-sys", "wasm-bindgen", @@ -2908,9 +2756,9 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.26.7" +version = "0.26.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d642ff16b7e79272ae451b7322067cdc17cadf68c23264be9d94a32319efe7e" +checksum = "2210b291f7ea53617fbafcc4939f10914214ec15aace5ba62293a668f322c5c9" dependencies = [ "rustls-pki-types", ] @@ -3138,9 +2986,9 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "0.6.24" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8d71a593cc5c42ad7876e2c1fda56f314f3754c084128833e64f1345ff8a03a" +checksum = "7e49d2d35d3fad69b39b94139037ecfb4f359f08958b9c11e7315ce770462419" dependencies = [ "memchr", ] @@ -3155,6 +3003,15 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "wit-bindgen-rt" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c" +dependencies = [ + "bitflags 2.8.0", +] + [[package]] name = "write16" version = "1.0.0" diff --git a/Cargo.toml b/Cargo.toml index 95e51f5..c033890 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,26 +7,24 @@ edition = "2021" [dependencies] reqwest = { version = "0.12", features = ["json", "trust-dns", "rustls-tls-webpki-roots"], default-features = false } tower-http = { version = "0.5", default-features = false, features = ["tracing", "fs", "set-header"] } -axum = { version = "0.7", features = ["tokio", "http1", "http2", "query"], default-features = false } +axum = { version = "0.8", features = ["tokio", "http1", "http2", "query"], default-features = false } tokio = { version = "1", features = ["rt-multi-thread", "macros", "signal"] } tracing-subscriber = { version = "0.3", features = ["json"] } futures-util = { version = "0.3", default-features = false } -tower-sombrero = { version = "0.0.5", features = ["axum"] } -askama = { version = "0.12", features = ["with-axum"] } -bustdir = { version = "0.1", features = ["askama"] } +tower-sombrero = { version = "0.1", features = ["axum"] } +bustdir = { version = "0.1", features = ["rinja"] } tokio-util = { version = "0.7", features = ["rt"] } serde = { version = "1", features = ["derive"] } pyng = { path = "pyng" } -askama_escape = "0.10" -askama_axum = "0.4" valk-utils = "0.1" -axum-extra = "0.9" +axum-extra = "0.10" serde_json = "1" thiserror = "2" tracing = "0.1" base64 = "0.22" arc-swap = "1" tower = "0.4" +rinja = "0.3" vss = "0.1" [workspace] @@ -34,7 +32,5 @@ members = [ "pyng" ] -[package.metadata.cargo-machete] -ignored = ["askama_axum"] diff --git a/src/filters.rs b/src/filters.rs index 1a9f204..5e95b53 100644 --- a/src/filters.rs +++ b/src/filters.rs @@ -1,9 +1,8 @@ use std::fmt::{Display, Formatter, Write}; -use askama::Html; -use askama_escape::Escaper; #[allow(unused_imports)] -pub use bustdir::askama::bust_dir; +pub use bustdir::rinja::bust_dir; +use rinja::filters::{Escaper as _, Html}; const SECTION: char = 'ยง'; @@ -30,7 +29,7 @@ impl Display for Span<'_> { } f.write_char('"')?; f.write_char('>')?; - Html.write_escaped(&mut *f, self.content)?; + Html.write_escaped_str(&mut *f, self.content)?; f.write_str("")?; Ok(()) } @@ -46,7 +45,7 @@ impl<'a> Span<'a> { } } -pub fn mojang_colorize(s: T) -> askama::Result { +pub fn mojang_colorize(s: T) -> rinja::Result { let s = s.to_string(); let mut output = String::new(); let mut last_was_section = false; @@ -97,7 +96,7 @@ pub fn mojang_colorize(s: T) -> askama::Result { } #[allow(clippy::unnecessary_wraps)] -pub fn api_color(s: T) -> askama::Result<&'static str> { +pub fn api_color(s: T) -> rinja::Result<&'static str> { Ok(match s.to_string().as_str() { "Operational" => "green", "PossibleProblems" => "yellow", @@ -107,7 +106,7 @@ pub fn api_color(s: T) -> askama::Result<&'static str> { } #[allow(clippy::unnecessary_wraps)] -pub fn api_words(s: T) -> askama::Result<&'static str> { +pub fn api_words(s: T) -> rinja::Result<&'static str> { Ok(match s.to_string().as_str() { "Operational" => "OK", "PossibleProblems" => "Flaky", diff --git a/src/main.rs b/src/main.rs index 12e89a1..c999df2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,6 +5,7 @@ mod services; mod structures; use std::{ + convert::Infallible, net::{IpAddr, Ipv4Addr, SocketAddr}, str::FromStr, sync::Arc, @@ -12,7 +13,6 @@ use std::{ }; use arc_swap::ArcSwap; -use askama::Template; use axum::{ body::Body, extract::{FromRequestParts, Path, Query, Request, State}, @@ -23,7 +23,7 @@ use axum::{ HeaderName, HeaderValue, StatusCode, }, middleware::Next, - response::{IntoResponse, Redirect, Response}, + response::{Html, IntoResponse, Redirect, Response}, routing::get, Extension, Router, }; @@ -31,6 +31,7 @@ use axum_extra::routing::RouterExt; use base64::{prelude::BASE64_STANDARD, Engine}; use bustdir::BustDir; use reqwest::{header::HeaderMap, redirect::Policy, Client}; +use rinja::Template; use serde::{Deserialize, Serialize}; use tokio::net::TcpListener; use tokio_util::sync::CancellationToken; @@ -229,7 +230,7 @@ static ALLOW_CORS_NAME: HeaderName = HeaderName::from_static("access-control-all static ALLOW_CORS_VALUE: HeaderValue = HeaderValue::from_static("*"); #[derive(Template)] -#[template(path = "index.hbs", escape = "html", ext = "html")] +#[template(path = "index.hbs", escape = "html")] pub struct RootTemplate { svc_status: ServicesResponse, root_url: Arc, @@ -237,7 +238,10 @@ pub struct RootTemplate { nonce: String, } -async fn root(State(state): State, CspNonce(nonce): CspNonce) -> RootTemplate { +async fn root( + State(state): State, + CspNonce(nonce): CspNonce, +) -> HtmlTemplate { // create a copy of the services response let svc_status = **state.svc_response.load(); RootTemplate { @@ -246,22 +250,27 @@ async fn root(State(state): State, CspNonce(nonce): CspNonce) -> RootT bd: state.bust_dir, nonce, } + .into() } #[derive(Template)] -#[template(path = "api.hbs", escape = "html", ext = "html")] +#[template(path = "api.hbs", escape = "html")] pub struct ApiTemplate { bd: Arc, root_url: Arc, nonce: String, } -async fn api_info(State(state): State, CspNonce(nonce): CspNonce) -> ApiTemplate { +async fn api_info( + State(state): State, + CspNonce(nonce): CspNonce, +) -> HtmlTemplate { ApiTemplate { root_url: state.root_url, bd: state.bust_dir, nonce, } + .into() } #[derive(Deserialize)] @@ -273,7 +282,7 @@ pub struct PingQuery { async fn ping_redirect( State(state): State, Query(form): Query, -) -> Result { +) -> Result { Ok(Redirect::to(&format!( "{}/ping/{}/{}", state.root_url, form.edition, form.address @@ -281,7 +290,7 @@ async fn ping_redirect( } #[derive(Template)] -#[template(path = "ping-page.hbs", escape = "html", ext = "html")] +#[template(path = "ping-page.hbs", escape = "html")] pub struct PingPageTemplate { svc_status: ServicesResponse, root_url: Arc, @@ -295,7 +304,7 @@ async fn ping_page( State(state): State, CspNonce(nonce): CspNonce, Path((edition, hostname)): Path<(String, String)>, -) -> Result { +) -> Result, Failure> { match edition.as_str() { "java" | "bedrock" => {} _ => return Err(Failure::UnknownEdition), @@ -307,7 +316,8 @@ async fn ping_page( hostname, edition, nonce, - }) + } + .into()) } async fn ping_generic(edition: &str, hostname: String) -> Result { @@ -320,7 +330,7 @@ async fn ping_generic(edition: &str, hostname: String) -> Result, @@ -335,21 +345,21 @@ async fn ping_frame( CspNonce(nonce): CspNonce, Path((edition, hostname)): Path<(String, String)>, CfConnectingIp(ip): CfConnectingIp, -) -> Result { +) -> Result, Failure> { info!(edition, path = "frame", target = hostname, on_behalf = ?ip, "Pinging server"); let ping = ping_generic(&edition, hostname.clone()).await?; - Ok(PingFrameTemplate { + Ok(HtmlTemplate(PingFrameTemplate { ping, root_url: state.root_url, bd: state.bust_dir, edition, hostname, nonce, - }) + })) } #[derive(Template)] -#[template(path = "ping-element.hbs", escape = "html", ext = "html")] +#[template(path = "ping-element.hbs", escape = "html")] pub struct PingElementTemplate { ping: MCPingResponse, bd: Arc, @@ -362,7 +372,7 @@ async fn ping_markup( State(state): State, Path((edition, hostname)): Path<(String, String)>, CfConnectingIp(ip): CfConnectingIp, -) -> Result { +) -> Result, MarkupOnlyFailure> { info!(edition, path = "markup", target = hostname, on_behalf = ?ip, "Pinging server"); let ping = ping_generic(&edition, hostname.clone()).await?; Ok(PingElementTemplate { @@ -371,7 +381,8 @@ async fn ping_markup( root_url: state.root_url, edition, hostname, - }) + } + .into()) } async fn ping_image( @@ -422,13 +433,17 @@ async fn no_address() -> Failure { } #[allow(clippy::unused_async)] -async fn handle_404(State(state): State, CspNonce(nonce): CspNonce) -> ErrorTemplate { +async fn handle_404( + State(state): State, + CspNonce(nonce): CspNonce, +) -> HtmlTemplate { ErrorTemplate { error: "404 not found".to_owned(), bd: state.bust_dir, root_url: state.root_url, nonce, } + .into() } #[derive(thiserror::Error, Debug)] @@ -492,7 +507,7 @@ pub struct ErrorSerialization { } #[derive(Template)] -#[template(path = "error.hbs", escape = "html", ext = "html")] +#[template(path = "error.hbs", escape = "html")] pub struct ErrorTemplate { error: String, bd: Arc, @@ -501,7 +516,7 @@ pub struct ErrorTemplate { } #[derive(Template)] -#[template(path = "error-element.hbs", escape = "html", ext = "html")] +#[template(path = "error-element.hbs", escape = "html")] pub struct ErrorElement { error: String, } @@ -554,7 +569,7 @@ async fn error_middleware( (status, Json(infallible_json_serialize(&error))).into_response() } else if markup_only { let error = ErrorElement { error }; - (status, error).into_response() + (status, HtmlTemplate(error)).into_response() } else { let error = ErrorTemplate { error, @@ -562,7 +577,7 @@ async fn error_middleware( root_url: state.root_url, nonce, }; - (status, error).into_response() + (status, HtmlTemplate(error)).into_response() } } else { resp @@ -581,8 +596,7 @@ impl IntoResponse for Png { pub struct CfConnectingIp(pub IpAddr); -#[axum::async_trait] -impl FromRequestParts for CfConnectingIp { +impl FromRequestParts for CfConnectingIp { type Rejection = Failure; async fn from_request_parts(parts: &mut Parts, _: &S) -> Result { @@ -598,3 +612,23 @@ impl FromRequestParts for CfConnectingIp { Ok(Self(ip)) } } + +pub struct HtmlTemplate(pub T); + +impl IntoResponse for HtmlTemplate { + fn into_response(self) -> Response { + match self.0.render() { + Ok(v) => Html(v).into_response(), + Err(e) => { + error!(source = ?e, "Could not template"); + (StatusCode::INTERNAL_SERVER_ERROR, "Templating error").into_response() + } + } + } +} + +impl From for HtmlTemplate { + fn from(value: T) -> Self { + HtmlTemplate(value) + } +}