From 580922fd6b998b9d8391278a3d9ab696a87c2afa Mon Sep 17 00:00:00 2001 From: Lennart <18233294+lennart-k@users.noreply.github.com> Date: Tue, 7 Oct 2025 22:14:40 +0200 Subject: [PATCH] improve error output --- crates/caldav/src/calendar_object/methods.rs | 11 +++++++++-- crates/caldav/src/error.rs | 8 ++++++++ crates/dav/src/error.rs | 8 +++++++- crates/store/src/error.rs | 9 +++++++++ 4 files changed, 33 insertions(+), 3 deletions(-) diff --git a/crates/caldav/src/calendar_object/methods.rs b/crates/caldav/src/calendar_object/methods.rs index c0f6273..2496ee0 100644 --- a/crates/caldav/src/calendar_object/methods.rs +++ b/crates/caldav/src/calendar_object/methods.rs @@ -11,7 +11,7 @@ use rustical_ical::CalendarObject; use rustical_store::CalendarStore; use rustical_store::auth::Principal; use std::str::FromStr; -use tracing::{debug, instrument}; +use tracing::{debug, error, instrument}; #[instrument(skip(cal_store))] pub async fn get_event( @@ -85,7 +85,14 @@ pub async fn put_event( return Err(Error::PreconditionFailed(Precondition::ValidCalendarData)); } }; - assert_eq!(object.get_id(), object_id); + if object.get_id() != object_id { + error!( + "Calendar object UID and file name not matching: UID={}, filename={}", + object.get_id(), + object_id + ); + return Err(Error::PreconditionFailed(Precondition::MatchingUid)); + } cal_store .put_object(principal, calendar_id, object, overwrite) .await?; diff --git a/crates/caldav/src/error.rs b/crates/caldav/src/error.rs index 750f91a..7273007 100644 --- a/crates/caldav/src/error.rs +++ b/crates/caldav/src/error.rs @@ -12,6 +12,8 @@ pub enum Precondition { #[error("valid-calendar-data")] #[xml(ns = "rustical_dav::namespace::NS_CALDAV")] ValidCalendarData, + #[error("matching-uid")] + MatchingUid, } impl IntoResponse for Precondition { @@ -83,6 +85,12 @@ impl Error { impl IntoResponse for Error { fn into_response(self) -> axum::response::Response { + if matches!( + self.status_code(), + StatusCode::INTERNAL_SERVER_ERROR | StatusCode::PRECONDITION_FAILED + ) { + error!("{self}"); + } (self.status_code(), self.to_string()).into_response() } } diff --git a/crates/dav/src/error.rs b/crates/dav/src/error.rs index 5d1dac6..207ffb1 100644 --- a/crates/dav/src/error.rs +++ b/crates/dav/src/error.rs @@ -1,3 +1,4 @@ +use axum::body::Body; use http::StatusCode; use rustical_xml::XmlError; use thiserror::Error; @@ -59,7 +60,12 @@ impl Error { impl axum::response::IntoResponse for Error { fn into_response(self) -> axum::response::Response { - use axum::body::Body; + if matches!( + self.status_code(), + StatusCode::INTERNAL_SERVER_ERROR | StatusCode::PRECONDITION_FAILED + ) { + error!("{self}"); + } let mut resp = axum::response::Response::builder().status(self.status_code()); if matches!(&self, &Error::Unauthorized) { diff --git a/crates/store/src/error.rs b/crates/store/src/error.rs index 2255164..f6218d2 100644 --- a/crates/store/src/error.rs +++ b/crates/store/src/error.rs @@ -1,5 +1,6 @@ use axum::response::IntoResponse; use http::StatusCode; +use tracing::error; #[derive(Debug, thiserror::Error)] pub enum Error { @@ -43,6 +44,14 @@ impl Error { impl IntoResponse for Error { fn into_response(self) -> axum::response::Response { + if matches!( + self.status_code(), + StatusCode::INTERNAL_SERVER_ERROR + | StatusCode::PRECONDITION_FAILED + | StatusCode::CONFLICT + ) { + error!("{self}"); + } (self.status_code(), self.to_string()).into_response() } }