8 Commits

Author SHA1 Message Date
79835c1c20 Update dependency react-router-dom to ^7.6.3
Some checks failed
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is failing
2025-07-07 00:14:19 +00:00
8d4449a116 Merge pull request 'Update dependency globals to ^16.3.0' (#488) from renovate/globals-16.x into master
All checks were successful
continuous-integration/drone/push Build is passing
2025-07-07 00:14:07 +00:00
3e29908ee9 Update dependency globals to ^16.3.0
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2025-07-06 00:14:26 +00:00
999d0052ca Merge pull request 'Update dependency @mui/x-data-grid to ^7.29.8' (#510) from renovate/mui-x-data-grid-7.x into master
All checks were successful
continuous-integration/drone/push Build is passing
2025-07-05 00:26:18 +00:00
90ad80b84a Update dependency @mui/x-data-grid to ^7.29.8
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2025-07-05 00:08:09 +00:00
9e14fcf4ba Update dependency @emotion/styled to ^11.14.1
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2025-07-04 00:07:40 +00:00
776d24031b Fix cargo clippy issues
All checks were successful
continuous-integration/drone/push Build is passing
2025-07-03 08:28:00 +02:00
991a3340e5 Update materialui to ^7.1.2
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2025-06-26 00:07:51 +00:00
18 changed files with 58 additions and 75 deletions

View File

@ -9,7 +9,7 @@
"version": "0.1.0",
"dependencies": {
"@emotion/react": "^11.14.0",
"@emotion/styled": "^11.14.0",
"@emotion/styled": "^11.14.1",
"@fontsource/roboto": "^5.2.6",
"@fullcalendar/core": "^6.1.17",
"@fullcalendar/daygrid": "^6.1.17",
@ -18,10 +18,10 @@
"@fullcalendar/react": "^6.1.17",
"@mdi/js": "^7.4.47",
"@mdi/react": "^1.6.1",
"@mui/icons-material": "^7.0.2",
"@mui/icons-material": "^7.1.2",
"@mui/lab": "^7.0.0-beta.14",
"@mui/material": "^7.0.2",
"@mui/x-data-grid": "^7.29.6",
"@mui/material": "^7.1.2",
"@mui/x-data-grid": "^7.29.8",
"@mui/x-date-pickers": "^7.29.4",
"@mui/x-tree-view": "^7.29.1",
"date-and-time": "^3.6.0",
@ -34,7 +34,7 @@
"react-dom": "^19.0.0",
"react-easy-crop": "^5.4.2",
"react-qr-code": "^2.0.16",
"react-router-dom": "^7.4.0",
"react-router-dom": "^7.6.3",
"react-zoom-pan-pinch": "^3.7.0",
"svg2pdf.js": "^2.5.0"
},
@ -46,7 +46,7 @@
"eslint": "^9.29.0",
"eslint-plugin-react-hooks": "^5.2.0",
"eslint-plugin-react-refresh": "^0.4.20",
"globals": "^16.2.0",
"globals": "^16.3.0",
"typescript": "^5.8.3",
"typescript-eslint": "^8.24.1",
"vite": "^6.3.5"
@ -459,9 +459,9 @@
"license": "MIT"
},
"node_modules/@emotion/styled": {
"version": "11.14.0",
"resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.14.0.tgz",
"integrity": "sha512-XxfOnXFffatap2IyCeJyNov3kiDQWoR08gPUQxvbL7fxKryGBKUZUkG6Hz48DZwVrJSVh9sJboyV1Ds4OW6SgA==",
"version": "11.14.1",
"resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.14.1.tgz",
"integrity": "sha512-qEEJt42DuToa3gurlH4Qqc1kVpNq8wO8cJtDzU46TjlzWjDlsVyevtYCRijVq3SrHsROS+gVQ8Fnea108GnKzw==",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.18.3",
@ -1283,12 +1283,12 @@
}
},
"node_modules/@mui/icons-material": {
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-7.0.2.tgz",
"integrity": "sha512-Bo57PFLOqXOqPNrXjd8AhzH5s6TCsNUQbvnQ0VKZ8D+lIlteqKnrk/O1luMJUc/BXONK7BfIdTdc7qOnXYbMdw==",
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-7.1.2.tgz",
"integrity": "sha512-slqJByDub7Y1UcokrM17BoMBMvn8n7daXFXVoTv0MEH5k3sHjmsH8ql/Mt3s9vQ20cORDr83UZ448TEGcbrXtw==",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.27.0"
"@babel/runtime": "^7.27.1"
},
"engines": {
"node": ">=14.0.0"
@ -1298,7 +1298,7 @@
"url": "https://opencollective.com/mui-org"
},
"peerDependencies": {
"@mui/material": "^7.0.2",
"@mui/material": "^7.1.2",
"@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
"react": "^17.0.0 || ^18.0.0 || ^19.0.0"
},
@ -1550,9 +1550,9 @@
}
},
"node_modules/@mui/x-data-grid": {
"version": "7.29.6",
"resolved": "https://registry.npmjs.org/@mui/x-data-grid/-/x-data-grid-7.29.6.tgz",
"integrity": "sha512-2x3+jaqqiia3FjTcsN2PjlnVKHiVFqrDvcJ6p/PFAjI75uSG6rhOhx4bwrJxm3+TWFnZD5Ir8Ln9MYLiPjIEUQ==",
"version": "7.29.8",
"resolved": "https://registry.npmjs.org/@mui/x-data-grid/-/x-data-grid-7.29.8.tgz",
"integrity": "sha512-m4Dp1Vig8gFiBlcEOWimUku182cEw5YrAyXS3PfTSdbxa/20bFw7a8mlHdxO9ChHQRMf6TqbisdRm23CDIIdog==",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.25.7",
@ -2091,12 +2091,6 @@
"@babel/types": "^7.20.7"
}
},
"node_modules/@types/cookie": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz",
"integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==",
"license": "MIT"
},
"node_modules/@types/estree": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz",
@ -3320,9 +3314,9 @@
}
},
"node_modules/globals": {
"version": "16.2.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-16.2.0.tgz",
"integrity": "sha512-O+7l9tPdHCU320IigZZPj5zmRCFG9xHmx9cU8FqU2Rp+JN714seHV+2S9+JslCpY4gJwU2vOGox0wzgae/MCEg==",
"version": "16.3.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-16.3.0.tgz",
"integrity": "sha512-bqWEnJ1Nt3neqx2q5SFfGS8r/ahumIakg3HcwtNlrVlwXIeNumWn/c7Pn/wKzGhf6SaW6H6uWXLqC30STCMchQ==",
"dev": true,
"license": "MIT",
"engines": {
@ -4083,15 +4077,13 @@
}
},
"node_modules/react-router": {
"version": "7.4.0",
"resolved": "https://registry.npmjs.org/react-router/-/react-router-7.4.0.tgz",
"integrity": "sha512-Y2g5ObjkvX3VFeVt+0CIPuYd9PpgqCslG7ASSIdN73LwA1nNWzcMLaoMRJfP3prZFI92svxFwbn7XkLJ+UPQ6A==",
"version": "7.6.3",
"resolved": "https://registry.npmjs.org/react-router/-/react-router-7.6.3.tgz",
"integrity": "sha512-zf45LZp5skDC6I3jDLXQUu0u26jtuP4lEGbc7BbdyxenBN1vJSTA18czM2D+h5qyMBuMrD+9uB+mU37HIoKGRA==",
"license": "MIT",
"dependencies": {
"@types/cookie": "^0.6.0",
"cookie": "^1.0.1",
"set-cookie-parser": "^2.6.0",
"turbo-stream": "2.4.0"
"set-cookie-parser": "^2.6.0"
},
"engines": {
"node": ">=20.0.0"
@ -4107,12 +4099,12 @@
}
},
"node_modules/react-router-dom": {
"version": "7.4.0",
"resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.4.0.tgz",
"integrity": "sha512-VlksBPf3n2bijPvnA7nkTsXxMAKOj+bWp4R9c3i+bnwlSOFAGOkJkKhzy/OsRkWaBMICqcAl1JDzh9ZSOze9CA==",
"version": "7.6.3",
"resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.6.3.tgz",
"integrity": "sha512-DiWJm9qdUAmiJrVWaeJdu4TKu13+iB/8IEi0EW/XgaHCjW/vWGrwzup0GVvaMteuZjKnh5bEvJP/K0MDnzawHw==",
"license": "MIT",
"dependencies": {
"react-router": "7.4.0"
"react-router": "7.6.3"
},
"engines": {
"node": ">=20.0.0"
@ -4517,12 +4509,6 @@
"integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
"license": "0BSD"
},
"node_modules/turbo-stream": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/turbo-stream/-/turbo-stream-2.4.0.tgz",
"integrity": "sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g==",
"license": "ISC"
},
"node_modules/type-check": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",

View File

@ -11,7 +11,7 @@
},
"dependencies": {
"@emotion/react": "^11.14.0",
"@emotion/styled": "^11.14.0",
"@emotion/styled": "^11.14.1",
"@fontsource/roboto": "^5.2.6",
"@fullcalendar/core": "^6.1.17",
"@fullcalendar/daygrid": "^6.1.17",
@ -20,10 +20,10 @@
"@fullcalendar/react": "^6.1.17",
"@mdi/js": "^7.4.47",
"@mdi/react": "^1.6.1",
"@mui/icons-material": "^7.0.2",
"@mui/icons-material": "^7.1.2",
"@mui/lab": "^7.0.0-beta.14",
"@mui/material": "^7.0.2",
"@mui/x-data-grid": "^7.29.6",
"@mui/material": "^7.1.2",
"@mui/x-data-grid": "^7.29.8",
"@mui/x-date-pickers": "^7.29.4",
"@mui/x-tree-view": "^7.29.1",
"date-and-time": "^3.6.0",
@ -36,7 +36,7 @@
"react-dom": "^19.0.0",
"react-easy-crop": "^5.4.2",
"react-qr-code": "^2.0.16",
"react-router-dom": "^7.4.0",
"react-router-dom": "^7.6.3",
"react-zoom-pan-pinch": "^3.7.0",
"svg2pdf.js": "^2.5.0"
},
@ -48,7 +48,7 @@
"eslint": "^9.29.0",
"eslint-plugin-react-hooks": "^5.2.0",
"eslint-plugin-react-refresh": "^0.4.20",
"globals": "^16.2.0",
"globals": "^16.3.0",
"typescript": "^5.8.3",
"typescript-eslint": "^8.24.1",
"vite": "^6.3.5"

View File

@ -21,7 +21,7 @@ where
if POSTGRES_CONNECTION.with(|i| i.borrow().is_none()) {
let database_url = AppConfig::get().db_connection_chain();
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))
}
@ -38,7 +38,7 @@ where
POSTGRES_CONNECTION.with(|i| *i.borrow_mut() = None)
}
log::error!("Database query error! {:?}", e);
log::error!("Database query error! {e:?}");
Err(e.into())
}
}

View File

@ -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!")
}
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());
}
}

View File

@ -79,10 +79,7 @@ pub async fn request_reset_password(
match users_service::get_by_mail(&req.mail).await {
Ok(mut user) => users_service::request_reset_password(&mut user).await?,
Err(e) => {
log::error!(
"Could not locate user account {}! (error silently ignored)",
e
);
log::error!("Could not locate user account {e}! (error silently ignored)");
}
}
@ -122,7 +119,7 @@ pub async fn check_reset_password_token(
RatedAction::CheckResetPasswordTokenFailed,
)
.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());
}
};
@ -156,7 +153,7 @@ pub async fn reset_password(remote_ip: RemoteIP, req: web::Json<ResetPasswordBod
RatedAction::CheckResetPasswordTokenFailed,
)
.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());
}
};
@ -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 {
Ok(u) => u,
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)
.await?;
return Ok(HttpResponse::Unauthorized().json("Invalid credentials"));

View File

@ -183,9 +183,9 @@ pub async fn import_family(
}
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(
HttpResponse::BadRequest().json(format!("Failed to validate member {:?}!", req_id))
HttpResponse::BadRequest().json(format!("Failed to validate member {req_id:?}!"))
);
}

View File

@ -31,7 +31,7 @@ impl Display for HttpErr {
impl actix_web::error::ResponseError for HttpErr {
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!")
}
}

View File

@ -75,7 +75,7 @@ impl FromRequest for FamilyAndAccommodationInPath {
Self::load_accommodation_from_path(family, accommodation_id)
.await
.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!")
})
})

View File

@ -85,7 +85,7 @@ impl FromRequest for FamilyAndAccommodationReservationCalendarInPath {
Self::load_calendar_from_path(family, accommodation_id)
.await
.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!")
})
})

View File

@ -95,7 +95,7 @@ impl FromRequest for FamilyAndAccommodationReservationInPath {
Self::load_accommodation_reservation_from_path(family, reservation_id)
.await
.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!")
})
})

View File

@ -71,7 +71,7 @@ impl FromRequest for FamilyAndCoupleInPath {
FamilyAndCoupleInPath::load_couple_from_path(family, couple_id)
.await
.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!")
})
})

View File

@ -62,7 +62,7 @@ impl FromRequest for FamilyInPath {
FamilyInPath::load_family_from_path(&token, family_id)
.await
.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!")
})
})

View File

@ -71,7 +71,7 @@ impl FromRequest for FamilyAndMemberInPath {
FamilyAndMemberInPath::load_member_from_path(family, member_id)
.await
.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!")
})
})

View File

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

View File

@ -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) {
Some(t) => t,
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);
}
};
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);
}
@ -169,7 +169,7 @@ impl FromRequest for LoginToken {
let token = match load_token_info(&token).await {
Err(e) => {
log::error!("Failed to load auth token! {}", e);
log::error!("Failed to load auth token! {e}");
return Err(actix_web::error::ErrorPreconditionFailed(
"Failed to check auth token!",
));

View File

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

View File

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

View File

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