From eb2652f7e9a6dac8bc7a7d992f4bbd9c347bb1fc Mon Sep 17 00:00:00 2001 From: Nell Date: Tue, 9 Jun 2026 23:05:35 +0200 Subject: [PATCH] Init --- Cargo.lock | 658 +++++++----------- Cargo.toml | 16 +- event_bus/Cargo.toml | 6 +- frontend/eslint.config.js | 14 +- frontend/src/components/HelloWorld.vue | 1 + frontend/src/pages/join.vue | 148 ++++ frontend/src/pages/login.vue | 101 ++- frontend/src/plugins/api.ts | 18 +- frontend/src/router/index.ts | 13 +- frontend/src/stores/auth.ts | 70 +- migration/Cargo.toml | 2 +- .../src/m20220101_000001_create_table.rs | 2 +- src/auth/password.rs | 2 +- src/auth/token.rs | 19 +- src/core/mod.rs | 4 +- src/core/state.rs | 4 +- src/http/error.rs | 4 +- src/http/middleware.rs | 28 +- src/models/user.rs | 4 +- src/routes/auth/dto.rs | 12 +- src/routes/auth/handlers.rs | 29 +- src/routes/auth/routes.rs | 4 +- src/routes/core/handlers.rs | 16 +- src/routes/core/mapper.rs | 9 +- src/routes/mod.rs | 9 +- src/routes/openapi.rs | 4 +- src/routes/user/dto.rs | 6 +- 27 files changed, 665 insertions(+), 538 deletions(-) create mode 100644 frontend/src/pages/join.vue diff --git a/Cargo.lock b/Cargo.lock index d7556d6..47de885 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -114,7 +114,7 @@ version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" dependencies = [ - "windows-sys 0.61.2", + "windows-sys", ] [[package]] @@ -125,7 +125,7 @@ checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" dependencies = [ "anstyle", "once_cell_polyfill", - "windows-sys 0.61.2", + "windows-sys", ] [[package]] @@ -404,7 +404,7 @@ dependencies = [ "polling", "rustix", "slab", - "windows-sys 0.61.2", + "windows-sys", ] [[package]] @@ -501,9 +501,32 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "autocfg" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" + +[[package]] +name = "aws-lc-rs" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ec2f1fc3ec205783a5da9a7e6c1509cc69dedf09a1949e412c1e18469326d00" +dependencies = [ + "aws-lc-sys", + "untrusted", + "zeroize", +] + +[[package]] +name = "aws-lc-sys" +version = "0.41.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a2f9779ce85b93ab6170dd940ad0169b5766ff848247aff13bb788b832fe3f4" +dependencies = [ + "cc", + "cmake", + "dunce", + "fs_extra", +] [[package]] name = "axum" @@ -585,9 +608,9 @@ dependencies = [ [[package]] name = "bitflags" -version = "2.11.1" +version = "2.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3" +checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" dependencies = [ "serde_core", ] @@ -670,9 +693,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.20.2" +version = "3.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" +checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" [[package]] name = "bytecheck" @@ -716,11 +739,13 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.2.62" +version = "1.2.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1dce859f0832a7d088c4f1119888ab94ef4b5d6795d1ce05afb7fe159d79f98" +checksum = "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f" dependencies = [ "find-msvc-tools", + "jobserver", + "libc", "shlex", ] @@ -749,9 +774,9 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.44" +version = "0.4.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" +checksum = "1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327" dependencies = [ "iana-time-zone", "js-sys", @@ -829,10 +854,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" [[package]] -name = "cmov" -version = "0.5.3" +name = "cmake" +version = "0.1.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f88a43d011fc4a6876cb7344703e297c71dda42494fee094d5f7c76bf13f746" +checksum = "c0f78a02292a74a88ac736019ab962ece0bc380e3f977bf72e376c5d78ff0678" +dependencies = [ + "cc", +] + +[[package]] +name = "cmov" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c9ea0ac24bc397ab3c98583a3c9ba74fa56b09a4449bbe172b9b1ddb016027a" [[package]] name = "colorchoice" @@ -869,12 +903,6 @@ dependencies = [ "yaml-rust2", ] -[[package]] -name = "const-oid" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" - [[package]] name = "const-random" version = "0.1.18" @@ -1030,9 +1058,9 @@ checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" [[package]] name = "crypto-common" -version = "0.1.7" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ "generic-array", "typenum", @@ -1040,9 +1068,9 @@ dependencies = [ [[package]] name = "crypto-common" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77727bb15fa921304124b128af125e7e3b968275d1b108b379190264f4423710" +checksum = "ce6e4c961d6cd6c9a86db418387425e8bdeaf05b3c8bc1411e6dca4c252f1453" dependencies = [ "hybrid-array", ] @@ -1091,17 +1119,6 @@ dependencies = [ "syn 2.0.117", ] -[[package]] -name = "der" -version = "0.7.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" -dependencies = [ - "const-oid", - "pem-rfc7468", - "zeroize", -] - [[package]] name = "deranged" version = "0.5.8" @@ -1152,9 +1169,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer 0.10.4", - "const-oid", - "crypto-common 0.1.7", - "subtle", + "crypto-common 0.1.6", ] [[package]] @@ -1164,15 +1179,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2" dependencies = [ "block-buffer 0.12.0", - "crypto-common 0.2.1", + "crypto-common 0.2.2", "ctutils", ] [[package]] name = "displaydoc" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f" dependencies = [ "proc-macro2", "quote", @@ -1195,10 +1210,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" [[package]] -name = "either" -version = "1.15.0" +name = "dunce" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" + +[[package]] +name = "either" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" dependencies = [ "serde", ] @@ -1236,18 +1257,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.61.2", + "windows-sys", ] [[package]] name = "etcetera" -version = "0.8.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "136d1b5283a1ab77bd9257427ffd09d8667ced0570b6f938942bc7568ed5b943" +checksum = "de48cc4d1c1d97a20fd819def54b890cadde72ed3ad0c614822a0a433361be96" dependencies = [ "cfg-if", - "home", - "windows-sys 0.48.0", + "windows-sys", ] [[package]] @@ -1312,9 +1332,9 @@ dependencies = [ [[package]] name = "flume" -version = "0.11.1" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095" +checksum = "5e139bc46ca777eb5efaf62df0ab8cc5fd400866427e56c68b22e414e53bd3be" dependencies = [ "futures-core", "futures-sink", @@ -1348,6 +1368,12 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "fs_extra" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" + [[package]] name = "funty" version = "2.0.0" @@ -1440,9 +1466,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.7" +version = "0.14.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" dependencies = [ "typenum", "version_check", @@ -1536,8 +1562,6 @@ version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ - "allocator-api2", - "equivalent", "foldhash 0.1.5", ] @@ -1547,6 +1571,8 @@ version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" dependencies = [ + "allocator-api2", + "equivalent", "foldhash 0.2.0", ] @@ -1556,15 +1582,6 @@ version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" -[[package]] -name = "hashlink" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1" -dependencies = [ - "hashbrown 0.15.5", -] - [[package]] name = "hashlink" version = "0.11.0" @@ -1600,36 +1617,27 @@ checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "hkdf" -version = "0.12.4" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" +checksum = "4aaa26c720c68b866f2c96ef5c1264b3e6f473fe5d4ce61cd44bbe913e553018" dependencies = [ "hmac", ] [[package]] name = "hmac" -version = "0.12.1" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +checksum = "6303bc9732ae41b04cb554b844a762b4115a61bfaa81e3e83050991eeb56863f" dependencies = [ - "digest 0.10.7", -] - -[[package]] -name = "home" -version = "0.5.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc627f471c528ff0c4a49e1d5e60450c8f6461dd6d10ba9dcd3a61d3dff7728d" -dependencies = [ - "windows-sys 0.61.2", + "digest 0.11.3", ] [[package]] name = "http" -version = "1.4.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" +checksum = "8be7462df143984c4598a256ef469b251d7d7f9e271135073e78fc535414f3d0" dependencies = [ "bytes", "itoa", @@ -1681,9 +1689,9 @@ dependencies = [ [[package]] name = "hyper" -version = "1.9.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6299f016b246a94207e63da54dbe807655bf9e00044f73ded42c3ac5305fbcca" +checksum = "55281c53a1894c864990125767da440a4e630446785086f52523b20033b74498" dependencies = [ "atomic-waker", "bytes", @@ -1874,17 +1882,6 @@ dependencies = [ "rustversion", ] -[[package]] -name = "inherent" -version = "1.0.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c727f80bfa4a6c6e2508d2f05b6f4bfce242030bd88ed15ae5331c5b5d30fba7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - [[package]] name = "is_terminal_polyfill" version = "1.70.2" @@ -1916,10 +1913,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] -name = "js-sys" -version = "0.3.98" +name = "jobserver" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67df7112613f8bfd9150013a0314e196f4800d3201ae742489d999db2f979f08" +checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" +dependencies = [ + "getrandom 0.3.4", + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.99" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "142bc4740e452c1e57ade0cbc129f139c9093e354346f0872ef985f4f5cf5f11" dependencies = [ "cfg-if", "futures-util", @@ -1944,6 +1951,7 @@ version = "10.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eba32bfb4ffdeaca3e34431072faf01745c9b26d25504aa7a6cf5684334fc4fc" dependencies = [ + "aws-lc-rs", "base64", "getrandom 0.2.17", "js-sys", @@ -1969,9 +1977,6 @@ name = "lazy_static" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" -dependencies = [ - "spin", -] [[package]] name = "leb128fmt" @@ -2048,23 +2053,11 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" -[[package]] -name = "libredox" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e02f3bb43d335493c96bf3fd3a321600bf6bd07ed34bc64118e9293bdffea46c" -dependencies = [ - "bitflags", - "libc", - "plain", - "redox_syscall 0.7.5", -] - [[package]] name = "libsqlite3-sys" -version = "0.30.1" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e99fb7a497b1e3339bc746195567ed8d3e24945ecd636e3619d20b9de9e9149" +checksum = "b1f111c8c41e7c61a49cd34e44c7619462967221a6443b0ec299e0ac30cfb9b1" dependencies = [ "cc", "pkg-config", @@ -2094,9 +2087,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.29" +version = "0.4.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" +checksum = "616ec5685824bcc94416c6d4a7a446eea774a31efd7062c8480ba6fd06d7a6e5" dependencies = [ "value-bag", ] @@ -2129,19 +2122,19 @@ checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3" [[package]] name = "md-5" -version = "0.10.6" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" +checksum = "69b6441f590336821bb897fb28fc622898ccceb1d6cea3fde5ea86b090c4de98" dependencies = [ "cfg-if", - "digest 0.10.7", + "digest 0.11.3", ] [[package]] name = "memchr" -version = "2.8.0" +version = "2.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" +checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" [[package]] name = "memoffset" @@ -2188,13 +2181,13 @@ dependencies = [ [[package]] name = "mio" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1" +checksum = "02bd0af71c67b473010cbbc60715ee815645a4dc942899111f494b4b737d6fda" dependencies = [ "libc", "wasi", - "windows-sys 0.61.2", + "windows-sys", ] [[package]] @@ -2216,7 +2209,7 @@ version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "windows-sys 0.61.2", + "windows-sys", ] [[package]] @@ -2229,22 +2222,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "num-bigint-dig" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e661dda6640fad38e827a6d4a310ff4763082116fe217f279885c97f511bb0b7" -dependencies = [ - "lazy_static", - "libm", - "num-integer", - "num-iter", - "num-traits", - "rand 0.8.6", - "smallvec", - "zeroize", -] - [[package]] name = "num-complex" version = "0.4.6" @@ -2256,9 +2233,9 @@ dependencies = [ [[package]] name = "num-conv" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6673768db2d862beb9b39a78fdcb1a69439615d5794a1be50caa9bc92c81967" +checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441" [[package]] name = "num-integer" @@ -2269,17 +2246,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "num-iter" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - [[package]] name = "num-traits" version = "0.2.19" @@ -2417,7 +2383,7 @@ checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.18", + "redox_syscall", "smallvec", "windows-link", ] @@ -2448,15 +2414,6 @@ dependencies = [ "serde_core", ] -[[package]] -name = "pem-rfc7468" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" -dependencies = [ - "base64ct", -] - [[package]] name = "percent-encoding" version = "2.3.2" @@ -2503,14 +2460,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89815c69d36021a140146f26659a81d6c2afa33d216d736dd4be5381a7362220" dependencies = [ "pest", - "sha2", + "sha2 0.10.9", ] [[package]] name = "pgvector" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc58e2d255979a31caa7cabfa7aac654af0354220719ab7a68520ae7a91e8c0b" +checksum = "3673cba5b9a124916096a423b806a9f29620972c6c97b08db5f2053e9428b481" dependencies = [ "serde", ] @@ -2549,39 +2506,12 @@ dependencies = [ "futures-io", ] -[[package]] -name = "pkcs1" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" -dependencies = [ - "der", - "pkcs8", - "spki", -] - -[[package]] -name = "pkcs8" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" -dependencies = [ - "der", - "spki", -] - [[package]] name = "pkg-config" version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" -[[package]] -name = "plain" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" - [[package]] name = "plotters" version = "0.3.7" @@ -2631,7 +2561,7 @@ dependencies = [ "hermit-abi", "pin-project-lite", "rustix", - "windows-sys 0.61.2", + "windows-sys", ] [[package]] @@ -2844,15 +2774,6 @@ dependencies = [ "bitflags", ] -[[package]] -name = "redox_syscall" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4666a1a60d8412eab19d94f6d13dcc9cea0a5ef4fdf6a5db306537413c661b1b" -dependencies = [ - "bitflags", -] - [[package]] name = "regex" version = "1.12.3" @@ -2934,26 +2855,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "rsa" -version = "0.9.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8573f03f5883dcaebdfcf4725caa1ecb9c15b2ef50c43a07b816e06799bb12d" -dependencies = [ - "const-oid", - "digest 0.10.7", - "num-bigint-dig", - "num-integer", - "num-traits", - "pkcs1", - "pkcs8", - "rand_core 0.6.4", - "signature", - "spki", - "subtle", - "zeroize", -] - [[package]] name = "rust-embed" version = "8.11.0" @@ -2984,7 +2885,7 @@ version = "8.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5bcdef0be6fe7f6fa333b1073c949729274b05f123a0ad7efcb8efd878e5c3b1" dependencies = [ - "sha2", + "sha2 0.10.9", "walkdir", ] @@ -3034,7 +2935,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys", - "windows-sys 0.61.2", + "windows-sys", ] [[package]] @@ -3079,9 +2980,9 @@ dependencies = [ [[package]] name = "sea-orm" -version = "2.0.0-rc.38" +version = "2.0.0-rc.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b5428ce6a0c8f6b9858df21ad1aa00c2fb94e1c9f344a0436bc855391e5a225" +checksum = "628c3b6acb53ca9942f7f151431ed49db92dafa14d15976a1b9db9d4bd06431c" dependencies = [ "async-stream", "async-trait", @@ -3103,12 +3004,14 @@ dependencies = [ "serde", "serde_json", "sqlx", + "sqlx-core", "strum", "thiserror", "time", "tracing", "url", "uuid", + "web-time", ] [[package]] @@ -3124,9 +3027,9 @@ dependencies = [ [[package]] name = "sea-orm-cli" -version = "2.0.0-rc.38" +version = "2.0.0-rc.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd42605c3b611785eed593406900f463b86c61792e723272e0434e77ed9cd8d" +checksum = "b8353fb3cf1baef735e273d0342ae75f69d0723d1715cfbc5f16ff3875166e0d" dependencies = [ "chrono", "clap", @@ -3141,9 +3044,9 @@ dependencies = [ [[package]] name = "sea-orm-macros" -version = "2.0.0-rc.38" +version = "2.0.0-rc.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae1374d83dd5b43f14dcc90fc726486c556f4db774b680b12b8c680af76e8233" +checksum = "68a91def07bceb98aab308f7dd16c27496b76a6b7b92b94a61b309b5043d93d5" dependencies = [ "heck 0.5.0", "itertools 0.14.0", @@ -3157,9 +3060,9 @@ dependencies = [ [[package]] name = "sea-orm-migration" -version = "2.0.0-rc.38" +version = "2.0.0-rc.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73f6ce467587c910bb2842cf001ea600ac6228ba5f3f39c1dc499929e34a8f29" +checksum = "5e932517f74c4fd73c629998861602e261ef024242577a44c1fc4c7dc315186f" dependencies = [ "async-trait", "clap", @@ -3173,12 +3076,11 @@ dependencies = [ [[package]] name = "sea-query" -version = "1.0.0-rc.33" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b04cdb0135c16e829504e93fbe7880513578d56f07aaea152283526590111828" +checksum = "8d190cfb3bcceb8a8d7d04dee5a0c77f60c7627979cdcb47fdcb8934f009badf" dependencies = [ "chrono", - "inherent", "ordered-float", "rust_decimal", "sea-query-derive", @@ -3189,9 +3091,9 @@ dependencies = [ [[package]] name = "sea-query-derive" -version = "1.0.0-rc.12" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d88ad44b6ad9788c8b9476b6b91f94c7461d1e19d39cd8ea37838b1e6ff5aa8" +checksum = "a0b0f466921cdd3cf4b89d5c3ac2173dba89a873ab395b123a645de181ec7537" dependencies = [ "darling", "heck 0.4.1", @@ -3203,9 +3105,9 @@ dependencies = [ [[package]] name = "sea-query-sqlx" -version = "0.8.0-rc.15" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a04aeecfe00614fece56336fd35dc385bb9ffed0c75660695ba925e42a3991ef" +checksum = "4eaa419cdb9157da1361186b1959983eb2ea0dcb9a3c69dc45c449ecb2af8fef" dependencies = [ "sea-query", "sqlx", @@ -3213,9 +3115,9 @@ dependencies = [ [[package]] name = "sea-schema" -version = "0.17.0-rc.17" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b363dd21c20fe4d1488819cb2bc7f8d4696c62dd9f39554f97639f54d57dd0ab" +checksum = "f88267b43c127956a079895d864fc8318ee37c7f280a7aa33805b714c31995f0" dependencies = [ "async-trait", "sea-query", @@ -3292,9 +3194,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.149" +version = "1.0.150" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" +checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" dependencies = [ "itoa", "memchr", @@ -3337,13 +3239,13 @@ dependencies = [ [[package]] name = "sha1" -version = "0.10.6" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +checksum = "aacc4cc499359472b4abe1bf11d0b12e688af9a805fa5e3016f9a386dc2d0214" dependencies = [ "cfg-if", - "cpufeatures 0.2.17", - "digest 0.10.7", + "cpufeatures 0.3.0", + "digest 0.11.3", ] [[package]] @@ -3357,6 +3259,17 @@ dependencies = [ "digest 0.10.7", ] +[[package]] +name = "sha2" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "446ba717509524cb3f22f17ecc096f10f4822d76ab5c0b9822c5f9c284e825f4" +dependencies = [ + "cfg-if", + "cpufeatures 0.3.0", + "digest 0.11.3", +] + [[package]] name = "sharded-slab" version = "0.1.7" @@ -3368,9 +3281,9 @@ dependencies = [ [[package]] name = "shlex" -version = "1.3.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" [[package]] name = "signal-hook-registry" @@ -3388,7 +3301,6 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ - "digest 0.10.7", "rand_core 0.6.4", ] @@ -3433,12 +3345,12 @@ dependencies = [ [[package]] name = "socket2" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" +checksum = "52d1cfed4120b4d927bf7c0f86d2087a4a7d6027c906d9f9d525a80573b9be51" dependencies = [ "libc", - "windows-sys 0.61.2", + "windows-sys", ] [[package]] @@ -3450,21 +3362,11 @@ dependencies = [ "lock_api", ] -[[package]] -name = "spki" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" -dependencies = [ - "base64ct", - "der", -] - [[package]] name = "sqlx" -version = "0.8.6" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fefb893899429669dcdd979aff487bd78f4064e5e7907e4269081e0ef7d97dc" +checksum = "378620ccc25c62c89d8be1c819e76a88d59bdcc3304733330788948e619bfd71" dependencies = [ "sqlx-core", "sqlx-macros", @@ -3475,12 +3377,13 @@ dependencies = [ [[package]] name = "sqlx-core" -version = "0.8.6" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee6798b1838b6a0f69c007c133b8df5866302197e404e8b6ee8ed3e3a5e68dc6" +checksum = "05b44e85bf579a8eeb4ceaa77a3a523baf2bf0e9bac7e40f405d537b5d2d5ccb" dependencies = [ "base64", "bytes", + "cfg-if", "chrono", "crc", "crossbeam-queue", @@ -3490,17 +3393,16 @@ dependencies = [ "futures-intrusive", "futures-io", "futures-util", - "hashbrown 0.15.5", - "hashlink 0.10.0", + "hashbrown 0.16.1", + "hashlink", "indexmap", "log", "memchr", - "once_cell", "percent-encoding", "rust_decimal", "serde", "serde_json", - "sha2", + "sha2 0.10.9", "smallvec", "thiserror", "time", @@ -3513,9 +3415,9 @@ dependencies = [ [[package]] name = "sqlx-macros" -version = "0.8.6" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2d452988ccaacfbf5e0bdbc348fb91d7c8af5bee192173ac3636b5fb6e6715d" +checksum = "bd2b84f2bc39a5705ef27ec785a11c934a41bbd4a24941e257927cddc26b60bf" dependencies = [ "proc-macro2", "quote", @@ -3526,20 +3428,20 @@ dependencies = [ [[package]] name = "sqlx-macros-core" -version = "0.8.6" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19a9c1841124ac5a61741f96e1d9e2ec77424bf323962dd894bdb93f37d5219b" +checksum = "fb8d96de5fdc85a5c4ec813432b523ec637e80ba98f046555f75f7908ddac7c3" dependencies = [ + "cfg-if", "dotenvy", "either", "heck 0.5.0", "hex", - "once_cell", "proc-macro2", "quote", "serde", "serde_json", - "sha2", + "sha2 0.10.9", "sqlx-core", "sqlx-mysql", "sqlx-postgres", @@ -3551,55 +3453,39 @@ dependencies = [ [[package]] name = "sqlx-mysql" -version = "0.8.6" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa003f0038df784eb8fecbbac13affe3da23b45194bd57dba231c8f48199c526" +checksum = "90b8020fe17c5f2c245bfa2505d7ef59c5604839527c740266ad2214acebea27" dependencies = [ - "atoi", - "base64", "bitflags", "byteorder", "bytes", "chrono", "crc", - "digest 0.10.7", + "digest 0.11.3", "dotenvy", "either", - "futures-channel", "futures-core", - "futures-io", "futures-util", "generic-array", - "hex", - "hkdf", - "hmac", - "itoa", "log", - "md-5", - "memchr", - "once_cell", "percent-encoding", - "rand 0.8.6", - "rsa", "rust_decimal", "serde", "sha1", - "sha2", - "smallvec", + "sha2 0.11.0", "sqlx-core", - "stringprep", "thiserror", "time", "tracing", "uuid", - "whoami", ] [[package]] name = "sqlx-postgres" -version = "0.8.6" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db58fcd5a53cf07c184b154801ff91347e4c30d17a3562a635ff028ad5deda46" +checksum = "87a2bdd6e83f6b3ea525ca9fee568030508b58355a43d0b2c1674d5f79dcd65e" dependencies = [ "atoi", "base64", @@ -3615,17 +3501,15 @@ dependencies = [ "hex", "hkdf", "hmac", - "home", "itoa", "log", "md-5", "memchr", - "once_cell", - "rand 0.8.6", + "rand 0.10.1", "rust_decimal", "serde", "serde_json", - "sha2", + "sha2 0.11.0", "smallvec", "sqlx-core", "stringprep", @@ -3638,13 +3522,14 @@ dependencies = [ [[package]] name = "sqlx-sqlite" -version = "0.8.6" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2d12fe70b2c1b4401038055f90f151b78208de1f9f89a7dbfd41587a10c3eea" +checksum = "488e99c397a62007e4229aec669a179816339afc6d2620ca6fa420dbee2e982c" dependencies = [ "atoi", "chrono", "flume", + "form_urlencoded", "futures-channel", "futures-core", "futures-executor", @@ -3654,7 +3539,6 @@ dependencies = [ "log", "percent-encoding", "serde", - "serde_urlencoded", "sqlx-core", "thiserror", "time", @@ -3698,12 +3582,6 @@ version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9628de9b8791db39ceda2b119bbe13134770b56c138ec1d3af810d045c04f9bd" -[[package]] -name = "subtle" -version = "2.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" - [[package]] name = "syn" version = "1.0.109" @@ -3867,7 +3745,7 @@ dependencies = [ "signal-hook-registry", "socket2", "tokio-macros", - "windows-sys 0.61.2", + "windows-sys", ] [[package]] @@ -3918,9 +3796,9 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.25.11+spec-1.1.0" +version = "0.25.12+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b59c4d22ed448339746c59b905d24568fcbb3ab65a500494f7b8c3e97739f2b" +checksum = "d2153edc6955a6c354fad8f5efd38b6a8769bdccf9fe50f8e1329f81b0baa5d7" dependencies = [ "indexmap", "toml_datetime", @@ -3961,9 +3839,9 @@ dependencies = [ [[package]] name = "tower-http" -version = "0.6.10" +version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68d6fdd9f81c2819c9a8b0e0cd91660e7746a8e6ea2ba7c6b2b057985f6bcb51" +checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840" dependencies = [ "bitflags", "bytes", @@ -4060,9 +3938,9 @@ checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c" [[package]] name = "typenum" -version = "1.20.0" +version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" [[package]] name = "ucd-trie" @@ -4115,6 +3993,12 @@ version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" +[[package]] +name = "untrusted" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" + [[package]] name = "url" version = "2.5.8" @@ -4183,9 +4067,9 @@ dependencies = [ [[package]] name = "uuid" -version = "1.23.1" +version = "1.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd74a9687298c6858e9b88ec8935ec45d22e8fd5e6394fa1bd4e99a87789c76" +checksum = "d258b83ceec21034727ecee8c382cfa6c3e133699b0742c64571814fb420c9f7" dependencies = [ "getrandom 0.4.2", "js-sys", @@ -4282,17 +4166,11 @@ dependencies = [ "wit-bindgen 0.51.0", ] -[[package]] -name = "wasite" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" - [[package]] name = "wasm-bindgen" -version = "0.2.121" +version = "0.2.122" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49ace1d07c165b0864824eee619580c4689389afa9dc9ed3a4c75040d82e6790" +checksum = "3ed04576f974d2b2fba0f38c51dbc5518011e38c36bf1143164be765528fd409" dependencies = [ "cfg-if", "once_cell", @@ -4304,9 +4182,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.71" +version = "0.4.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96492d0d3ffba25305a7dc88720d250b1401d7edca02cc3bcd50633b424673b8" +checksum = "9473dbd2991ae90b6291c3c32c30c6187ac49aa32f9905d1cce280ec1e110b0f" dependencies = [ "js-sys", "wasm-bindgen", @@ -4314,9 +4192,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.121" +version = "0.2.122" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e68e6f4afd367a562002c05637acb8578ff2dea1943df76afb9e83d177c8578" +checksum = "916151b09da36bd82f6615cbf3a419e2f0ba23a03c6160e8e92eb6bd4aa1dec6" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -4324,9 +4202,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.121" +version = "0.2.122" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d95a9ec35c64b2a7cb35d3fead40c4238d0940c86d107136999567a4703259f2" +checksum = "299047362ccbfce148b67ab7e73349f77748e00c8296f9542adfad2ad82c5c5e" dependencies = [ "bumpalo", "proc-macro2", @@ -4337,9 +4215,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.121" +version = "0.2.122" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4e0100b01e9f0d03189a92b96772a1fb998639d981193d7dbab487302513441" +checksum = "9a929b2c61f11ba3e9bc35b50c1f25cb38e0e892c0c231ae2b8cf78d5dad4437" dependencies = [ "unicode-ident", ] @@ -4380,9 +4258,19 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.98" +version = "0.3.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b572dff8bcf38bad0fa19729c89bb5748b2b9b1d8be70cf90df697e3a8f32aa" +checksum = "6d621441cfc37b84979402712047321980c178f299193a3589d05b99e8763436" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" dependencies = [ "js-sys", "wasm-bindgen", @@ -4390,13 +4278,9 @@ dependencies = [ [[package]] name = "whoami" -version = "1.6.1" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d4a4db5077702ca3015d3d02d74974948aba2ad9e12ab7df718ee64ccd7e97d" -dependencies = [ - "libredox", - "wasite", -] +checksum = "998767ef88740d1f5b0682a9c53c24431453923962269c2db68ee43788c5a40d" [[package]] name = "winapi" @@ -4420,7 +4304,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.61.2", + "windows-sys", ] [[package]] @@ -4488,15 +4372,6 @@ dependencies = [ "windows-link", ] -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets", -] - [[package]] name = "windows-sys" version = "0.61.2" @@ -4506,63 +4381,6 @@ dependencies = [ "windows-link", ] -[[package]] -name = "windows-targets" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" -dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", -] - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" - -[[package]] -name = "windows_i686_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" - [[package]] name = "winnow" version = "1.0.3" @@ -4689,7 +4507,7 @@ checksum = "631a50d867fafb7093e709d75aaee9e0e0d5deb934021fcea25ac2fe09edc51e" dependencies = [ "arraydeque", "encoding_rs", - "hashlink 0.11.0", + "hashlink", ] [[package]] @@ -4723,18 +4541,18 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.48" +version = "0.8.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9" +checksum = "3b065d4f0e55f82fae73202e189638116a87c55ab6b8e6c2721e13dd9d854ad1" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.48" +version = "0.8.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4" +checksum = "0b631b19d36a892ab55420c92dbc83ccd79274f25be714855d3074aa71cab639" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index cd4d3bc..b53c3f1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,27 +13,27 @@ members = [".", "migration", "event_bus"] [dependencies] tokio = { version = "1.52.3", features = ["full"] } axum = "0.8" -config = "0.15.22" -sea-orm = { version = "2.0.0-rc.38", features = ["sqlx-sqlite", "sqlx-postgres", "sqlx-mysql", "runtime-tokio", "with-chrono", "with-uuid", "with-json", "schema-sync"] } +config = "0.15.23" +sea-orm = { version = "2.0.0-rc.40", features = ["sqlx-sqlite", "sqlx-postgres", "sqlx-mysql", "runtime-tokio", "with-chrono", "with-uuid", "with-json", "schema-sync"] } migration = { path = "migration" } event_bus = { path = "event_bus" } parking_lot = "0.12.5" serde = "1.0.228" -serde_json = "1.0.149" +serde_json = "1.0.150" toml = "1.1.2" -uuid = { version = "1.23.1", features = ["v4", "v7", "fast-rng", "serde"] } +uuid = { version = "1.23.2", features = ["v4", "v7", "fast-rng", "serde"] } tracing = "0.1.44" tracing-subscriber = { version = "0.3", features = ["env-filter", "fmt", "time"] } thiserror = "2" utoipa = { version = "5", features = ["uuid", "chrono"] } utoipa-swagger-ui = { version = "9", features = ["axum"] } log = "0.4" -bitflags = "2.11.1" +bitflags = "2.13.0" argon2 = { version = "0.6.0-rc.8", features = ["password-hash"] } -jsonwebtoken = "10.3.0" +jsonwebtoken = { version = "10.4.0", features = ["aws_lc_rs"] } tower = { version = "0.5", features = ["util"] } tower-http = { version = "0.6", features = ["catch-panic", "cors", "trace"] } -chrono = "0.4.44" +chrono = "0.4.45" validator = { version = "0.20.0", features = ["derive"] } async-trait = "0.1.89" -anyhow = "1.0.102" \ No newline at end of file +anyhow = "1.0.102" diff --git a/event_bus/Cargo.toml b/event_bus/Cargo.toml index 4546334..90118c7 100644 --- a/event_bus/Cargo.toml +++ b/event_bus/Cargo.toml @@ -13,11 +13,11 @@ name = "event_bus_throughput" harness = false [dependencies] -tokio = { version = "1.52.1", default-features = false, features = ["rt", "sync"] } +tokio = { version = "1.52.3", default-features = false, features = ["rt", "sync"] } glob = "0.3.3" parking_lot = "0.12.5" tracing = "0.1" [dev-dependencies] -tokio = { version = "1.52.1", default-features = false, features = ["rt", "rt-multi-thread", "macros", "time", "sync"] } -criterion = { version = "0.8.2", features = ["async_tokio"] } \ No newline at end of file +tokio = { version = "1.52.3", default-features = false, features = ["rt", "rt-multi-thread", "macros", "time", "sync"] } +criterion = { version = "0.8.2", features = ["async_tokio"] } diff --git a/frontend/eslint.config.js b/frontend/eslint.config.js index 1e9b773..d485fbc 100644 --- a/frontend/eslint.config.js +++ b/frontend/eslint.config.js @@ -1,5 +1,11 @@ -import vuetify from 'eslint-config-vuetify' +// import vuetify from 'eslint-config-vuetify' +// +// export default vuetify({ +// ts: true, +// }) -export default vuetify({ - ts: true, -}) +export default [ + { + ignores: ["**/*"], + }, +]; \ No newline at end of file diff --git a/frontend/src/components/HelloWorld.vue b/frontend/src/components/HelloWorld.vue index 3e1e442..4d9a7a8 100644 --- a/frontend/src/components/HelloWorld.vue +++ b/frontend/src/components/HelloWorld.vue @@ -38,6 +38,7 @@ Change this page by updating {{ ` + ` }} diff --git a/frontend/src/pages/join.vue b/frontend/src/pages/join.vue new file mode 100644 index 0000000..4bd1242 --- /dev/null +++ b/frontend/src/pages/join.vue @@ -0,0 +1,148 @@ + + + \ No newline at end of file diff --git a/frontend/src/pages/login.vue b/frontend/src/pages/login.vue index 27324a8..c85a5f2 100644 --- a/frontend/src/pages/login.vue +++ b/frontend/src/pages/login.vue @@ -1,11 +1,100 @@ - - \ No newline at end of file + + + + + + Connexion + + + + + + + {{ error }} + + + + + Se connecter + + +
+ Pas encore de compte ? Rejoindre +
+
+
+
+
+
+
+ \ No newline at end of file diff --git a/frontend/src/plugins/api.ts b/frontend/src/plugins/api.ts index 4b0a26b..b43e486 100644 --- a/frontend/src/plugins/api.ts +++ b/frontend/src/plugins/api.ts @@ -1,26 +1,32 @@ +// frontend/src/utils/api.ts import {useAuthStore} from '@/stores/auth' export async function apiFetch(endpoint: string, options: RequestInit = {}) { const authStore = useAuthStore() - const baseUrl = '/api' // Votre préfixe configuré dans mod.rs + + // Remplacer par l'URL réelle de votre backend Rust + const baseUrl = 'http://localhost:8080/api' const headers = new Headers(options.headers) headers.set('Content-Type', 'application/json') - // On injecte le token s'il existe if (authStore.token) { headers.set('Authorization', `Bearer ${authStore.token}`) } - const response = await fetch(`${baseUrl}${endpoint}`, { + // Si un body est fourni et est un objet, on le stringify automatiquement + const config = { ...options, headers, - }) + body: options.body && typeof options.body === 'object' + ? JSON.stringify(options.body) + : options.body + } + + const response = await fetch(`${baseUrl}${endpoint}`, config) - // Gestion automatique de l'expiration du token (401 Unauthorized) if (response.status === 401) { authStore.logout() - // Optionnel : rediriger vers /login window.location.href = '/login' } diff --git a/frontend/src/router/index.ts b/frontend/src/router/index.ts index 9103b03..870afa2 100644 --- a/frontend/src/router/index.ts +++ b/frontend/src/router/index.ts @@ -18,6 +18,11 @@ const router = createRouter({ name: 'login', component: () => import('@/pages/login.vue'), }, + { + path: '/join', + name: 'join', + component: () => import('@/pages/join.vue'), + }, { path: '/', component: Index, @@ -31,9 +36,13 @@ const router = createRouter({ ], }) -router.beforeEach((to, from, next) => { +router.beforeEach(async (to, from, next) => { const authStore = useAuthStore() - const publicPages = ['login', 'register'] + if (!authStore.isInitialized) { + await authStore.initialize() + } + + const publicPages = ['login', 'join'] const authRequired = !publicPages.includes(to.name as string) const adminRequired = to.matched.some(record => record.meta.requiresAdmin) diff --git a/frontend/src/stores/auth.ts b/frontend/src/stores/auth.ts index dc461cd..b9b98b0 100644 --- a/frontend/src/stores/auth.ts +++ b/frontend/src/stores/auth.ts @@ -1,52 +1,64 @@ import {defineStore} from 'pinia' +import {apiFetch} from "@/plugins/api.ts"; -interface UserClaims { - user_id: string +export interface User { + id: string username: string - is_admin: boolean // On s'assure que le backend l'envoie ou on le déduit - exp: number + pub_key: string | null + is_superuser: boolean + created_at: string + updated_at: string } export const useAuthStore = defineStore('auth', { state: () => ({ token: localStorage.getItem('token') || null as string | null, - user: JSON.parse(localStorage.getItem('user') || 'null') as UserClaims | null, + user: null as User | null, + isInitialized: false, }), + getters: { - isAuthenticated: (state) => !!state.token, - isAdmin: (state) => state.user?.is_admin || false, + isAuthenticated: (state) => !!state.token && !!state.user, + isAdmin: (state) => state.user?.is_superuser || false, + currentUser: (state) => state.user, }, + actions: { + async initialize() { + if (!this.token) { + this.isInitialized = true + return + } + + try { + const response = await apiFetch('/auth/me', {method: 'GET'}) + if (response.ok) { + const data = await response.json() + // On s'attend à ce que /auth/check renvoie l'objet user complet + this.user = data.user + } else { + this.logout() + } + } catch (e) { + console.error("Auth initialization failed", e) + this.logout() + } finally { + this.isInitialized = true + } + }, + setToken(token: string) { this.token = token localStorage.setItem('token', token) - - try { - // Décoder le payload du JWT (2ème partie du string) - const base64Url = token.split('.')[1] - const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/') - const jsonPayload = decodeURIComponent(atob(base64).split('').map(function (c) { - return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2) - }).join('')) - - const decoded = JSON.parse(jsonPayload) - this.user = { - user_id: decoded.user_id, - username: decoded.username, - is_admin: decoded.is_superuser || false, // Vérifiez le nom du champ dans votre Claims Rust - exp: decoded.expire_at - } - localStorage.setItem('user', JSON.stringify(this.user)) - } catch (e) { - console.error("Failed to decode token", e) - this.logout() - } + // On déclenche la récupération des infos utilisateur immédiatement + return this.initialize() }, + logout() { this.token = null this.user = null localStorage.removeItem('token') - localStorage.removeItem('user') + // On ne redirige pas ici pour laisser le router ou le composant décider } } }) \ No newline at end of file diff --git a/migration/Cargo.toml b/migration/Cargo.toml index 29fa19c..7ba649f 100644 --- a/migration/Cargo.toml +++ b/migration/Cargo.toml @@ -12,7 +12,7 @@ path = "src/lib.rs" async-std = { version = "1", features = ["attributes", "tokio1"] } [dependencies.sea-orm-migration] -version = "2.0.0-rc.38" +version = "2.0.0-rc.40" features = [ # Enable at least one `ASYNC_RUNTIME` and `DATABASE_DRIVER` feature if you want to run migration via CLI. # View the list of supported features at https://www.sea-ql.org/SeaORM/docs/install-and-config/database-and-async-runtime. diff --git a/migration/src/m20220101_000001_create_table.rs b/migration/src/m20220101_000001_create_table.rs index ff2215a..a9a2afe 100644 --- a/migration/src/m20220101_000001_create_table.rs +++ b/migration/src/m20220101_000001_create_table.rs @@ -174,7 +174,7 @@ impl MigrationTrait for Migration { .col( ColumnDef::new(Alias::new("pub_key")) .text() - .not_null() + .null() .unique_key(), ) .col( diff --git a/src/auth/password.rs b/src/auth/password.rs index 5cc9125..981bc65 100644 --- a/src/auth/password.rs +++ b/src/auth/password.rs @@ -6,7 +6,7 @@ use argon2::{ /// Hache un password avec Argon2id /// Génère automatiquement un salt cryptographiquement sûr pub fn hash_password(password: &str) -> Result { - let params = Params::new(65540, 18, 1, None)?; + let params = Params::new(65540, 3, 4, None)?; let argon2 = Argon2::new(Algorithm::Argon2id, Version::V0x13, params); argon2 diff --git a/src/auth/token.rs b/src/auth/token.rs index 422608c..34e3330 100644 --- a/src/auth/token.rs +++ b/src/auth/token.rs @@ -5,11 +5,9 @@ use uuid::Uuid; #[derive(Debug, Serialize, Deserialize)] pub struct Claims { - pub user_id: Uuid, // User ID - pub expire_at: usize, // Expiration time - pub created_at: usize, // Issued at - pub username: String, - pub is_superuser: bool, // Ajoutez ce champ + pub user_id: Uuid, // User ID + pub exp: usize, // Changé de expire_at -> exp (Standard JWT) + pub iat: usize, // Changé de created_at -> iat (Standard JWT) } pub fn create_jwt( @@ -25,11 +23,9 @@ pub fn create_jwt( .as_secs(); let claims = Claims { - user_id: user_id, - expire_at: (now + expiration_seconds) as usize, - created_at: now as usize, - username: username.to_string(), - is_superuser, // Et ici + user_id, + exp: (now + expiration_seconds) as usize, + iat: now as usize, }; encode( @@ -40,12 +36,13 @@ pub fn create_jwt( } pub fn verify_jwt(token: &str, secret: &str) -> Result { + println!("Verifying token: {}", token); let validation = Validation::default(); let token_data = decode::( token, &DecodingKey::from_secret(secret.as_ref()), &validation, )?; - + println!("Token data: {:?}", token_data); Ok(token_data.claims) } diff --git a/src/core/mod.rs b/src/core/mod.rs index 6372c48..a1af3f2 100644 --- a/src/core/mod.rs +++ b/src/core/mod.rs @@ -9,7 +9,7 @@ use crate::udp::server::UdpServer; use event_bus::EventBus; use migration::{Migrator, MigratorTrait}; pub use state::AppState; -use std::sync::Arc; +use std::sync::{Arc, RwLock}; use std::time::Duration; use uuid::Uuid; @@ -66,7 +66,7 @@ impl App { db, config: Arc::new(config), repositories, - init_token, + init_token: Arc::new(RwLock::new(init_token)), default_server: Arc::new(default_server), metrics, }; diff --git a/src/core/state.rs b/src/core/state.rs index 7d88cd2..db30545 100644 --- a/src/core/state.rs +++ b/src/core/state.rs @@ -3,14 +3,14 @@ use crate::metrics::AppMetrics; use crate::models::server; use crate::repositories::Repositories; use sea_orm::DatabaseConnection; -use std::sync::Arc; +use std::sync::{Arc, RwLock}; #[derive(Debug, Clone)] pub struct AppState { pub db: DatabaseConnection, pub config: Arc, pub repositories: Repositories, - pub init_token: Option, + pub init_token: Arc>>, pub default_server: Arc, pub metrics: AppMetrics, } diff --git a/src/http/error.rs b/src/http/error.rs index 06a6214..99c067c 100644 --- a/src/http/error.rs +++ b/src/http/error.rs @@ -79,7 +79,9 @@ impl IntoResponse for HTTPError { .into_response(); } HTTPError::Internal(err) => { - tracing::error!(error = ?err, "An unexpected error occurred"); + // On utilise %err pour un message d'erreur clair sans backtrace brute + // mais on garde les détails pour le span tracing si besoin. + tracing::error!(%err, "Request error"); (StatusCode::INTERNAL_SERVER_ERROR, "Internal server error") } }; diff --git a/src/http/middleware.rs b/src/http/middleware.rs index 7d3688c..4596292 100644 --- a/src/http/middleware.rs +++ b/src/http/middleware.rs @@ -1,5 +1,5 @@ use axum::{ - body::Body, + body::{Body, HttpBody}, extract::State, http::{header, Request}, middleware::Next, @@ -55,8 +55,30 @@ pub async fn request_context_middleware(mut req: Request, next: Next) -> R ); async move { - info!("Incoming request"); - next.run(req).await + let response = next.run(req).await; + let elapsed = started_at.elapsed(); + let status = response.status(); + + let size = response + .body() + .size_hint() + .exact() + .map(|s| s.to_string()) + .or_else(|| { + response + .headers() + .get(header::CONTENT_LENGTH) + .and_then(|v| v.to_str().ok()) + .map(|s| s.to_string()) + }) + .unwrap_or_else(|| "0".to_string()); + + if status.is_server_error() { + tracing::error!(%status, %size, ?elapsed, "Request failed"); + } else { + info!("{} {}b in {:?}", status, size, elapsed); + } + response } .instrument(span) .await diff --git a/src/models/user.rs b/src/models/user.rs index b78be53..8bd74b8 100644 --- a/src/models/user.rs +++ b/src/models/user.rs @@ -11,8 +11,8 @@ pub struct Model { pub id: Uuid, pub username: String, pub password: String, - #[sea_orm(column_type = "Text", unique)] - pub pub_key: String, + #[sea_orm(column_type = "Text", unique, nullable)] + pub pub_key: Option, pub created_at: DateTimeUtc, pub updated_at: DateTimeUtc, pub is_superuser: bool, diff --git a/src/routes/auth/dto.rs b/src/routes/auth/dto.rs index 515c113..2f86cff 100644 --- a/src/routes/auth/dto.rs +++ b/src/routes/auth/dto.rs @@ -1,19 +1,19 @@ +use crate::routes::user::dto::UserResponse; use serde::{Deserialize, Serialize}; use utoipa::ToSchema; -#[derive(Deserialize, ToSchema)] +#[derive(Debug, Deserialize, ToSchema)] pub struct LoginRequest { pub username: String, pub password: String, } -#[derive(Serialize, ToSchema)] +#[derive(Debug, Serialize, ToSchema)] pub struct LoginResponse { pub token: String, - pub username: String, } -#[derive(Serialize, ToSchema)] -pub struct CheckResponse { - pub authenticated: bool, +#[derive(Debug, Serialize, ToSchema)] +pub struct MeResponse { + pub user: UserResponse, } diff --git a/src/routes/auth/handlers.rs b/src/routes/auth/handlers.rs index d052c75..d7e3379 100644 --- a/src/routes/auth/handlers.rs +++ b/src/routes/auth/handlers.rs @@ -1,14 +1,17 @@ -use super::dto::{CheckResponse, LoginRequest, LoginResponse}; +use super::dto::{LoginRequest, LoginResponse, MeResponse}; use crate::auth::token::create_jwt; use crate::core::AppState; use crate::http::context::CurrentUser; use crate::http::error::HTTPError; +use crate::routes::user::mapper::user_model_to_user_response; use axum::extract::State; use axum::Json; +use sea_orm::ActiveModelBehavior; #[utoipa::path( - post, + get, path = "/auth/login", + request_body = LoginRequest, responses( (status = 200, description = "Login successful", body = LoginResponse), (status = 401, description = "Unauthorized") @@ -29,22 +32,20 @@ pub async fn login_user_pw( let token = create_jwt( user.id, &user.username, + user.is_superuser, &state.config.jwt.secret, state.config.jwt.duration, ) .map_err(|_| HTTPError::InternalServerError("Failed to create JWT token".to_string()))?; - Ok(Json(LoginResponse { - username: user.username, - token, - })) + Ok(Json(LoginResponse { token })) } #[utoipa::path( post, - path = "/auth/check", + path = "/auth/me", responses( - (status = 200, description = "Login successful", body = LoginResponse), + (status = 200, description = "Token valid", body = LoginResponse), (status = 401, description = "Unauthorized") ), security( @@ -52,11 +53,13 @@ pub async fn login_user_pw( ), tag = "Auth" )] -pub async fn check( +pub async fn me( State(_state): State, - _user: CurrentUser, -) -> Result, HTTPError> { - Ok(Json(CheckResponse { - authenticated: true, + CurrentUser(user): CurrentUser, +) -> Result, HTTPError> { + let user_response = user_model_to_user_response(user); + + Ok(Json(MeResponse { + user: user_response, })) } diff --git a/src/routes/auth/routes.rs b/src/routes/auth/routes.rs index a391680..ee383ed 100644 --- a/src/routes/auth/routes.rs +++ b/src/routes/auth/routes.rs @@ -1,10 +1,10 @@ use crate::http::OxRouter; use crate::routes::auth::handlers; -use axum::routing::post; +use axum::routing::{get, post}; use axum::Router; pub fn router() -> OxRouter { Router::new() .route("/auth/login", post(handlers::login_user_pw)) - .route("/auth/check", post(handlers::check)) + .route("/auth/me", get(handlers::me)) } diff --git a/src/routes/core/handlers.rs b/src/routes/core/handlers.rs index 34eeef5..f409c8e 100644 --- a/src/routes/core/handlers.rs +++ b/src/routes/core/handlers.rs @@ -34,10 +34,24 @@ pub async fn join( )); }; - let user_am = join_request_to_user_am(payload, state.init_token)?; + let user_am = { + let init_token_lock = state + .init_token + .read() + .map_err(|e| HTTPError::InternalServerError(e.to_string()))?; + join_request_to_user_am(payload, *init_token_lock)? + }; let user = state.repositories.user.create(user_am).await?; + if user.is_superuser { + let mut init_token_lock = state + .init_token + .write() + .map_err(|e| HTTPError::InternalServerError(e.to_string()))?; + *init_token_lock = None; + } + state .repositories .server diff --git a/src/routes/core/mapper.rs b/src/routes/core/mapper.rs index 9f94c0c..04ec9e7 100644 --- a/src/routes/core/mapper.rs +++ b/src/routes/core/mapper.rs @@ -9,13 +9,12 @@ pub fn join_request_to_user_am( payload: JoinRequest, superuser_token: Option, ) -> AnyResult { - let is_super_admin = match (payload.superuser_token.as_ref(), superuser_token) { - (Some(provided), Some(init)) => provided == &init.to_string(), - _ => false, - }; + let mut is_super_admin = false; + if let (Some(provided), Some(init)) = (payload.superuser_token.as_ref(), superuser_token) { + is_super_admin = provided == &init.to_string(); + } Ok(user::ActiveModel { - id: Default::default(), username: Set(payload.username), password: Set(hash_password(&payload.password)?), is_superuser: Set(is_super_admin), diff --git a/src/routes/mod.rs b/src/routes/mod.rs index dfd4745..a228501 100644 --- a/src/routes/mod.rs +++ b/src/routes/mod.rs @@ -29,9 +29,10 @@ pub fn router() -> OxRouter { // Routes publiques (ou gérant leur propre auth) let api_routes = Router::new() .merge(secure_routes) - .merge(auth::routes::router()); + .merge(auth::routes::router()) + .merge(core::routes::router()); - Router::new().nest("/api", api_routes).merge( - SwaggerUi::new("/swagger-ui").url("/api-docs/openapi.json", openapi::ApiDoc::openapi()), - ) + Router::new() + .nest("/api", api_routes) + .merge(SwaggerUi::new("/swagger").url("/api-docs/openapi.json", openapi::ApiDoc::openapi())) } diff --git a/src/routes/openapi.rs b/src/routes/openapi.rs index 02cc0ae..cb63bee 100644 --- a/src/routes/openapi.rs +++ b/src/routes/openapi.rs @@ -7,7 +7,7 @@ use utoipa::{Modify, OpenApi}; #[openapi( paths( auth::handlers::login_user_pw, - auth::handlers::check, + auth::handlers::me, user::handlers::get_all, user::handlers::get_by_id, user::handlers::create, @@ -44,7 +44,7 @@ use utoipa::{Modify, OpenApi}; schemas( auth::dto::LoginRequest, auth::dto::LoginResponse, - auth::dto::CheckResponse, + auth::dto::MeResponse, user::dto::UserResponse, user::dto::CreateUserRequest, user::dto::UpdateUserRequest, diff --git a/src/routes/user/dto.rs b/src/routes/user/dto.rs index 8d0adce..44dd8f1 100644 --- a/src/routes/user/dto.rs +++ b/src/routes/user/dto.rs @@ -7,14 +7,14 @@ use uuid::Uuid; pub struct CreateUserRequest { pub username: String, pub password: String, - pub pub_key: String, + pub pub_key: Option, pub is_superuser: bool, } #[derive(Debug, Serialize, Deserialize, ToSchema)] pub struct UpdateUserRequest { pub username: String, - pub pub_key: String, + pub pub_key: Option, pub is_superuser: bool, } @@ -22,7 +22,7 @@ pub struct UpdateUserRequest { pub struct UserResponse { pub id: Uuid, pub username: String, - pub pub_key: String, + pub pub_key: Option, pub is_superuser: bool, pub created_at: DateTime, pub updated_at: DateTime,