Compare commits

...

2 Commits

Author SHA1 Message Date
Lennart
18882b2175 version 0.9.11 2025-10-07 22:15:24 +02:00
Lennart
580922fd6b improve error output 2025-10-07 22:14:40 +02:00
6 changed files with 45 additions and 15 deletions

22
Cargo.lock generated
View File

@@ -2989,7 +2989,7 @@ dependencies = [
[[package]]
name = "rustical"
version = "0.9.10"
version = "0.9.11"
dependencies = [
"anyhow",
"argon2",
@@ -3032,7 +3032,7 @@ dependencies = [
[[package]]
name = "rustical_caldav"
version = "0.9.10"
version = "0.9.11"
dependencies = [
"async-std",
"async-trait",
@@ -3072,7 +3072,7 @@ dependencies = [
[[package]]
name = "rustical_carddav"
version = "0.9.10"
version = "0.9.11"
dependencies = [
"async-trait",
"axum",
@@ -3104,7 +3104,7 @@ dependencies = [
[[package]]
name = "rustical_dav"
version = "0.9.10"
version = "0.9.11"
dependencies = [
"async-trait",
"axum",
@@ -3129,7 +3129,7 @@ dependencies = [
[[package]]
name = "rustical_dav_push"
version = "0.9.10"
version = "0.9.11"
dependencies = [
"async-trait",
"axum",
@@ -3154,7 +3154,7 @@ dependencies = [
[[package]]
name = "rustical_frontend"
version = "0.9.10"
version = "0.9.11"
dependencies = [
"askama",
"askama_web",
@@ -3187,7 +3187,7 @@ dependencies = [
[[package]]
name = "rustical_ical"
version = "0.9.10"
version = "0.9.11"
dependencies = [
"axum",
"chrono",
@@ -3205,7 +3205,7 @@ dependencies = [
[[package]]
name = "rustical_oidc"
version = "0.9.10"
version = "0.9.11"
dependencies = [
"async-trait",
"axum",
@@ -3221,7 +3221,7 @@ dependencies = [
[[package]]
name = "rustical_store"
version = "0.9.10"
version = "0.9.11"
dependencies = [
"anyhow",
"async-trait",
@@ -3255,7 +3255,7 @@ dependencies = [
[[package]]
name = "rustical_store_sqlite"
version = "0.9.10"
version = "0.9.11"
dependencies = [
"async-trait",
"chrono",
@@ -3276,7 +3276,7 @@ dependencies = [
[[package]]
name = "rustical_xml"
version = "0.9.10"
version = "0.9.11"
dependencies = [
"quick-xml",
"thiserror 2.0.16",

View File

@@ -2,7 +2,7 @@
members = ["crates/*"]
[workspace.package]
version = "0.9.10"
version = "0.9.11"
edition = "2024"
description = "A CalDAV server"
documentation = "https://lennart-k.github.io/rustical/"

View File

@@ -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<C: CalendarStore>(
@@ -85,7 +85,14 @@ pub async fn put_event<C: CalendarStore>(
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?;

View File

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

View File

@@ -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) {

View File

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