mirror of
https://github.com/lennart-k/rustical.git
synced 2025-12-13 21:42:34 +00:00
improve error output
This commit is contained in:
@@ -11,7 +11,7 @@ use rustical_ical::CalendarObject;
|
|||||||
use rustical_store::CalendarStore;
|
use rustical_store::CalendarStore;
|
||||||
use rustical_store::auth::Principal;
|
use rustical_store::auth::Principal;
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
use tracing::{debug, instrument};
|
use tracing::{debug, error, instrument};
|
||||||
|
|
||||||
#[instrument(skip(cal_store))]
|
#[instrument(skip(cal_store))]
|
||||||
pub async fn get_event<C: CalendarStore>(
|
pub async fn get_event<C: CalendarStore>(
|
||||||
@@ -85,7 +85,14 @@ pub async fn put_event<C: CalendarStore>(
|
|||||||
return Err(Error::PreconditionFailed(Precondition::ValidCalendarData));
|
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
|
cal_store
|
||||||
.put_object(principal, calendar_id, object, overwrite)
|
.put_object(principal, calendar_id, object, overwrite)
|
||||||
.await?;
|
.await?;
|
||||||
|
|||||||
@@ -12,6 +12,8 @@ pub enum Precondition {
|
|||||||
#[error("valid-calendar-data")]
|
#[error("valid-calendar-data")]
|
||||||
#[xml(ns = "rustical_dav::namespace::NS_CALDAV")]
|
#[xml(ns = "rustical_dav::namespace::NS_CALDAV")]
|
||||||
ValidCalendarData,
|
ValidCalendarData,
|
||||||
|
#[error("matching-uid")]
|
||||||
|
MatchingUid,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl IntoResponse for Precondition {
|
impl IntoResponse for Precondition {
|
||||||
@@ -83,6 +85,12 @@ impl Error {
|
|||||||
|
|
||||||
impl IntoResponse for Error {
|
impl IntoResponse for Error {
|
||||||
fn into_response(self) -> axum::response::Response {
|
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()
|
(self.status_code(), self.to_string()).into_response()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
use axum::body::Body;
|
||||||
use http::StatusCode;
|
use http::StatusCode;
|
||||||
use rustical_xml::XmlError;
|
use rustical_xml::XmlError;
|
||||||
use thiserror::Error;
|
use thiserror::Error;
|
||||||
@@ -59,7 +60,12 @@ impl Error {
|
|||||||
|
|
||||||
impl axum::response::IntoResponse for Error {
|
impl axum::response::IntoResponse for Error {
|
||||||
fn into_response(self) -> axum::response::Response {
|
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());
|
let mut resp = axum::response::Response::builder().status(self.status_code());
|
||||||
if matches!(&self, &Error::Unauthorized) {
|
if matches!(&self, &Error::Unauthorized) {
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
use axum::response::IntoResponse;
|
use axum::response::IntoResponse;
|
||||||
use http::StatusCode;
|
use http::StatusCode;
|
||||||
|
use tracing::error;
|
||||||
|
|
||||||
#[derive(Debug, thiserror::Error)]
|
#[derive(Debug, thiserror::Error)]
|
||||||
pub enum Error {
|
pub enum Error {
|
||||||
@@ -43,6 +44,14 @@ impl Error {
|
|||||||
|
|
||||||
impl IntoResponse for Error {
|
impl IntoResponse for Error {
|
||||||
fn into_response(self) -> axum::response::Response {
|
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()
|
(self.status_code(), self.to_string()).into_response()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user