83 Commits

Author SHA1 Message Date
37640b847b Merge pull request 'Update dependency react-easy-crop to ^5.5.0' () from renovate/react-easy-crop-5.x into master 2025-07-13 00:27:24 +00:00
5a62c71f5e Merge pull request 'Update dependency eslint to ^9.31.0' () from renovate/eslint-9.x into master 2025-07-13 00:23:29 +00:00
5886816c14 Update dependency react-easy-crop to ^5.5.0 2025-07-13 00:14:07 +00:00
32c5f521e2 Update dependency eslint to ^9.31.0 2025-07-13 00:14:04 +00:00
6792258e9e Merge pull request 'Update dependency @eslint/js to ^9.31.0' () from renovate/eslint-js-9.x into master 2025-07-12 00:34:14 +00:00
332c3697b8 Merge pull request 'Update Rust crate diesel to 2.2.12' () from renovate/diesel-2.x into master 2025-07-12 00:30:14 +00:00
4ecc7b9ef9 Update dependency @eslint/js to ^9.31.0 2025-07-12 00:14:36 +00:00
5f39f7c133 Update Rust crate diesel to 2.2.12 2025-07-12 00:14:31 +00:00
cc1e7345c4 Merge pull request 'Update Rust crate serde_with to 3.14.0' () from renovate/serde_with-3.x into master 2025-07-11 00:35:39 +00:00
58c1fc27ed Merge pull request 'Update Rust crate redis to 0.32.3' () from renovate/redis-0.x into master 2025-07-11 00:33:39 +00:00
b26efa30cf Update Rust crate serde_with to 3.14.0 2025-07-11 00:15:07 +00:00
a98080ad32 Update Rust crate redis to 0.32.3 2025-07-11 00:15:02 +00:00
ae1b7f55d0 Merge pull request 'Update Rust crate actix-web to 4.11.0' () from renovate/actix-web-4.x into master 2025-07-10 00:41:25 +00:00
c291dbce70 Merge pull request 'Update Rust crate clap to 4.5.41' () from renovate/clap-4.x into master 2025-07-10 00:29:53 +00:00
0b93750363 Update Rust crate actix-web to 4.11.0 2025-07-10 00:15:21 +00:00
f42980b10e Update Rust crate clap to 4.5.41 2025-07-10 00:14:44 +00:00
c6f4879d0d Merge pull request 'Update react' () from renovate/react into master 2025-07-09 00:36:59 +00:00
029eabce7f Merge pull request 'Update materialui to ^7.2.0' () from renovate/materialui into master 2025-07-09 00:33:14 +00:00
881b01970b Update react 2025-07-09 00:14:43 +00:00
d403bb4bb0 Update materialui to ^7.2.0 2025-07-09 00:14:33 +00:00
3635f37c63 Merge pull request 'Update dependency eslint to ^9.30.1' () from renovate/eslint-9.x into master 2025-07-08 00:28:56 +00:00
3b26fd80b7 Merge pull request 'Update dependency @eslint/js to ^9.30.1' () from renovate/eslint-js-9.x into master 2025-07-08 00:24:43 +00:00
b6d070b842 Update dependency eslint to ^9.30.1 2025-07-08 00:14:26 +00:00
0d428ff3d2 Update dependency @eslint/js to ^9.30.1 2025-07-08 00:14:19 +00:00
fd0dc8df47 Merge pull request 'Update fullcalendar to ^6.1.18' () from renovate/fullcalendar into master 2025-07-07 00:29:24 +00:00
96fcc7e7f9 Merge pull request 'Update dependency react-qr-code to ^2.0.17' () from renovate/react-qr-code-2.x into master 2025-07-07 00:25:44 +00:00
782b4fa450 Update fullcalendar to ^6.1.18 2025-07-07 00:14:15 +00:00
8ebaa9bdea Update dependency react-qr-code to ^2.0.18 2025-07-07 00:14:12 +00:00
8d4449a116 Merge pull request 'Update dependency globals to ^16.3.0' () from renovate/globals-16.x into master 2025-07-07 00:14:07 +00:00
3e29908ee9 Update dependency globals to ^16.3.0 2025-07-06 00:14:26 +00:00
999d0052ca Merge pull request 'Update dependency @mui/x-data-grid to ^7.29.8' () from renovate/mui-x-data-grid-7.x into master 2025-07-05 00:26:18 +00:00
90ad80b84a Update dependency @mui/x-data-grid to ^7.29.8 2025-07-05 00:08:09 +00:00
9e14fcf4ba Update dependency @emotion/styled to ^11.14.1 2025-07-04 00:07:40 +00:00
776d24031b Fix cargo clippy issues 2025-07-03 08:28:00 +02:00
991a3340e5 Update materialui to ^7.1.2 2025-06-26 00:07:51 +00:00
012dc3eb3c Update dependency vite to ^6.3.5 2025-06-25 00:07:48 +00:00
3f43dea93c Update dependency @vitejs/plugin-react to ^4.6.0 2025-06-24 00:07:24 +00:00
8e7ce2f6bc Update dependency eslint to ^9.29.0 2025-06-23 00:18:28 +00:00
a1c047f936 Update dependency @vitejs/plugin-react to ^4.5.2 2025-06-22 00:18:27 +00:00
f3f7ebae35 Update dependency @eslint/js to ^9.29.0 2025-06-21 00:18:28 +00:00
60fd656b94 Update dependency @mui/lab to ^7.0.0-beta.14 2025-06-20 00:18:46 +00:00
9f25e39cca Update Rust crate diesel to 2.2.11 2025-06-19 00:19:09 +00:00
0c178daf55 Update Rust crate lettre to 0.11.17 2025-06-18 00:20:26 +00:00
8dbc5c452e Update dependency react-qr-code to ^2.0.16 2025-06-17 00:20:04 +00:00
e5ee0b4d77 Update Rust crate futures-util to 0.3.31 2025-06-16 00:20:26 +00:00
bc3bfe08c6 Update Rust crate clap to 4.5.40 2025-06-15 00:20:37 +00:00
f2d391a430 Update dependency react-easy-crop to ^5.4.2 2025-06-14 00:20:51 +00:00
764a7d94e3 Update dependency @mui/x-date-pickers to ^7.29.4 2025-06-13 00:20:53 +00:00
aea6a64896 Update dependency @mui/x-data-grid to ^7.29.6 2025-06-12 00:21:10 +00:00
9c728f312b Update dependency @mui/lab to ^7.0.0-beta.13 2025-06-11 00:20:57 +00:00
c7d4056dc3 Update dependency @fontsource/roboto to ^5.2.6 2025-06-10 00:21:11 +00:00
555e72ef22 Update dependency @eslint/js to ^9.28.0 2025-06-09 00:21:09 +00:00
f35926dfb6 Update dependency eslint to ^9.28.0 2025-06-07 00:20:32 +00:00
067ac5181b Fix cargo clippy issues 2025-06-06 06:03:38 +00:00
b83314f540 Update dependency @vitejs/plugin-react to ^4.4.1 2025-05-15 00:14:57 +00:00
3203d12aac Update dependency @mui/x-tree-view to ^7.29.1 2025-05-14 00:15:14 +00:00
fae4e144f4 Update Rust crate lettre to 0.11.16 2025-05-13 00:15:54 +00:00
8179c7a6d6 Update Rust crate clap to 4.5.38 2025-05-12 00:15:32 +00:00
a42b887a74 Update dependency @mui/x-date-pickers to ^7.29.3 2025-05-11 00:14:59 +00:00
84ed2c6754 Update dependency @mui/x-data-grid to ^7.29.3 2025-05-10 00:14:49 +00:00
126920b41f Update dependency @eslint/js to ^9.26.0 2025-05-09 00:14:51 +00:00
24fa207005 Update Rust crate sha2 to 0.10.9 2025-05-08 00:23:47 +00:00
40901c55db Update dependency @mui/lab to ^7.0.0-beta.12 2025-05-07 00:23:14 +00:00
fd870317dd Update Rust crate rand to 0.9.1 2025-05-06 00:23:48 +00:00
4f6d4abb43 Update Rust crate diesel to 2.2.10 2025-05-05 00:23:51 +00:00
94da037d55 Update Rust crate clap to 4.5.37 2025-05-04 00:23:47 +00:00
88e8c9bf05 Update Rust crate chrono to 0.4.41 2025-05-03 00:23:49 +00:00
40bbfd9adf Update Rust crate anyhow to 1.0.98 2025-05-02 00:18:54 +00:00
c803ccb212 Update materialui to ^7.0.2 2025-05-01 00:18:52 +00:00
db98ff4ed2 Update fullcalendar to ^6.1.17 2025-04-30 00:18:51 +00:00
44c54112b6 Update dependency typescript to ^5.8.3 2025-04-29 00:18:20 +00:00
cdcb86913f Update dependency react-qr-code to ^2.0.15 2025-04-28 00:18:14 +00:00
fcfe457514 Update dependency eslint-plugin-react-refresh to ^0.4.20 2025-04-27 00:18:08 +00:00
55745f5845 Update dependency eslint-plugin-react-hooks to ^5.2.0 2025-04-26 00:18:21 +00:00
2ee8bc337f Update dependency eslint to ^9.25.1 2025-04-25 00:18:28 +00:00
e441480bf7 Update dependency @mui/lab to ^7.0.0-beta.11 2025-04-24 00:18:50 +00:00
c84817d190 Update dependency @mdi/js to ^7.4.47 2025-04-23 00:18:05 +00:00
f615291950 Update dependency @eslint/js to ^9.25.1 2025-04-22 00:25:59 +00:00
b95aa90836 Update dependency @emotion/styled to ^11.14.0 2025-04-21 00:26:36 +00:00
22d2bbfc41 Update dependency @emotion/react to ^11.14.0 2025-04-20 00:25:55 +00:00
069ca185cc Remove temporary fix 2025-04-19 10:43:04 +02:00
9b8f2bd3cf Remove temporary fix 2025-04-19 10:42:39 +02:00
6c9a0db8d5 Update mui-color-input to v7.0.0 2025-04-19 10:38:16 +02:00
22 changed files with 1959 additions and 1070 deletions

@ -24,7 +24,7 @@ steps:
commands: commands:
# Build website # Build website
- cd geneit_app - cd geneit_app
- npm install --legacy-peer-deps # TODO : remove when mui-color-input is updated - npm install
- GENERATE_SOURCEMAP=false npm run build - GENERATE_SOURCEMAP=false npm run build
# Install AWS # Install AWS
- curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" - curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"

File diff suppressed because it is too large Load Diff

@ -11,46 +11,46 @@
}, },
"dependencies": { "dependencies": {
"@emotion/react": "^11.14.0", "@emotion/react": "^11.14.0",
"@emotion/styled": "^11.13.0", "@emotion/styled": "^11.14.1",
"@fontsource/roboto": "^5.2.5", "@fontsource/roboto": "^5.2.6",
"@fullcalendar/core": "^6.1.15", "@fullcalendar/core": "^6.1.18",
"@fullcalendar/daygrid": "^6.1.15", "@fullcalendar/daygrid": "^6.1.18",
"@fullcalendar/interaction": "^6.1.15", "@fullcalendar/interaction": "^6.1.18",
"@fullcalendar/list": "^6.1.15", "@fullcalendar/list": "^6.1.18",
"@fullcalendar/react": "^6.1.15", "@fullcalendar/react": "^6.1.18",
"@mdi/js": "^7.2.96", "@mdi/js": "^7.4.47",
"@mdi/react": "^1.6.1", "@mdi/react": "^1.6.1",
"@mui/icons-material": "^7.0.0", "@mui/icons-material": "^7.2.0",
"@mui/lab": "^7.0.0-beta.9", "@mui/lab": "^7.0.0-beta.14",
"@mui/material": "^7.0.0", "@mui/material": "^7.2.0",
"@mui/x-data-grid": "^7.28.2", "@mui/x-data-grid": "^7.29.8",
"@mui/x-date-pickers": "^7.28.2", "@mui/x-date-pickers": "^7.29.4",
"@mui/x-tree-view": "^7.28.1", "@mui/x-tree-view": "^7.29.1",
"date-and-time": "^3.6.0", "date-and-time": "^3.6.0",
"dayjs": "^1.11.13", "dayjs": "^1.11.13",
"email-validator": "^2.0.4", "email-validator": "^2.0.4",
"filesize": "^10.1.6", "filesize": "^10.1.6",
"jspdf": "^3.0.1", "jspdf": "^3.0.1",
"mui-color-input": "^6.0.0", "mui-color-input": "^7.0.0",
"react": "^19.0.0", "react": "^19.1.0",
"react-dom": "^19.0.0", "react-dom": "^19.1.0",
"react-easy-crop": "^5.4.1", "react-easy-crop": "^5.5.0",
"react-qr-code": "^2.0.14", "react-qr-code": "^2.0.18",
"react-router-dom": "^7.4.0", "react-router-dom": "^7.4.0",
"react-zoom-pan-pinch": "^3.7.0", "react-zoom-pan-pinch": "^3.7.0",
"svg2pdf.js": "^2.5.0" "svg2pdf.js": "^2.5.0"
}, },
"devDependencies": { "devDependencies": {
"@eslint/js": "^9.21.0", "@eslint/js": "^9.31.0",
"@types/react": "^19.0.12", "@types/react": "^19.1.8",
"@types/react-dom": "^19.0.4", "@types/react-dom": "^19.1.6",
"@vitejs/plugin-react": "^4.3.4", "@vitejs/plugin-react": "^4.6.0",
"eslint": "^9.21.0", "eslint": "^9.31.0",
"eslint-plugin-react-hooks": "^5.1.0", "eslint-plugin-react-hooks": "^5.2.0",
"eslint-plugin-react-refresh": "^0.4.19", "eslint-plugin-react-refresh": "^0.4.20",
"globals": "^16.0.0", "globals": "^16.3.0",
"typescript": "^5.8.2", "typescript": "^5.8.3",
"typescript-eslint": "^8.24.1", "typescript-eslint": "^8.24.1",
"vite": "^6.2.3" "vite": "^6.3.5"
} }
} }

@ -36,9 +36,9 @@ dependencies = [
[[package]] [[package]]
name = "actix-http" name = "actix-http"
version = "3.10.0" version = "3.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0fa882656b67966045e4152c634051e70346939fced7117d5f0b52146a7c74c9" checksum = "44dfe5c9e0004c623edc65391dfd51daa201e7e30ebd9c9bedf873048ec32bc2"
dependencies = [ dependencies = [
"actix-codec", "actix-codec",
"actix-rt", "actix-rt",
@ -64,7 +64,7 @@ dependencies = [
"mime", "mime",
"percent-encoding", "percent-encoding",
"pin-project-lite", "pin-project-lite",
"rand 0.9.0", "rand 0.9.1",
"sha1", "sha1",
"smallvec", "smallvec",
"tokio", "tokio",
@ -159,9 +159,9 @@ dependencies = [
[[package]] [[package]]
name = "actix-server" name = "actix-server"
version = "2.5.1" version = "2.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6398974fd4284f4768af07965701efbbb5fdc0616bff20cade1bb14b77675e24" checksum = "a65064ea4a457eaf07f2fba30b4c695bf43b721790e9530d26cb6f9019ff7502"
dependencies = [ dependencies = [
"actix-rt", "actix-rt",
"actix-service", "actix-service",
@ -196,9 +196,9 @@ dependencies = [
[[package]] [[package]]
name = "actix-web" name = "actix-web"
version = "4.10.2" version = "4.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f2e3b15b3dc6c6ed996e4032389e9849d4ab002b1e92fbfe85b5f307d1479b4d" checksum = "a597b77b5c6d6a1e1097fddde329a83665e25c5437c696a3a9a4aa514a614dea"
dependencies = [ dependencies = [
"actix-codec", "actix-codec",
"actix-http", "actix-http",
@ -390,9 +390,9 @@ dependencies = [
[[package]] [[package]]
name = "anyhow" name = "anyhow"
version = "1.0.97" version = "1.0.98"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dcfed56ad506cb2c684a14971b8861fdc3baaaae314b9e5f9bb532cbe3ba7a4f" checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487"
[[package]] [[package]]
name = "arbitrary" name = "arbitrary"
@ -403,12 +403,6 @@ dependencies = [
"derive_arbitrary", "derive_arbitrary",
] ]
[[package]]
name = "arc-swap"
version = "1.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457"
[[package]] [[package]]
name = "arg_enum_proc_macro" name = "arg_enum_proc_macro"
version = "0.3.4" version = "0.3.4"
@ -597,9 +591,9 @@ dependencies = [
[[package]] [[package]]
name = "brotli" name = "brotli"
version = "7.0.0" version = "8.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cc97b8f16f944bba54f0433f07e30be199b6dc2bd25937444bbad560bcea29bd" checksum = "9991eea70ea4f293524138648e41ee89b0b2b12ddef3b255effa43c8056e0e0d"
dependencies = [ dependencies = [
"alloc-no-stdlib", "alloc-no-stdlib",
"alloc-stdlib", "alloc-stdlib",
@ -608,9 +602,9 @@ dependencies = [
[[package]] [[package]]
name = "brotli-decompressor" name = "brotli-decompressor"
version = "4.0.2" version = "5.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "74fa05ad7d803d413eb8380983b092cbbaf9a85f151b871360e7b00cd7060b37" checksum = "874bb8112abecc98cbd6d81ea4fa7e94fb9449648c93cc89aa40c81c24d7de03"
dependencies = [ dependencies = [
"alloc-no-stdlib", "alloc-no-stdlib",
"alloc-stdlib", "alloc-stdlib",
@ -709,9 +703,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]] [[package]]
name = "chrono" name = "chrono"
version = "0.4.40" version = "0.4.41"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1a7964611d71df112cb1730f2ee67324fcf4d0fc6606acbbe9bfe06df124637c" checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d"
dependencies = [ dependencies = [
"android-tzdata", "android-tzdata",
"iana-time-zone", "iana-time-zone",
@ -744,9 +738,9 @@ dependencies = [
[[package]] [[package]]
name = "clap" name = "clap"
version = "4.5.35" version = "4.5.41"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d8aa86934b44c19c50f87cc2790e19f54f7a67aedb64101c2e1a2e5ecfb73944" checksum = "be92d32e80243a54711e5d7ce823c35c41c9d929dc4ab58e1276f625841aadf9"
dependencies = [ dependencies = [
"clap_builder", "clap_builder",
"clap_derive", "clap_derive",
@ -754,9 +748,9 @@ dependencies = [
[[package]] [[package]]
name = "clap_builder" name = "clap_builder"
version = "4.5.35" version = "4.5.41"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2414dbb2dd0695280da6ea9261e327479e9d37b0630f6b53ba2a11c60c679fd9" checksum = "707eab41e9622f9139419d573eca0900137718000c517d47da73045f54331c3d"
dependencies = [ dependencies = [
"anstream", "anstream",
"anstyle", "anstyle",
@ -766,9 +760,9 @@ dependencies = [
[[package]] [[package]]
name = "clap_derive" name = "clap_derive"
version = "4.5.32" version = "4.5.41"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "09176aae279615badda0765c0c0b3f6ed53f4709118af73cf4655d85d1530cd7" checksum = "ef4f52386a59ca4c860f7393bcf8abd8dfd91ecccc0f774635ff68e92eeef491"
dependencies = [ dependencies = [
"heck", "heck",
"proc-macro2", "proc-macro2",
@ -1056,9 +1050,9 @@ dependencies = [
[[package]] [[package]]
name = "diesel" name = "diesel"
version = "2.2.9" version = "2.2.12"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "34d3950690ba3a6910126162b47e775e203006d4242a15de912bec6c0a695153" checksum = "229850a212cd9b84d4f0290ad9d294afc0ae70fccaa8949dbe8b43ffafa1e20c"
dependencies = [ dependencies = [
"bitflags 2.9.0", "bitflags 2.9.0",
"byteorder", "byteorder",
@ -1166,6 +1160,12 @@ dependencies = [
"syn", "syn",
] ]
[[package]]
name = "dyn-clone"
version = "1.0.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1c7a8fb8a9fbf66c1f703fe16184d10ca0ee9d23be5b4436400408ba54a95005"
[[package]] [[package]]
name = "either" name = "either"
version = "1.15.0" version = "1.15.0"
@ -1443,7 +1443,7 @@ dependencies = [
"log", "log",
"mailchecker", "mailchecker",
"mime_guess", "mime_guess",
"rand 0.9.0", "rand 0.9.1",
"redis", "redis",
"rust-s3", "rust-s3",
"rust_iso3166", "rust_iso3166",
@ -2066,6 +2066,17 @@ dependencies = [
"syn", "syn",
] ]
[[package]]
name = "io-uring"
version = "0.7.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b86e202f00093dcba4275d4636b93ef9dd75d025ae560d2521b45ea28ab49013"
dependencies = [
"bitflags 2.9.0",
"cfg-if",
"libc",
]
[[package]] [[package]]
name = "ipnet" name = "ipnet"
version = "2.11.0" version = "2.11.0"
@ -2196,9 +2207,9 @@ checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8"
[[package]] [[package]]
name = "lettre" name = "lettre"
version = "0.11.15" version = "0.11.17"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "759bc2b8eabb6a30b235d6f716f7f36479f4b38cbe65b8747aefee51f89e8437" checksum = "cb2a0354e9ece2fcdcf9fa53417f6de587230c0c248068eb058fa26c4a753179"
dependencies = [ dependencies = [
"base64", "base64",
"chumsky", "chumsky",
@ -2904,13 +2915,12 @@ dependencies = [
[[package]] [[package]]
name = "rand" name = "rand"
version = "0.9.0" version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3779b94aeb87e8bd4e834cee3650289ee9e0d5677f976ecdb6d219e5f4f6cd94" checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97"
dependencies = [ dependencies = [
"rand_chacha 0.9.0", "rand_chacha 0.9.0",
"rand_core 0.9.3", "rand_core 0.9.3",
"zerocopy 0.8.24",
] ]
[[package]] [[package]]
@ -3023,11 +3033,10 @@ dependencies = [
[[package]] [[package]]
name = "redis" name = "redis"
version = "0.29.5" version = "0.32.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1bc42f3a12fd4408ce64d8efef67048a924e543bd35c6591c0447fda9054695f" checksum = "7f0f6a8c53351d89a3869a703459995a0bcadcfa846002707fbc7e5cca235c4a"
dependencies = [ dependencies = [
"arc-swap",
"combine", "combine",
"itoa", "itoa",
"num-bigint", "num-bigint",
@ -3058,6 +3067,26 @@ dependencies = [
"thiserror 1.0.69", "thiserror 1.0.69",
] ]
[[package]]
name = "ref-cast"
version = "1.0.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4a0ae411dbe946a674d89546582cea4ba2bb8defac896622d6496f14c23ba5cf"
dependencies = [
"ref-cast-impl",
]
[[package]]
name = "ref-cast-impl"
version = "1.0.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]] [[package]]
name = "regex" name = "regex"
version = "1.11.1" version = "1.11.1"
@ -3322,6 +3351,30 @@ dependencies = [
"windows-sys 0.59.0", "windows-sys 0.59.0",
] ]
[[package]]
name = "schemars"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f"
dependencies = [
"dyn-clone",
"ref-cast",
"serde",
"serde_json",
]
[[package]]
name = "schemars"
version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "82d20c4491bc164fa2f6c5d44565947a52ad80b9505d8e36f8d54c27c739fcd0"
dependencies = [
"dyn-clone",
"ref-cast",
"serde",
"serde_json",
]
[[package]] [[package]]
name = "scopeguard" name = "scopeguard"
version = "1.2.0" version = "1.2.0"
@ -3421,15 +3474,17 @@ dependencies = [
[[package]] [[package]]
name = "serde_with" name = "serde_with"
version = "3.12.0" version = "3.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d6b6f7f2fcb69f747921f79f3926bd1e203fce4fef62c268dd3abfb6d86029aa" checksum = "f2c45cd61fefa9db6f254525d46e392b852e0e61d9a1fd36e5bd183450a556d5"
dependencies = [ dependencies = [
"base64", "base64",
"chrono", "chrono",
"hex", "hex",
"indexmap 1.9.3", "indexmap 1.9.3",
"indexmap 2.8.0", "indexmap 2.8.0",
"schemars 0.9.0",
"schemars 1.0.4",
"serde", "serde",
"serde_derive", "serde_derive",
"serde_json", "serde_json",
@ -3439,9 +3494,9 @@ dependencies = [
[[package]] [[package]]
name = "serde_with_macros" name = "serde_with_macros"
version = "3.12.0" version = "3.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8d00caa5193a3c8362ac2b73be6b9e768aa5a4b2f721d8f4b339600c3cb51f8e" checksum = "de90945e6565ce0d9a25098082ed4ee4002e047cb59892c318d66821e14bb30f"
dependencies = [ dependencies = [
"darling", "darling",
"proc-macro2", "proc-macro2",
@ -3468,9 +3523,9 @@ checksum = "bbfa15b3dddfee50a0fff136974b3e1bde555604ba463834a7eb7deb6417705d"
[[package]] [[package]]
name = "sha2" name = "sha2"
version = "0.10.8" version = "0.10.9"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283"
dependencies = [ dependencies = [
"cfg-if", "cfg-if",
"cpufeatures", "cpufeatures",
@ -3784,17 +3839,19 @@ dependencies = [
[[package]] [[package]]
name = "tokio" name = "tokio"
version = "1.44.1" version = "1.46.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f382da615b842244d4b8738c82ed1275e6c5dd90c459a30941cd07080b06c91a" checksum = "0cc3a2344dafbe23a245241fe8b09735b521110d30fcefbbd5feb1797ca35d17"
dependencies = [ dependencies = [
"backtrace", "backtrace",
"bytes", "bytes",
"io-uring",
"libc", "libc",
"mio", "mio",
"parking_lot", "parking_lot",
"pin-project-lite", "pin-project-lite",
"signal-hook-registry", "signal-hook-registry",
"slab",
"socket2", "socket2",
"windows-sys 0.52.0", "windows-sys 0.52.0",
] ]

@ -8,30 +8,30 @@ edition = "2024"
[dependencies] [dependencies]
log = "0.4.27" log = "0.4.27"
env_logger = "0.11.8" env_logger = "0.11.8"
clap = { version = "4.5.35", features = ["derive", "env"] } clap = { version = "4.5.41", features = ["derive", "env"] }
lazy_static = "1.5.0" lazy_static = "1.5.0"
lazy-regex = "3.4.1" lazy-regex = "3.4.1"
anyhow = "1.0.97" anyhow = "1.0.98"
actix-web = "4.10.2" actix-web = "4.11.0"
actix-cors = "0.7.1" actix-cors = "0.7.1"
actix-multipart = "0.7.2" actix-multipart = "0.7.2"
actix-remote-ip = "0.1.0" actix-remote-ip = "0.1.0"
futures-util = "0.3.30" futures-util = "0.3.31"
diesel = { version = "2.2.9", features = ["postgres"] } diesel = { version = "2.2.12", features = ["postgres"] }
diesel_migrations = "2.2.0" diesel_migrations = "2.2.0"
serde = { version = "1.0.219", features = ["derive"] } serde = { version = "1.0.219", features = ["derive"] }
serde_json = "1.0.140" serde_json = "1.0.140"
mailchecker = "6.0.17" mailchecker = "6.0.17"
redis = "0.29.5" redis = "0.32.3"
lettre = "0.11.15" lettre = "0.11.17"
rand = "0.9.0" rand = "0.9.1"
bcrypt = "0.17.0" bcrypt = "0.17.0"
light-openid = "1.0.4" light-openid = "1.0.4"
thiserror = "2.0.12" thiserror = "2.0.12"
serde_with = "3.12.0" serde_with = "3.14.0"
rust_iso3166 = "0.1.14" rust_iso3166 = "0.1.14"
rust-s3 = "0.35.1" rust-s3 = "0.35.1"
sha2 = "0.10.8" sha2 = "0.10.9"
image = "0.25.6" image = "0.25.6"
uuid = { version = "1.16.0", features = ["v4"] } uuid = { version = "1.16.0", features = ["v4"] }
httpdate = "1.0.3" httpdate = "1.0.3"
@ -40,4 +40,4 @@ mime_guess = "2.0.5"
tempfile = "3.19.1" tempfile = "3.19.1"
base64 = "0.22.1" base64 = "0.22.1"
ical = { version = "0.11.0", features = ["generator", "ical", "vcard"] } ical = { version = "0.11.0", features = ["generator", "ical", "vcard"] }
chrono = "0.4.40" chrono = "0.4.41"

@ -21,7 +21,7 @@ where
if POSTGRES_CONNECTION.with(|i| i.borrow().is_none()) { if POSTGRES_CONNECTION.with(|i| i.borrow().is_none()) {
let database_url = AppConfig::get().db_connection_chain(); let database_url = AppConfig::get().db_connection_chain();
let conn = PgConnection::establish(&database_url) let conn = PgConnection::establish(&database_url)
.unwrap_or_else(|_| panic!("Error connecting to {}", database_url)); .unwrap_or_else(|_| panic!("Error connecting to {database_url}"));
POSTGRES_CONNECTION.with(|i| *i.borrow_mut() = Some(conn)) POSTGRES_CONNECTION.with(|i| *i.borrow_mut() = Some(conn))
} }
@ -38,7 +38,7 @@ where
POSTGRES_CONNECTION.with(|i| *i.borrow_mut() = None) POSTGRES_CONNECTION.with(|i| *i.borrow_mut() = None)
} }
log::error!("Database query error! {:?}", e); log::error!("Database query error! {e:?}");
Err(e.into()) Err(e.into())
} }
} }

@ -30,7 +30,7 @@ pub async fn create_bucket_if_required() -> anyhow::Result<()> {
log::warn!("The bucket does not seem to exists, trying to create it!") log::warn!("The bucket does not seem to exists, trying to create it!")
} }
Err(e) => { Err(e) => {
log::error!("Got unexpected error when querying bucket info: {}", e); log::error!("Got unexpected error when querying bucket info: {e}");
return Err(BucketServiceError::FailedFetchBucketInfo.into()); return Err(BucketServiceError::FailedFetchBucketInfo.into());
} }
} }

@ -79,10 +79,7 @@ pub async fn request_reset_password(
match users_service::get_by_mail(&req.mail).await { match users_service::get_by_mail(&req.mail).await {
Ok(mut user) => users_service::request_reset_password(&mut user).await?, Ok(mut user) => users_service::request_reset_password(&mut user).await?,
Err(e) => { Err(e) => {
log::error!( log::error!("Could not locate user account {e}! (error silently ignored)");
"Could not locate user account {}! (error silently ignored)",
e
);
} }
} }
@ -122,7 +119,7 @@ pub async fn check_reset_password_token(
RatedAction::CheckResetPasswordTokenFailed, RatedAction::CheckResetPasswordTokenFailed,
) )
.await?; .await?;
log::error!("Password reset token could not be used: {}", e); log::error!("Password reset token could not be used: {e}");
return Ok(HttpResponse::NotFound().finish()); return Ok(HttpResponse::NotFound().finish());
} }
}; };
@ -156,7 +153,7 @@ pub async fn reset_password(remote_ip: RemoteIP, req: web::Json<ResetPasswordBod
RatedAction::CheckResetPasswordTokenFailed, RatedAction::CheckResetPasswordTokenFailed,
) )
.await?; .await?;
log::error!("Password reset token could not be used: {}", e); log::error!("Password reset token could not be used: {e}");
return Ok(HttpResponse::NotFound().finish()); return Ok(HttpResponse::NotFound().finish());
} }
}; };
@ -196,7 +193,7 @@ pub async fn password_login(remote_ip: RemoteIP, req: web::Json<PasswordLoginQue
let user = match users_service::get_by_mail(&req.mail).await { let user = match users_service::get_by_mail(&req.mail).await {
Ok(u) => u, Ok(u) => u,
Err(e) => { Err(e) => {
log::error!("Auth failed: could not find account by mail! {}", e); log::error!("Auth failed: could not find account by mail! {e}");
rate_limiter_service::record_action(remote_ip.0, RatedAction::FailedPasswordLogin) rate_limiter_service::record_action(remote_ip.0, RatedAction::FailedPasswordLogin)
.await?; .await?;
return Ok(HttpResponse::Unauthorized().json("Invalid credentials")); return Ok(HttpResponse::Unauthorized().json("Invalid credentials"));

@ -183,9 +183,9 @@ pub async fn import_family(
} }
if let Err(e) = req_member_data.to_member(member).await { if let Err(e) = req_member_data.to_member(member).await {
log::error!("Error while processing import (member {:?}) - {e}", req_id); log::error!("Error while processing import (member {req_id:?}) - {e}");
return Ok( return Ok(
HttpResponse::BadRequest().json(format!("Failed to validate member {:?}!", req_id)) HttpResponse::BadRequest().json(format!("Failed to validate member {req_id:?}!"))
); );
} }

@ -31,7 +31,7 @@ impl Display for HttpErr {
impl actix_web::error::ResponseError for HttpErr { impl actix_web::error::ResponseError for HttpErr {
fn error_response(&self) -> HttpResponse<BoxBody> { fn error_response(&self) -> HttpResponse<BoxBody> {
log::error!("Error while processing request! {}", self); log::error!("Error while processing request! {self}");
HttpResponse::InternalServerError().body("Failed to execute request!") HttpResponse::InternalServerError().body("Failed to execute request!")
} }
} }

@ -75,7 +75,7 @@ impl FromRequest for FamilyAndAccommodationInPath {
Self::load_accommodation_from_path(family, accommodation_id) Self::load_accommodation_from_path(family, accommodation_id)
.await .await
.map_err(|e| { .map_err(|e| {
log::error!("Failed to extract accommodation ID from URL! {}", e); log::error!("Failed to extract accommodation ID from URL! {e}");
actix_web::error::ErrorNotFound("Could not fetch accommodation information!") actix_web::error::ErrorNotFound("Could not fetch accommodation information!")
}) })
}) })

@ -85,7 +85,7 @@ impl FromRequest for FamilyAndAccommodationReservationCalendarInPath {
Self::load_calendar_from_path(family, accommodation_id) Self::load_calendar_from_path(family, accommodation_id)
.await .await
.map_err(|e| { .map_err(|e| {
log::error!("Failed to extract calendar ID from URL! {}", e); log::error!("Failed to extract calendar ID from URL! {e}");
actix_web::error::ErrorNotFound("Could not fetch calendar information!") actix_web::error::ErrorNotFound("Could not fetch calendar information!")
}) })
}) })

@ -95,7 +95,7 @@ impl FromRequest for FamilyAndAccommodationReservationInPath {
Self::load_accommodation_reservation_from_path(family, reservation_id) Self::load_accommodation_reservation_from_path(family, reservation_id)
.await .await
.map_err(|e| { .map_err(|e| {
log::error!("Failed to extract accommodation ID from URL! {}", e); log::error!("Failed to extract accommodation ID from URL! {e}");
actix_web::error::ErrorNotFound("Could not fetch accommodation information!") actix_web::error::ErrorNotFound("Could not fetch accommodation information!")
}) })
}) })

@ -71,7 +71,7 @@ impl FromRequest for FamilyAndCoupleInPath {
FamilyAndCoupleInPath::load_couple_from_path(family, couple_id) FamilyAndCoupleInPath::load_couple_from_path(family, couple_id)
.await .await
.map_err(|e| { .map_err(|e| {
log::error!("Failed to extract couple ID from URL! {}", e); log::error!("Failed to extract couple ID from URL! {e}");
actix_web::error::ErrorNotFound("Could not fetch couple information!") actix_web::error::ErrorNotFound("Could not fetch couple information!")
}) })
}) })

@ -62,7 +62,7 @@ impl FromRequest for FamilyInPath {
FamilyInPath::load_family_from_path(&token, family_id) FamilyInPath::load_family_from_path(&token, family_id)
.await .await
.map_err(|e| { .map_err(|e| {
log::error!("Failed to extract family ID from URL! {}", e); log::error!("Failed to extract family ID from URL! {e}");
actix_web::error::ErrorNotFound("Could not fetch family information!") actix_web::error::ErrorNotFound("Could not fetch family information!")
}) })
}) })

@ -71,7 +71,7 @@ impl FromRequest for FamilyAndMemberInPath {
FamilyAndMemberInPath::load_member_from_path(family, member_id) FamilyAndMemberInPath::load_member_from_path(family, member_id)
.await .await
.map_err(|e| { .map_err(|e| {
log::error!("Failed to extract member ID from URL! {}", e); log::error!("Failed to extract member ID from URL! {e}");
actix_web::error::ErrorNotFound("Could not fetch member information!") actix_web::error::ErrorNotFound("Could not fetch member information!")
}) })
}) })

@ -43,7 +43,7 @@ impl User {
.as_deref() .as_deref()
.map(|hash| { .map(|hash| {
bcrypt::verify(password, hash).unwrap_or_else(|e| { bcrypt::verify(password, hash).unwrap_or_else(|e| {
log::error!("Failed to validate password! {}", e); log::error!("Failed to validate password! {e}");
false false
}) })
}) })

@ -125,13 +125,13 @@ async fn load_token_info(token: &LoginTokenValue) -> anyhow::Result<Option<Login
let token = match user_tokens.iter_mut().find(|t| t.key == key) { let token = match user_tokens.iter_mut().find(|t| t.key == key) {
Some(t) => t, Some(t) => t,
None => { None => {
log::error!("Could not find token for key '{}' (missing token)", key); log::error!("Could not find token for key '{key}' (missing token)");
return Ok(None); return Ok(None);
} }
}; };
if token.is_expired() { if token.is_expired() {
log::error!("Could not find token for key '{}' (token expired)", key); log::error!("Could not find token for key '{key}' (token expired)");
return Ok(None); return Ok(None);
} }
@ -169,7 +169,7 @@ impl FromRequest for LoginToken {
let token = match load_token_info(&token).await { let token = match load_token_info(&token).await {
Err(e) => { Err(e) => {
log::error!("Failed to load auth token! {}", e); log::error!("Failed to load auth token! {e}");
return Err(actix_web::error::ErrorPreconditionFailed( return Err(actix_web::error::ErrorPreconditionFailed(
"Failed to check auth token!", "Failed to check auth token!",
)); ));

@ -27,7 +27,7 @@ pub async fn send_mail<D: Display>(to: &str, subject: &str, body: D) -> anyhow::
let mailer = mailer.build(); let mailer = mailer.build();
mailer.send(&email)?; mailer.send(&email)?;
log::debug!("A mail was sent to {} (subject = {})", to, subject); log::debug!("A mail was sent to {to} (subject = {subject})");
Ok(()) Ok(())
} }

@ -168,7 +168,7 @@ pub mod loop_detection {
None => false, None => false,
Some(id) => { Some(id) => {
if curr_stack.contains(id) { if curr_stack.contains(id) {
log::debug!("Loop detected! {:?}", curr_stack); log::debug!("Loop detected! {curr_stack:?}");
return true; return true;
} }

@ -10,7 +10,6 @@ use crate::utils::string_utils::rand_str;
use crate::utils::time_utils::time; use crate::utils::time_utils::time;
use bcrypt::DEFAULT_COST; use bcrypt::DEFAULT_COST;
use diesel::prelude::*; use diesel::prelude::*;
use std::io::ErrorKind;
/// Get the information of a user, by its id /// Get the information of a user, by its id
pub async fn get_by_id(id: UserID) -> anyhow::Result<User> { pub async fn get_by_id(id: UserID) -> anyhow::Result<User> {
@ -25,8 +24,7 @@ pub async fn get_by_mail(mail: &str) -> anyhow::Result<User> {
/// Get the information of a user, by its password reset token /// Get the information of a user, by its password reset token
pub async fn get_by_pwd_reset_token(token: &str) -> anyhow::Result<User> { pub async fn get_by_pwd_reset_token(token: &str) -> anyhow::Result<User> {
if token.is_empty() { if token.is_empty() {
return Err(anyhow::Error::from(std::io::Error::new( return Err(anyhow::Error::from(std::io::Error::other(
ErrorKind::Other,
"Token is empty!", "Token is empty!",
))); )));
} }
@ -46,8 +44,7 @@ pub async fn get_by_pwd_reset_token(token: &str) -> anyhow::Result<User> {
/// Get the information of a user, by its account deletion token /// Get the information of a user, by its account deletion token
pub async fn get_by_account_delete_token(token: &str) -> anyhow::Result<User> { pub async fn get_by_account_delete_token(token: &str) -> anyhow::Result<User> {
if token.is_empty() { if token.is_empty() {
return Err(anyhow::Error::from(std::io::Error::new( return Err(anyhow::Error::from(std::io::Error::other(
ErrorKind::Other,
"Token is empty!", "Token is empty!",
))); )));
} }

@ -5,7 +5,7 @@ pub fn sha256(bytes: &[u8]) -> String {
let mut hasher = Sha256::new(); let mut hasher = Sha256::new();
hasher.update(bytes); hasher.update(bytes);
let h = hasher.finalize(); let h = hasher.finalize();
format!("{:x}", h) format!("{h:x}")
} }
/// Compute hash of a slice of bytes (sha512) /// Compute hash of a slice of bytes (sha512)
@ -13,5 +13,5 @@ pub fn sha512(bytes: &[u8]) -> String {
let mut hasher = Sha512::new(); let mut hasher = Sha512::new();
hasher.update(bytes); hasher.update(bytes);
let h = hasher.finalize(); let h = hasher.finalize();
format!("{:x}", h) format!("{h:x}")
} }