diff --git a/.github/workflows/dev-release.yml b/.github/workflows/dev-release.yml index d0e77aa..39fd5d2 100644 --- a/.github/workflows/dev-release.yml +++ b/.github/workflows/dev-release.yml @@ -2,10 +2,7 @@ name: Push Dev on: push: - branches: - - "**" - tags-ignore: - - '**' + branches: [ "dev" ] jobs: docker: diff --git a/Cargo.lock b/Cargo.lock index 2360c76..045a3a6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,6 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 4 +version = 3 [[package]] name = "addr2line" @@ -60,9 +60,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.95" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04" +checksum = "4c95c10ba0b00a02636238b814946408b1322d5ac4760326e6fb8ec956d85775" [[package]] name = "arbitrary" @@ -73,6 +73,17 @@ dependencies = [ "derive_arbitrary", ] +[[package]] +name = "async-trait" +version = "0.1.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", +] + [[package]] name = "atomic-waker" version = "1.1.2" @@ -85,7 +96,7 @@ version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" dependencies = [ - "hermit-abi", + "hermit-abi 0.1.19", "libc", "winapi", ] @@ -98,15 +109,15 @@ checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "axum" -version = "0.8.1" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d6fd624c75e18b3b4c6b9caf42b1afe24437daaee904069137d8bab077be8b8" +checksum = "49c41b948da08fb481a94546cd874843adc1142278b0af4badf9b1b78599d68d" dependencies = [ + "async-trait", "axum-core", "axum-macros", "base64", "bytes", - "form_urlencoded", "futures-util", "http", "http-body", @@ -125,7 +136,7 @@ dependencies = [ "serde_path_to_error", "serde_urlencoded", "sha1", - "sync_wrapper", + "sync_wrapper 1.0.1", "tokio", "tokio-tungstenite", "tower", @@ -136,10 +147,11 @@ dependencies = [ [[package]] name = "axum-core" -version = "0.5.0" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df1362f362fd16024ae199c1970ce98f9661bf5ef94b9808fee734bc3698b733" +checksum = "09f2bd6146b97ae3359fa0cc6d6b376d9539582c7b4220f041a33ec24c226199" dependencies = [ + "async-trait", "bytes", "futures-util", "http", @@ -148,7 +160,7 @@ dependencies = [ "mime", "pin-project-lite", "rustversion", - "sync_wrapper", + "sync_wrapper 1.0.1", "tower-layer", "tower-service", "tracing", @@ -156,13 +168,13 @@ dependencies = [ [[package]] name = "axum-macros" -version = "0.5.0" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "604fde5e028fea851ce1d8570bbdc034bec850d157f7569d10f347d06808c05c" +checksum = "57d123550fa8d071b7255cb0cc04dc302baa6c8c4a79f55701552684d8399bce" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.87", ] [[package]] @@ -194,9 +206,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.8.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" [[package]] name = "block-buffer" @@ -209,9 +221,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.17.0" +version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] name = "byteorder" @@ -221,9 +233,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.10.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f61dac84819c6588b558454b194026eb1f09c293b9036ae9b159e74e73ab6cf9" +checksum = "9ac0150caa2ae65ca5bd83f25c7de183dea78d4d366469f148435e2acfbad0da" [[package]] name = "bzip2" @@ -237,9 +249,9 @@ dependencies = [ [[package]] name = "bzip2-sys" -version = "0.1.12+1.0.8" +version = "0.1.11+1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72ebc2f1a417f01e1da30ef264ee86ae31d2dcd2d603ea283d3c244a883ca2a9" +checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" dependencies = [ "cc", "libc", @@ -248,9 +260,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.13" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7777341816418c02e033934a09f20dc0ccaf65a5201ef8a450ae0105a573fda" +checksum = "fd9de9f2205d5ef3fd67e685b0df337994ddd4495e2a28d185500d0e1edfea47" dependencies = [ "jobserver", "libc", @@ -271,9 +283,9 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "chrono" -version = "0.4.39" +version = "0.4.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" +checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" dependencies = [ "android-tzdata", "iana-time-zone", @@ -376,9 +388,9 @@ checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "cpufeatures" -version = "0.2.17" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +checksum = "0ca741a962e1b0bff6d724a1a0958b686406e853bb14061f218562e1896f95e6" dependencies = [ "libc", ] @@ -440,18 +452,18 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.14" +version = "0.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ba6d68e24814cb8de6bb986db8222d3a027d15872cabc0d18817bc3c0e4471" +checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-utils" -version = "0.8.21" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" [[package]] name = "crypto-common" @@ -490,9 +502,9 @@ dependencies = [ [[package]] name = "data-encoding" -version = "2.8.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "575f75dfd25738df5b91b8e43e14d44bda14637a58fae779fd2b064f8bf3e010" +checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" [[package]] name = "deflate64" @@ -517,7 +529,7 @@ checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.87", ] [[package]] @@ -559,7 +571,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.87", ] [[package]] @@ -597,12 +609,12 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.10" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.52.0", ] [[package]] @@ -627,9 +639,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.3.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" +checksum = "486f806e73c5707928240ddc295403b1b93c96a02038563881c4a2fd84b81ac4" [[package]] name = "filetime" @@ -650,7 +662,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" dependencies = [ "crc32fast", - "miniz_oxide 0.8.4", + "miniz_oxide 0.8.0", ] [[package]] @@ -760,19 +772,7 @@ checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", "libc", - "wasi 0.11.0+wasi-snapshot-preview1", -] - -[[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", + "wasi", ] [[package]] @@ -783,9 +783,9 @@ checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" [[package]] name = "h2" -version = "0.4.7" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccae279728d634d083c00f6099cb58f01cc99c145b84b8be2f6c74618d79922e" +checksum = "524e8ac6999421f49a846c2d4411f337e53497d8ec55d67753beffa43c5d9205" dependencies = [ "atomic-waker", "bytes", @@ -793,7 +793,7 @@ dependencies = [ "futures-core", "futures-sink", "http", - "indexmap 2.7.1", + "indexmap 2.6.0", "slab", "tokio", "tokio-util", @@ -823,9 +823,9 @@ checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" [[package]] name = "hashbrown" -version = "0.15.2" +version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" +checksum = "3a9bfc1af68b1726ea47d3d5109de126281def866b33970e10fbab11b5dafab3" [[package]] name = "heapless" @@ -852,6 +852,12 @@ dependencies = [ "libc", ] +[[package]] +name = "hermit-abi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + [[package]] name = "hmac" version = "0.12.1" @@ -863,18 +869,18 @@ dependencies = [ [[package]] name = "home" -version = "0.5.11" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.52.0", ] [[package]] name = "http" -version = "1.2.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea" +checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" dependencies = [ "bytes", "fnv", @@ -906,9 +912,9 @@ dependencies = [ [[package]] name = "httparse" -version = "1.10.0" +version = "1.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2d708df4e7140240a16cd6ab0ab65c972d7433ab77819ea693fde9c43811e2a" +checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" [[package]] name = "httpdate" @@ -918,9 +924,9 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "hyper" -version = "1.6.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" +checksum = "bbbff0a806a4728c99295b254c8838933b5b082d75e3cb70c8dab21fdfbcfa9a" dependencies = [ "bytes", "futures-channel", @@ -939,9 +945,9 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.27.5" +version = "0.27.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" +checksum = "08afdbb5c31130e3034af566421053ab03787c640246a446327f550d11bcb333" dependencies = [ "futures-util", "http", @@ -1127,7 +1133,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.87", ] [[package]] @@ -1169,22 +1175,22 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.7.1" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" +checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" dependencies = [ "equivalent", - "hashbrown 0.15.2", + "hashbrown 0.15.1", "serde", ] [[package]] name = "inotify" -version = "0.11.0" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f37dccff2791ab604f9babef0ba14fbe0be30bd368dc541e2b08d07c8aa908f3" +checksum = "fdd168d97690d0b8c412d6b6c10360277f4d7ee495c5d0d5d5fe0854923255cc" dependencies = [ - "bitflags 2.8.0", + "bitflags 1.3.2", "inotify-sys", "libc", ] @@ -1208,10 +1214,19 @@ dependencies = [ ] [[package]] -name = "ipnet" -version = "2.11.0" +name = "instant" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "ipnet" +version = "2.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" [[package]] name = "is_ci" @@ -1221,9 +1236,9 @@ checksum = "7655c9839580ee829dfacba1d1278c2b7883e50a277ff7541299489d6bdfdc45" [[package]] name = "itoa" -version = "1.0.14" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" [[package]] name = "jobserver" @@ -1236,11 +1251,10 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.77" +version = "0.3.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9" dependencies = [ - "once_cell", "wasm-bindgen", ] @@ -1272,9 +1286,9 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.169" +version = "0.2.164" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" +checksum = "433bfe06b8c75da9b2e3fbea6e5329ff87748f0b144ef75306e674c3f6f7c13f" [[package]] name = "libredox" @@ -1282,22 +1296,22 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.6.0", "libc", "redox_syscall", ] [[package]] name = "linux-raw-sys" -version = "0.4.15" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" [[package]] name = "litemap" -version = "0.7.4" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" +checksum = "643cb0b8d4fcc284004d5fd0d67ccf61dfffadb7f75e1e71bc420f4688a3a704" [[package]] name = "lock_api" @@ -1317,9 +1331,9 @@ checksum = "9374ef4228402d4b7e403e5838cb880d9ee663314b0a900d5a6aabf0c213552e" [[package]] name = "log" -version = "0.4.25" +version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" [[package]] name = "lzma-rs" @@ -1342,9 +1356,9 @@ dependencies = [ [[package]] name = "matchit" -version = "0.8.4" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3" +checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" [[package]] name = "memchr" @@ -1369,30 +1383,31 @@ dependencies = [ [[package]] name = "miniz_oxide" -version = "0.8.4" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3b1c9bd4fe1f0f8b387f6eb9eb3b4a1aa26185e5750efb9140301703f62cd1b" +checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" dependencies = [ "adler2", ] [[package]] name = "mio" -version = "1.0.3" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" +checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" dependencies = [ + "hermit-abi 0.3.9", "libc", "log", - "wasi 0.11.0+wasi-snapshot-preview1", + "wasi", "windows-sys 0.52.0", ] [[package]] name = "native-tls" -version = "0.2.13" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dab59f8e050d5df8e4dd87d9206fb6f65a483e20ac9fda365ade4fab353196c" +checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" dependencies = [ "libc", "log", @@ -1422,7 +1437,7 @@ version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.6.0", "cfg-if", "cfg_aliases", "libc", @@ -1430,11 +1445,11 @@ dependencies = [ [[package]] name = "notify" -version = "8.0.0" +version = "7.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fee8403b3d66ac7b26aee6e40a897d85dc5ce26f44da36b8b73e987cc52e943" +checksum = "c533b4c39709f9ba5005d8002048266593c1cfaf3c5f0739d5b8ab0c6c504009" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.6.0", "filetime", "fsevent-sys", "inotify", @@ -1444,14 +1459,17 @@ dependencies = [ "mio", "notify-types", "walkdir", - "windows-sys 0.59.0", + "windows-sys 0.52.0", ] [[package]] name = "notify-types" -version = "2.0.0" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e0826a989adedc2a244799e823aece04662b66609d96af8dff7ac6df9a8925d" +checksum = "7393c226621f817964ffb3dc5704f9509e107a8b024b489cc2c1b217378785df" +dependencies = [ + "instant", +] [[package]] name = "nu-ansi-term" @@ -1489,17 +1507,17 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.20.3" +version = "1.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" [[package]] name = "openssl" -version = "0.10.70" +version = "0.10.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61cfb4e166a8bb8c9b55c500bc2308550148ece889be90f609377e58140f42c6" +checksum = "6174bc48f102d208783c2c84bf931bb75927a617866870de8a4ea85597f871f5" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.6.0", "cfg-if", "foreign-types", "libc", @@ -1516,20 +1534,20 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.87", ] [[package]] name = "openssl-probe" -version = "0.1.6" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.105" +version = "0.9.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b22d5b84be05a8d6947c7cb71f7c849aa0f112acd4bf51c2a7c1c988ac0a9dc" +checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741" dependencies = [ "cc", "libc", @@ -1599,9 +1617,9 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pin-project-lite" -version = "0.2.16" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" +checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff" [[package]] name = "pin-utils" @@ -1627,7 +1645,7 @@ version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" dependencies = [ - "zerocopy 0.7.35", + "zerocopy", ] [[package]] @@ -1656,18 +1674,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.93" +version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99" +checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.38" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" dependencies = [ "proc-macro2", ] @@ -1679,19 +1697,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", - "rand_chacha 0.3.1", - "rand_core 0.6.4", -] - -[[package]] -name = "rand" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3779b94aeb87e8bd4e834cee3650289ee9e0d5677f976ecdb6d219e5f4f6cd94" -dependencies = [ - "rand_chacha 0.9.0", - "rand_core 0.9.0", - "zerocopy 0.8.17", + "rand_chacha", + "rand_core", ] [[package]] @@ -1701,17 +1708,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "rand_core 0.6.4", -] - -[[package]] -name = "rand_chacha" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" -dependencies = [ - "ppv-lite86", - "rand_core 0.9.0", + "rand_core", ] [[package]] @@ -1720,26 +1717,16 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.15", -] - -[[package]] -name = "rand_core" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b08f3c9802962f7e1b25113931d94f43ed9725bebc59db9d0c3e9a23b67e15ff" -dependencies = [ - "getrandom 0.3.1", - "zerocopy 0.8.17", + "getrandom", ] [[package]] name = "redox_syscall" -version = "0.5.8" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" +checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.6.0", ] [[package]] @@ -1748,7 +1735,7 @@ version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ - "getrandom 0.2.15", + "getrandom", "libredox", "thiserror 1.0.69", ] @@ -1799,9 +1786,9 @@ checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "reqwest" -version = "0.12.12" +version = "0.12.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43e734407157c3c2034e0258f5e4473ddb361b1e85f95a66690d67264d7cd1da" +checksum = "a77c62af46e79de0a562e1a9849205ffcb7fc1238876e9bd743357570e04046f" dependencies = [ "base64", "bytes", @@ -1829,11 +1816,10 @@ dependencies = [ "serde", "serde_json", "serde_urlencoded", - "sync_wrapper", + "sync_wrapper 1.0.1", "system-configuration", "tokio", "tokio-native-tls", - "tower", "tower-service", "url", "wasm-bindgen", @@ -1850,7 +1836,7 @@ checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" dependencies = [ "cc", "cfg-if", - "getrandom 0.2.15", + "getrandom", "libc", "spin", "untrusted", @@ -1874,22 +1860,22 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.44" +version = "0.38.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" +checksum = "99e4ea3e1cdc4b559b8e5650f9c8e5998e3e5c1343b4eaf034565f32318d63c0" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.6.0", "errno", "libc", "linux-raw-sys", - "windows-sys 0.59.0", + "windows-sys 0.52.0", ] [[package]] name = "rustls" -version = "0.23.23" +version = "0.23.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47796c98c480fce5406ef69d1c76378375492c3b0a0de587be0c1d9feb12f395" +checksum = "7f1a745511c54ba6d4465e8d5dfbd81b45791756de28d4981af70d6dca128f1e" dependencies = [ "once_cell", "rustls-pki-types", @@ -1909,9 +1895,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.11.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" +checksum = "16f1201b3c9a7ee8039bcadc17b7e605e2945b27eee7631788c1bd2b0643674b" [[package]] name = "rustls-webpki" @@ -1926,15 +1912,15 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.19" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" +checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248" [[package]] name = "ryu" -version = "1.0.19" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ea1a2d0a644769cc99faa24c3ad26b379b786fe7c36fd3c546254801650e6dd" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" [[package]] name = "same-file" @@ -1947,9 +1933,9 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.27" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" +checksum = "01227be5826fa0690321a2ba6c5cd57a19cf3f6a09e76973b58e61de6ab9d1c1" dependencies = [ "windows-sys 0.59.0", ] @@ -1962,7 +1948,7 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "sculptor" -version = "0.4.1-dev" +version = "0.4.0" dependencies = [ "anyhow", "axum", @@ -1972,18 +1958,18 @@ dependencies = [ "dashmap", "dotenvy", "faster-hex", - "indexmap 2.7.1", + "indexmap 2.6.0", "lazy_static", "notify", - "rand 0.9.0", + "rand", "reqwest", "ring", "semver", "serde", "serde_json", - "thiserror 2.0.11", + "thiserror 2.0.3", "tokio", - "toml 0.8.20", + "toml 0.8.19", "tower-http", "tracing", "tracing-appender", @@ -2000,7 +1986,7 @@ version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.6.0", "core-foundation", "core-foundation-sys", "libc", @@ -2009,9 +1995,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.14.0" +version = "2.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" +checksum = "fa39c7303dc58b5543c94d22c1766b0d31f2ee58306363ea622b10bbc075eaa2" dependencies = [ "core-foundation-sys", "libc", @@ -2019,28 +2005,28 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.25" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f79dfe2d285b0488816f30e700a7438c5a73d816b5b7d3ac72fbc48b0d185e03" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" [[package]] name = "serde" -version = "1.0.217" +version = "1.0.215" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" +checksum = "6513c1ad0b11a9376da888e3e0baa0077f1aed55c17f50e7b2397136129fb88f" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.217" +version = "1.0.215" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" +checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.87", ] [[package]] @@ -2054,9 +2040,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.138" +version = "1.0.132" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d434192e7da787e94a6ea7e9670b26a036d0ca41e0b7efb2676dd32bae872949" +checksum = "d726bfaff4b320266d395898905d0eba0345aae23b54aee3a737e260fd46db03" dependencies = [ "itoa", "memchr", @@ -2165,9 +2151,9 @@ checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "socket2" -version = "0.5.8" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" +checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" dependencies = [ "libc", "windows-sys 0.52.0", @@ -2220,9 +2206,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.98" +version = "2.0.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1" +checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d" dependencies = [ "proc-macro2", "quote", @@ -2231,9 +2217,15 @@ dependencies = [ [[package]] name = "sync_wrapper" -version = "1.0.2" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + +[[package]] +name = "sync_wrapper" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" dependencies = [ "futures-core", ] @@ -2246,7 +2238,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.87", ] [[package]] @@ -2255,7 +2247,7 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.6.0", "core-foundation", "system-configuration-sys", ] @@ -2272,13 +2264,12 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.16.0" +version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38c246215d7d24f48ae091a2902398798e05d978b24315d6efbc00ede9a8bb91" +checksum = "28cce251fcbc87fac86a866eeb0d6c2d536fc16d06f184bb61aeae11aa4cee0c" dependencies = [ "cfg-if", "fastrand", - "getrandom 0.3.1", "once_cell", "rustix", "windows-sys 0.59.0", @@ -2310,11 +2301,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.11" +version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d452f284b73e6d76dd36758a0c8684b1d5be31f92b89d07fd5822175732206fc" +checksum = "c006c85c7651b3cf2ada4584faa36773bd07bac24acfb39f3c431b36d7e667aa" dependencies = [ - "thiserror-impl 2.0.11", + "thiserror-impl 2.0.3", ] [[package]] @@ -2325,18 +2316,18 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.87", ] [[package]] name = "thiserror-impl" -version = "2.0.11" +version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26afc1baea8a989337eeb52b6e72a039780ce45c3edfcc9c5b9d112feeb173c2" +checksum = "f077553d607adc1caf65430528a576c757a71ed73944b66ebb58ef2bbd243568" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.87", ] [[package]] @@ -2351,9 +2342,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.37" +version = "0.3.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" +checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" dependencies = [ "deranged", "itoa", @@ -2372,9 +2363,9 @@ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.19" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de" +checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" dependencies = [ "num-conv", "time-core", @@ -2392,9 +2383,9 @@ dependencies = [ [[package]] name = "tokio" -version = "1.43.0" +version = "1.41.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d61fa4ffa3de412bfea335c6ecff681de2b609ba3c77ef3e00e521813a9ed9e" +checksum = "22cfb5bee7a6a52939ca9224d6ac897bb669134078daa8735560897f69de4d33" dependencies = [ "backtrace", "bytes", @@ -2410,13 +2401,13 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.5.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" +checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.87", ] [[package]] @@ -2431,19 +2422,20 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.26.1" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37" +checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" dependencies = [ "rustls", + "rustls-pki-types", "tokio", ] [[package]] name = "tokio-tungstenite" -version = "0.26.1" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4bf6fecd69fcdede0ec680aaf474cdab988f9de6bc73d3758f0160e3b7025a" +checksum = "edc5f74e248dc973e0dbb7b74c7e0d6fcc301c694ff50049504004ef4d0cdcd9" dependencies = [ "futures-util", "log", @@ -2453,9 +2445,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.13" +version = "0.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" +checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" dependencies = [ "bytes", "futures-core", @@ -2475,9 +2467,9 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.20" +version = "0.8.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd87a5cdd6ffab733b2f74bc4fd7ee5fff6634124999ac278c35fc78c6120148" +checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" dependencies = [ "serde", "serde_spanned", @@ -2496,11 +2488,11 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.22.24" +version = "0.22.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17b4795ff5edd201c7cd6dca065ae59972ce77d1b80fa0a84d94950ece7d1474" +checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" dependencies = [ - "indexmap 2.7.1", + "indexmap 2.6.0", "serde", "serde_spanned", "toml_datetime", @@ -2509,14 +2501,14 @@ dependencies = [ [[package]] name = "tower" -version = "0.5.2" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" +checksum = "2873938d487c3cfb9aed7546dc9f2711d867c9f90c46b889989a2cb84eba6b4f" dependencies = [ "futures-core", "futures-util", "pin-project-lite", - "sync_wrapper", + "sync_wrapper 0.1.2", "tokio", "tower-layer", "tower-service", @@ -2525,11 +2517,11 @@ dependencies = [ [[package]] name = "tower-http" -version = "0.6.2" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "403fa3b783d4b626a8ad51d766ab03cb6d2dbfc46b1c5d4448395e6628dc9697" +checksum = "8437150ab6bbc8c5f0f519e3d5ed4aa883a83dd4cdd3d1b21f9482936046cb97" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.6.0", "bytes", "http", "http-body", @@ -2553,9 +2545,9 @@ checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.41" +version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ "log", "pin-project-lite", @@ -2577,20 +2569,20 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.28" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.87", ] [[package]] name = "tracing-core" -version = "0.1.33" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" dependencies = [ "once_cell", "valuable", @@ -2619,9 +2611,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.19" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" dependencies = [ "chrono", "matchers", @@ -2644,9 +2636,9 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "tungstenite" -version = "0.26.1" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413083a99c579593656008130e29255e54dcaae495be556cc26888f211648c24" +checksum = "18e5b8366ee7a95b16d32197d0b2604b43a0be89dc5fac9f8e96ccafbaedda8a" dependencies = [ "byteorder", "bytes", @@ -2654,9 +2646,9 @@ dependencies = [ "http", "httparse", "log", - "rand 0.8.5", + "rand", "sha1", - "thiserror 2.0.11", + "thiserror 1.0.69", "utf-8", ] @@ -2668,9 +2660,9 @@ checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "unicode-ident" -version = "1.0.16" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a210d160f08b701c8721ba1c726c11662f877ea6b7094007e1ca9a1041945034" +checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" [[package]] name = "untrusted" @@ -2680,9 +2672,9 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.5.4" +version = "2.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" +checksum = "8d157f1b96d14500ffdc1f10ba712e780825526c03d9a49b4d0324b0d9113ada" dependencies = [ "form_urlencoded", "idna", @@ -2709,18 +2701,18 @@ checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] name = "uuid" -version = "1.13.1" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ced87ca4be083373936a67f8de945faa23b6b42384bd5b64434850802c6dccd0" +checksum = "f8c5f0a0af699448548ad1a2fbf920fb4bee257eae39953ba95cb84891a0446a" dependencies = [ "serde", ] [[package]] name = "valuable" -version = "0.1.1" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" [[package]] name = "vcpkg" @@ -2759,59 +2751,49 @@ 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.100" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e" dependencies = [ "cfg-if", "once_cell", - "rustversion", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.100" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" +checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358" dependencies = [ "bumpalo", "log", + "once_cell", "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.87", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.50" +version = "0.4.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" +checksum = "cc7ec4f8827a71586374db3e87abdb5a2bb3a15afed140221307c3ec06b1f63b" dependencies = [ "cfg-if", "js-sys", - "once_cell", "wasm-bindgen", "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.100" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2819,31 +2801,28 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.100" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.87", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.100" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" -dependencies = [ - "unicode-ident", -] +checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d" [[package]] name = "web-sys" -version = "0.3.77" +version = "0.3.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" +checksum = "f6488b90108c040df0fe62fa815cbdee25124641df01814dd7282749234c6112" dependencies = [ "js-sys", "wasm-bindgen", @@ -3015,22 +2994,13 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "0.7.2" +version = "0.6.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59690dea168f2198d1a3b0cac23b8063efcd11012f10ae4698f284808c8ef603" +checksum = "36c1fec1a2bb5866f07c25f68c26e565c4c200aebb96d7e55710c19d3e8ac49b" dependencies = [ "memchr", ] -[[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" @@ -3045,9 +3015,9 @@ checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" [[package]] name = "yoke" -version = "0.7.5" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +checksum = "6c5b1314b079b0930c31e3af543d8ee1757b1951ae1e1565ec704403a7240ca5" dependencies = [ "serde", "stable_deref_trait", @@ -3057,13 +3027,13 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.7.5" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +checksum = "28cc31741b18cb6f1d5ff12f5b7523e3d6eb0852bbbad19d73905511d9849b95" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.87", "synstructure", ] @@ -3074,16 +3044,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ "byteorder", - "zerocopy-derive 0.7.35", -] - -[[package]] -name = "zerocopy" -version = "0.8.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa91407dacce3a68c56de03abe2760159582b846c6a4acd2f456618087f12713" -dependencies = [ - "zerocopy-derive 0.8.17", + "zerocopy-derive", ] [[package]] @@ -3094,38 +3055,27 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", -] - -[[package]] -name = "zerocopy-derive" -version = "0.8.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06718a168365cad3d5ff0bb133aad346959a2074bd4a85c121255a11304a8626" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.98", + "syn 2.0.87", ] [[package]] name = "zerofrom" -version = "0.1.5" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" +checksum = "91ec111ce797d0e0784a1116d0ddcdbea84322cd79e5d5ad173daeba4f93ab55" dependencies = [ "zerofrom-derive", ] [[package]] name = "zerofrom-derive" -version = "0.1.5" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" +checksum = "0ea7b4a3637ea8669cedf0f1fd5c286a17f3de97b8dd5a70a6c167a1730e63a5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.87", "synstructure", ] @@ -3146,7 +3096,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.87", ] [[package]] @@ -3168,14 +3118,14 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.87", ] [[package]] name = "zip" -version = "2.2.2" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae9c1ea7b3a5e1f4b922ff856a129881167511563dc219869afe3787fc0c1a45" +checksum = "dc5e4288ea4057ae23afc69a4472434a87a2495cafce6632fd1c4ec9f5cf3494" dependencies = [ "aes", "arbitrary", @@ -3187,13 +3137,13 @@ dependencies = [ "displaydoc", "flate2", "hmac", - "indexmap 2.7.1", + "indexmap 2.6.0", "lzma-rs", "memchr", "pbkdf2", - "rand 0.8.5", + "rand", "sha1", - "thiserror 2.0.11", + "thiserror 1.0.69", "time", "zeroize", "zopfli", diff --git a/Cargo.toml b/Cargo.toml index 1b9fd8e..3ffd070 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "sculptor" authors = ["Shiroyashik "] -version = "0.4.1-dev" +version = "0.4.0" edition = "2021" publish = false @@ -32,14 +32,14 @@ walkdir = "2.5" indexmap = { version = "2.6", features = ["serde"] } zip = "2.2" lazy_static = "1.5" -notify = "8.0" +notify = "7.0" # Crypto ring = "0.17" -rand = "0.9" +rand = "0.8" -# Web -axum = { version = "0.8", features = ["ws", "macros", "http2"] } +# Web framework +axum = { version = "0.7", features = ["ws", "macros", "http2"] } tower-http = { version = "0.6", features = ["trace"] } tokio = { version = "1.41", features = ["full"] } diff --git a/Config.example.toml b/Config.example.toml index 9f367eb..74beb9e 100644 --- a/Config.example.toml +++ b/Config.example.toml @@ -1,4 +1,4 @@ -## If running in a Docker container, leave this as default. +## Don't touch this if you running under Docker container listen = "0.0.0.0:6665" ## Don't touch if you don't know what you're doing @@ -12,7 +12,7 @@ listen = "0.0.0.0:6665" ## If not set, default providers (Mojang, ElyBy) will be provided. # authProviders = [ # { name = "Mojang", url = "https://sessionserver.mojang.com/session/minecraft/hasJoined" }, -# { name = "ElyBy", url = "https://account.ely.by/api/minecraft/session/hasJoined" }, +# { name = "ElyBy", url = "http://minecraft.ely.by/session/hasJoined" }, # ] ## Enabling Asset Updater. @@ -71,7 +71,7 @@ customText = """ [limitations] maxAvatarSize = 100 # KB maxAvatars = 10 # It doesn't look like Figura has any actions implemented with this? -## P.S. And it doesn't look like the current API allows anything like that... +# P.S. And it doesn't look like the current API allows anything like that... [advancedUsers.66004548-4de5-49de-bade-9c3933d8eb97] username = "Shiroyashik" diff --git a/Dockerfile b/Dockerfile index 56e214a..dfbbf6e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ ## Chef # FROM clux/muslrust:stable AS chef -FROM rust:1.84-alpine3.21 AS chef +FROM rust:1.82.0-alpine3.20 AS chef USER root RUN apk add --no-cache musl-dev libressl-dev RUN cargo install cargo-chef @@ -23,7 +23,7 @@ COPY src src RUN cargo build --release --target x86_64-unknown-linux-musl --bin sculptor ## Runtime -FROM alpine:3.21 AS runtime +FROM alpine:3.20.0 AS runtime WORKDIR /app COPY --from=builder /build/target/x86_64-unknown-linux-musl/release/sculptor /app/sculptor diff --git a/README.md b/README.md index 06d75b1..c1bec79 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ To run it you will need a configured reverse proxy server. Make sure that the reverse proxy you are using supports WebSocket and valid certificates are used for HTTPS connections. -> [!WARNING] +> [!IMPORTANT] > NGINX requires additional configuration to work with websocket! ### Docker @@ -57,10 +57,10 @@ See the [pre-built archives](https://github.com/shiroyashik/sculptor/releases/la A pre-installed Rust will be required for the build ```sh -# Clone the pre-release +# Clone the latest release git clone https://github.com/shiroyashik/sculptor.git -# or clone specific version -git clone --depth 1 --branch v0.4.0 https://github.com/shiroyashik/sculptor.git +# or a dev release +git clone --branch dev https://github.com/shiroyashik/sculptor.git # Enter the folder cd sculptor # Copy Sculptor configuration file @@ -73,13 +73,6 @@ cargo build --release cargo run --release ``` -#### Compiling from the `master` Branch - -> [!IMPORTANT] -> Installing Sculptor directly from the `master` branch is **not recommended** for most users. This branch contains pre-release code that is actively being developed and may include broken or unstable features. Additionally, using the `master` branch could potentially cause issues with data migration when upgrading to future stable releases. -> -> If you still choose to use the `master` branch, please be aware that you may encounter bugs or unexpected behavior. Your feedback and bug reports are highly appreciated. However, for a more stable and reliable experience, we strongly advise using the **latest official release** instead. - ## Contributing ![Ask me anything!](https://img.shields.io/badge/Ask%20me-anything-1abc9c.svg) on @@ -99,6 +92,10 @@ If you are a Rust developer, you can modify the code yourself and request a Pull Glad for any help from ideas to PRs. ❤ +#### P.S. + +The [“master”](https://github.com/shiroyashik/sculptor/tree/master) branch contains the source code of the latest release. [“dev”](https://github.com/shiroyashik/sculptor/tree/dev) branch is used for development. + ## License The Sculptor is licensed under [GPL-3.0](LICENSE) diff --git a/README.ru.md b/README.ru.md index 1bc338e..49209b9 100644 --- a/README.ru.md +++ b/README.ru.md @@ -33,7 +33,7 @@ Убедитесь, что используемый вами обратный прокси-сервер поддерживает WebSocket, а для HTTPS-соединений используются действительные сертификаты. -> [!WARNING] +> [!IMPORTANT] > NGINX требует дополнительной настройки для работы с websocket! ### Docker @@ -55,10 +55,10 @@ Для сборки потребуется предустановленный Rust ```sh -# Клонируем пре-релиз +# Клонируем последний релиз git clone https://github.com/shiroyashik/sculptor.git -# или из выбранного тега -git clone --depth 1 --branch v0.4.0 https://github.com/shiroyashik/sculptor.git +# или из dev ветки +git clone --branch dev https://github.com/shiroyashik/sculptor.git # Переходим в репу cd sculptor # Меняем имя конфиг файлу @@ -71,13 +71,6 @@ cargo build --release cargo run --release ``` -#### Сборка из `master` ветки - -> [!IMPORTANT] -> Сборка Sculptor непосредственно из ветки `master` **не рекомендуется** для большинства пользователей. Эта ветка содержит предрелизный код, который активно разрабатывается и может содержать неработающие или нестабильные функции. Кроме того, использование ветки `master` может привести к проблемам с миграцией данных при обновлении до будущих стабильных релизов. -> -> Если вы все же решили использовать ветку `master`, пожалуйста, имейте в виду, что вы можете столкнуться с ошибками или некорректным поведением. Тем не менее ваши сообщения об ошибках высоко ценятся. Однако для более стабильной и надежной работы настоятельно рекомендую использовать **последний официальный релиз**. - ## Вклад в развитие ![Спроси меня о чём угодно!](https://img.shields.io/badge/Ask%20me-anything-1abc9c.svg) в @@ -97,6 +90,10 @@ cargo run --release Буду рад любой вашей помощи! ❤ +#### Постскриптум + +Ветка [“master”](https://github.com/shiroyashik/sculptor/tree/master) содержит код последнего релиза. А [“dev”](https://github.com/shiroyashik/sculptor/tree/dev) ветка дря разработки. + ## License The Sculptor is licensed under [GPL-3.0](LICENSE) diff --git a/src/api/figura/assets.rs b/src/api/figura/assets.rs index 5671c45..61887b9 100644 --- a/src/api/figura/assets.rs +++ b/src/api/figura/assets.rs @@ -12,8 +12,8 @@ use crate::{api::errors::internal_and_log, ApiError, ApiResult, AppState, ASSETS pub fn router() -> Router { Router::new() .route("/", get(versions)) - .route("/{version}", get(hashes)) - .route("/{version}/{*path}", get(download)) + .route("/:version", get(hashes)) + .route("/:version/*key", get(download)) } async fn versions() -> ApiResult> { diff --git a/src/api/figura/websocket/handler.rs b/src/api/figura/websocket/handler.rs index 72f9987..9dfe8c2 100644 --- a/src/api/figura/websocket/handler.rs +++ b/src/api/figura/websocket/handler.rs @@ -1,12 +1,11 @@ use anyhow::bail; -use axum::{body::Bytes, extract::{ws::{Message, WebSocket}, State}}; +use axum::extract::{ws::{Message, WebSocket}, State}; use dashmap::DashMap; use tokio::sync::{broadcast, mpsc}; -use tracing::instrument; use crate::{auth::Userinfo, AppState}; -use super::{AuthModeError, C2SMessage, RADError, RecvAndDecode, S2CMessage, SessionMessage, WSSession}; +use super::{processor::*, AuthModeError, S2CMessage, C2SMessage, WSSession, SessionMessage, RADError}; pub async fn initial( ws: axum::extract::WebSocketUpgrade, @@ -43,8 +42,9 @@ async fn handle_socket(mut ws: WebSocket, state: AppState) { }; // Starting main worker - if let Err(kind) = main_worker(&mut session, &mut ws, &state).await { - tracing::error!("[WebSocket] Main worker halted due to {}.", kind) + match main_worker(&mut session, &mut ws, &state).await { + Ok(_) => (), + Err(kind) => tracing::error!("[WebSocket] Main worker halted due to {}.", kind), } for (_, handle) in session.sub_workers_aborthandles { @@ -61,10 +61,9 @@ async fn handle_socket(mut ws: WebSocket, state: AppState) { } // Closing connection - if let Err(kind) = ws.send(Message::Close(None)).await { tracing::trace!("[WebSocket] Closing fault: {}", kind) } + if let Err(kind) = ws.close().await { tracing::trace!("[WebSocket] Closing fault: {}", kind) } } -#[instrument(skip_all, fields(nickname = %session.user.nickname))] async fn main_worker(session: &mut WSSession, ws: &mut WebSocket, state: &AppState) -> anyhow::Result<()> { tracing::debug!("WebSocket control for {} is transferred to the main worker", session.user.nickname); loop { @@ -91,7 +90,7 @@ async fn main_worker(session: &mut WSSession, ws: &mut WebSocket, state: &AppSta // Echo check if echo { - ws.send(Message::Binary(s2c_ping.clone().into())).await? + ws.send(Message::Binary(s2c_ping.clone())).await? } // Sending to others let _ = session.subs_tx.send(s2c_ping); @@ -128,7 +127,7 @@ async fn main_worker(session: &mut WSSession, ws: &mut WebSocket, state: &AppSta let internal_msg = internal_msg.ok_or(anyhow::anyhow!("Unexpected error! Session channel broken!"))?; match internal_msg { SessionMessage::Ping(msg) => { - ws.send(Message::Binary(msg.into())).await? + ws.send(Message::Binary(msg)).await? }, SessionMessage::Banned => { let _ = ban_action(ws).await @@ -170,7 +169,7 @@ async fn authenticate(socket: &mut WebSocket, state: &AppState) -> Result { - if socket.send(Message::Binary(Bytes::from(Into::>::into(S2CMessage::Auth)))).await.is_err() { + if socket.send(Message::Binary(S2CMessage::Auth.into())).await.is_err() { Err(AuthModeError::SendError) } else if !user.banned { Ok(user.clone()) @@ -205,7 +204,7 @@ async fn authenticate(socket: &mut WebSocket, state: &AppState) -> Result anyhow::Result<()> { - ws.send(Message::Binary(Into::>::into(S2CMessage::Toast(2, "You're banned!".to_string(), None)).into())).await?; + ws.send(Message::Binary(S2CMessage::Toast(2, "You're banned!".to_string(), None).into())).await?; tokio::time::sleep(std::time::Duration::from_secs(6)).await; ws.send(Message::Close(Some(axum::extract::ws::CloseFrame { code: 4001, reason: "You're banned!".into() }))).await?; diff --git a/src/api/figura/websocket/mod.rs b/src/api/figura/websocket/mod.rs index 14e9979..d4de481 100644 --- a/src/api/figura/websocket/mod.rs +++ b/src/api/figura/websocket/mod.rs @@ -1,5 +1,6 @@ // mod websocket; mod handler; +mod processor; mod types; // pub use websocket::*; diff --git a/src/api/figura/websocket/processor.rs b/src/api/figura/websocket/processor.rs new file mode 100644 index 0000000..a2e40f0 --- /dev/null +++ b/src/api/figura/websocket/processor.rs @@ -0,0 +1,32 @@ +use axum::extract::ws::{Message, WebSocket}; + +use super::{C2SMessage, RADError}; + +pub trait RecvAndDecode { + async fn recv_and_decode(&mut self) -> Result; +} + +impl RecvAndDecode for WebSocket { + async fn recv_and_decode(&mut self) -> Result { + if let Some(msg) = self.recv().await { + match msg { + Ok(msg) => { + match msg { + Message::Close(frame) => Err(RADError::Close(frame.map(|f| format!("code: {}, reason: {}", f.code, f.reason)))), + _ => { + match C2SMessage::try_from(msg.clone().into_data().as_slice()) { + Ok(decoded) => Ok(decoded), + Err(e) => { + Err(RADError::DecodeError(e, faster_hex::hex_string(&msg.into_data()))) + }, + } + } + } + }, + Err(e) => Err(RADError::WebSocketError(e)), + } + } else { + Err(RADError::StreamClosed) + } + } +} \ No newline at end of file diff --git a/src/api/figura/websocket/types/mod.rs b/src/api/figura/websocket/types/mod.rs index fee43d8..d449427 100644 --- a/src/api/figura/websocket/types/mod.rs +++ b/src/api/figura/websocket/types/mod.rs @@ -6,24 +6,4 @@ mod session; pub use session::*; pub use errors::*; pub use c2s::*; -pub use s2c::*; - -use axum::extract::ws::{Message, WebSocket}; - -pub trait RecvAndDecode { - async fn recv_and_decode(&mut self) -> Result; -} - -impl RecvAndDecode for WebSocket { - async fn recv_and_decode(&mut self) -> Result { - let msg = self.recv().await.ok_or(RADError::StreamClosed)??; - - if let Message::Close(frame) = msg { - return Err(RADError::Close(frame.map(|f| format!("code: {}, reason: {}", f.code, f.reason)))); - } - - let data = msg.into_data(); - C2SMessage::try_from(data.as_ref()) - .map_err(|e| RADError::DecodeError(e, faster_hex::hex_string(&data))) - } -} \ No newline at end of file +pub use s2c::*; \ No newline at end of file diff --git a/src/api/mod.rs b/src/api/mod.rs index e5f1109..a2f4786 100644 --- a/src/api/mod.rs +++ b/src/api/mod.rs @@ -1,3 +1,3 @@ pub mod figura; -pub mod sculptor; +pub mod v1; pub mod errors; \ No newline at end of file diff --git a/src/api/sculptor/http2ws.rs b/src/api/sculptor/http2ws.rs deleted file mode 100644 index 82145fa..0000000 --- a/src/api/sculptor/http2ws.rs +++ /dev/null @@ -1,80 +0,0 @@ -use std::collections::HashMap; - -use axum::extract::{Query, State}; -use tracing::instrument; -use uuid::Uuid; - -use crate::{api::errors::{error_and_log, internal_and_log}, auth::Token, ApiResult, AppState}; - -/* - FIXME: need to refactor -*/ - -pub(super) async fn verify( - Token(token): Token, - State(state): State, -) -> ApiResult<&'static str> { - state.config.read().await.clone() - .verify_token(&token)?; - Ok("ok") -} - -#[instrument(skip(token, state, body))] -pub(super) async fn raw( - Token(token): Token, - Query(query): Query>, - State(state): State, - body: String, -) -> ApiResult<&'static str> { - tracing::trace!(body = body); - state.config.read().await.clone().verify_token(&token)?; - let mut payload = vec![0; body.len() / 2]; - faster_hex::hex_decode(body.as_bytes(), &mut payload).map_err(|err| { tracing::warn!("not raw data"); error_and_log(err, crate::ApiError::NotAcceptable) })?; - - if query.contains_key("uuid") == query.contains_key("all") { - tracing::warn!("invalid query params"); - return Err(crate::ApiError::BadRequest); - } - - if let Some(uuid) = query.get("uuid") { - // for one - let uuid = Uuid::parse_str(uuid).map_err(|err| { tracing::warn!("invalid uuid"); error_and_log(err, crate::ApiError::BadRequest) })?; - let tx = state.session.get(&uuid).ok_or_else(|| { tracing::warn!("unknown uuid"); crate::ApiError::NotFound })?; - tx.value().send(crate::api::figura::SessionMessage::Ping(payload)).await.map_err(internal_and_log)?; - Ok("ok") - } else if query.contains_key("all") { - // for all - for tx in state.session.iter() { - if let Err(e) = tx.value().send(crate::api::figura::SessionMessage::Ping(payload.clone())).await { - tracing::debug!(error = ?e , "error while sending to session"); - } - }; - Ok("ok") - } else { - tracing::error!("unreachable code!"); - Err(crate::ApiError::Internal) - } -} - -#[instrument(skip(token, state, body))] -pub(super) async fn sub_raw( - Token(token): Token, - Query(query): Query>, - State(state): State, - body: String, -) -> ApiResult<&'static str> { - tracing::trace!(body = body); - state.config.read().await.clone().verify_token(&token)?; - let mut payload = vec![0; body.len() / 2]; - faster_hex::hex_decode(body.as_bytes(), &mut payload).map_err(|err| { tracing::warn!("not raw data"); error_and_log(err, crate::ApiError::NotAcceptable) })?; - - if let Some(uuid) = query.get("uuid") { - let uuid = Uuid::parse_str(uuid).map_err(|err| { tracing::warn!("invalid uuid"); error_and_log(err, crate::ApiError::BadRequest) })?; - let tx = state.subscribes.get(&uuid).ok_or_else(|| { tracing::warn!("unknown uuid"); crate::ApiError::NotFound })?; - tx.value().send(payload).map_err(internal_and_log)?; - Ok("ok") - } else { - tracing::warn!("uuid doesnt defined"); - Err(crate::ApiError::NotFound) - } -} \ No newline at end of file diff --git a/src/api/sculptor/avatars.rs b/src/api/v1/avatars.rs similarity index 100% rename from src/api/sculptor/avatars.rs rename to src/api/v1/avatars.rs diff --git a/src/api/v1/http2ws.rs b/src/api/v1/http2ws.rs new file mode 100644 index 0000000..3d9ed0d --- /dev/null +++ b/src/api/v1/http2ws.rs @@ -0,0 +1,67 @@ +use axum::extract::{Query, State}; +use tracing::{debug, trace, warn}; + +use crate::{api::errors::{error_and_log, internal_and_log}, auth::Token, ApiResult, AppState}; +use super::types::UserUuid; + +pub(super) async fn verify( + Token(token): Token, + State(state): State, +) -> ApiResult<&'static str> { + state.config.read().await.clone() + .verify_token(&token)?; + Ok("ok") +} + +pub(super) async fn raw( + Token(token): Token, + Query(query): Query, + State(state): State, + body: String, +) -> ApiResult<&'static str> { + trace!(body = body); + state.config.read().await.clone().verify_token(&token)?; + let mut payload = vec![0; body.len() / 2]; + faster_hex::hex_decode(body.as_bytes(), &mut payload).map_err(|err| { warn!("not raw data"); error_and_log(err, crate::ApiError::NotAcceptable) })?; + debug!("{:?}", payload); + + match query.uuid { + Some(uuid) => { + // for only one + let tx = state.session.get(&uuid).ok_or_else(|| { warn!("unknown uuid"); crate::ApiError::NotFound })?; + tx.value().send(crate::api::figura::SessionMessage::Ping(payload)).await.map_err(internal_and_log)?; + Ok("ok") + }, + None => { + // for all + warn!("uuid doesnt defined"); + Err(crate::ApiError::NotFound) + }, + } +} + +pub(super) async fn sub_raw( + Token(token): Token, + Query(query): Query, + State(state): State, + body: String, +) -> ApiResult<&'static str> { + trace!(body = body); + state.config.read().await.clone().verify_token(&token)?; + let mut payload = vec![0; body.len() / 2]; + faster_hex::hex_decode(body.as_bytes(), &mut payload).map_err(|err| { warn!("not raw data"); error_and_log(err, crate::ApiError::NotAcceptable) })?; + debug!("{:?}", payload); + + match query.uuid { + Some(uuid) => { + // for only one + let tx = state.subscribes.get(&uuid).ok_or_else(|| { warn!("unknown uuid"); crate::ApiError::NotFound })?; + tx.value().send(payload).map_err(internal_and_log)?; + Ok("ok") + }, + None => { + warn!("uuid doesnt defined"); + Err(crate::ApiError::NotFound) + }, + } +} \ No newline at end of file diff --git a/src/api/sculptor/mod.rs b/src/api/v1/mod.rs similarity index 64% rename from src/api/sculptor/mod.rs rename to src/api/v1/mod.rs index c5cd738..cdb9280 100644 --- a/src/api/sculptor/mod.rs +++ b/src/api/v1/mod.rs @@ -3,6 +3,7 @@ use crate::AppState; mod http2ws; mod users; +mod types; mod avatars; pub fn router(limit: usize) -> Router { @@ -13,8 +14,8 @@ pub fn router(limit: usize) -> Router { .route("/user/list", get(users::list)) .route("/user/sessions", get(users::list_sessions)) .route("/user/create", post(users::create_user)) - .route("/user/{uuid}/ban", post(users::ban)) - .route("/user/{uuid}/unban", post(users::unban)) - .route("/avatar/{uuid}", put(avatars::upload_avatar).layer(DefaultBodyLimit::max(limit))) - .route("/avatar/{uuid}", delete(avatars::delete_avatar)) + .route("/user/:uuid/ban", post(users::ban)) + .route("/user/:uuid/unban", post(users::unban)) + .route("/avatar/:uuid", put(avatars::upload_avatar).layer(DefaultBodyLimit::max(limit))) + .route("/avatar/:uuid", delete(avatars::delete_avatar)) } \ No newline at end of file diff --git a/src/api/v1/types.rs b/src/api/v1/types.rs new file mode 100644 index 0000000..0523ae6 --- /dev/null +++ b/src/api/v1/types.rs @@ -0,0 +1,7 @@ +use serde::Deserialize; +use uuid::Uuid; + +#[derive(Deserialize)] +pub(super) struct UserUuid { + pub uuid: Option, +} \ No newline at end of file diff --git a/src/api/sculptor/users.rs b/src/api/v1/users.rs similarity index 100% rename from src/api/sculptor/users.rs rename to src/api/v1/users.rs diff --git a/src/auth/auth.rs b/src/auth/auth.rs index a115049..b96e876 100644 --- a/src/auth/auth.rs +++ b/src/auth/auth.rs @@ -2,11 +2,11 @@ use std::sync::Arc; use anyhow::{anyhow, Context}; use axum::{ - extract::{FromRequestParts, OptionalFromRequestParts, State}, http::{request::Parts, StatusCode} + async_trait, extract::{FromRequestParts, State}, http::{request::Parts, StatusCode} }; use dashmap::DashMap; use thiserror::Error; -use tracing::{debug, error, instrument, trace, warn}; +use tracing::{debug, error, trace, warn}; use uuid::Uuid; use crate::{ApiError, ApiResult, AppState, TIMEOUT, USER_AGENT}; @@ -18,7 +18,7 @@ use super::types::*; pub struct Token(pub String); impl Token { - pub async fn _check_auth(self, state: &AppState) -> ApiResult<()> { + pub async fn check_auth(self, state: &AppState) -> ApiResult<()> { if let Some(user) = state.user_manager.get(&self.0) { if !user.banned { Ok(()) @@ -31,6 +31,7 @@ impl Token { } } +#[async_trait] impl FromRequestParts for Token where S: Send + Sync, @@ -49,22 +50,6 @@ where } } } - -impl OptionalFromRequestParts for Token -where - S: Send + Sync, -{ - type Rejection = StatusCode; // Not required - - async fn from_request_parts(parts: &mut Parts, _: &S) -> Result, Self::Rejection> { - let token = parts - .headers - .get("token") - .and_then(|value| value.to_str().ok()); - trace!(token = ?token); - Ok(token.map(|t| Self(t.to_string()))) - } -} // End Extractor // Work with external APIs @@ -274,33 +259,16 @@ impl UManager { } // End of User manager -#[axum::debug_handler] -#[instrument(skip_all)] pub async fn check_auth( token: Option, State(state): State, ) -> ApiResult<&'static str> { + debug!("Checking auth actuality..."); match token { Some(token) => { - match state.user_manager.get(&token.0) { - Some(user) => { - if user.banned { - debug!(nickname = user.nickname, status = "banned", "Token owner is banned"); - Err(ApiError::Unauthorized) - } else { - debug!(nickname = user.nickname, status = "ok", "Token verified successfully"); - Ok("ok") - } - } - None => { - debug!(token = token.0, status = "invalid", "Invalid token"); - Err(ApiError::Unauthorized) - } - } - } - None => { - debug!(status = "not provided", "Token not provided"); - Err(ApiError::BadRequest) - } + token.check_auth(&state).await?; + Ok("ok") + }, + None => Err(ApiError::BadRequest), } } \ No newline at end of file diff --git a/src/auth/types.rs b/src/auth/types.rs index c11b2ed..80981b3 100644 --- a/src/auth/types.rs +++ b/src/auth/types.rs @@ -61,6 +61,6 @@ pub struct AuthProviders(pub Vec); pub fn default_authproviders() -> AuthProviders { AuthProviders(vec![ AuthProvider { name: "Mojang".to_string(), url: "https://sessionserver.mojang.com/session/minecraft/hasJoined".to_string() }, - AuthProvider { name: "ElyBy".to_string(), url: "https://account.ely.by/api/minecraft/session/hasJoined".to_string() } + AuthProvider { name: "ElyBy".to_string(), url: "http://minecraft.ely.by/session/hasJoined".to_string() } ]) } \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index 4e6003e..56da451 100644 --- a/src/main.rs +++ b/src/main.rs @@ -107,7 +107,7 @@ async fn main() -> Result<()> { }, } - // 4. Starting an app() that starts to serve. If app() returns true, the sculptor will be restarted. TODO: for future + // 4. Starting an app() that starts to serve. If app() returns true, the sculptor will be restarted. for future loop { if !app().await? { break; @@ -174,7 +174,6 @@ async fn app() -> Result { Arc::clone(&state.session), Arc::clone(&state.config) )); - // Blacklist auto update if state.config.read().await.mc_folder.exists() { tokio::spawn(update_bans_from_minecraft( state.config.read().await.mc_folder.clone(), @@ -186,13 +185,13 @@ async fn app() -> Result { let api = Router::new() .nest("//auth", api_auth::router()) // => /api//auth ¯\_(ツ)_/¯ .nest("//assets", api_assets::router()) - .nest("/v1", api::sculptor::router(limit)) + .nest("/v1", api::v1::router(limit)) .route("/limits", get(api_info::limits)) .route("/version", get(api_info::version)) .route("/motd", get(api_info::motd)) .route("/equip", post(api_profile::equip_avatar)) - .route("/{uuid}", get(api_profile::user_info)) - .route("/{uuid}/avatar", get(api_profile::download_avatar)) + .route("/:uuid", get(api_profile::user_info)) + .route("/:uuid/avatar", get(api_profile::download_avatar)) .route("/avatar", put(api_profile::upload_avatar).layer(DefaultBodyLimit::max(limit))) .route("/avatar", delete(api_profile::delete_avatar)); @@ -206,11 +205,9 @@ async fn app() -> Result { let listener = tokio::net::TcpListener::bind(listen).await?; tracing::info!("Listening on {}", listener.local_addr()?); - axum::serve(listener, app) .with_graceful_shutdown(shutdown_signal()) .await?; - tracing::info!("Serve stopped."); Ok(false) } diff --git a/src/utils/auxiliary.rs b/src/utils/auxiliary.rs index 4571813..e04489c 100644 --- a/src/utils/auxiliary.rs +++ b/src/utils/auxiliary.rs @@ -3,7 +3,7 @@ use std::{fs::File, io::Read, path::{Path, PathBuf}, sync::Arc}; use notify::{Event, Watcher}; use tokio::{io::AsyncReadExt, sync::RwLock}; use base64::prelude::*; -use rand::{rng, Rng}; +use rand::{thread_rng, Rng}; use ring::digest::{self, digest}; use uuid::Uuid; use chrono::prelude::*; @@ -11,8 +11,8 @@ use chrono::prelude::*; use crate::{auth::Userinfo, state::{BannedPlayer, Config}, UManager}; pub fn rand() -> [u8; 50] { - let mut rng = rng(); - let distr = rand::distr::Uniform::new_inclusive(0, 255).expect("rand() failure."); + let mut rng = thread_rng(); + let distr = rand::distributions::Uniform::new_inclusive(0, 255); let mut nums: [u8; 50] = [0u8; 50]; for x in &mut nums { *x = rng.sample(distr);