mirror of
https://github.com/lennart-k/rustical.git
synced 2026-01-30 14:08:23 +00:00
PUT object: Return ETag
This commit is contained in:
@@ -6,7 +6,7 @@ use axum::extract::{Path, State};
|
||||
use axum::response::{IntoResponse, Response};
|
||||
use axum_extra::TypedHeader;
|
||||
use headers::{ContentType, ETag, HeaderMapExt, IfNoneMatch};
|
||||
use http::{HeaderMap, Method, StatusCode};
|
||||
use http::{HeaderMap, HeaderValue, Method, StatusCode};
|
||||
use rustical_ical::CalendarObject;
|
||||
use rustical_store::CalendarStore;
|
||||
use rustical_store::auth::Principal;
|
||||
@@ -82,9 +82,15 @@ pub async fn put_event<C: CalendarStore>(
|
||||
debug!("invalid calendar data:\n{body}");
|
||||
return Err(Error::PreconditionFailed(Precondition::ValidCalendarData));
|
||||
};
|
||||
let etag = object.get_etag();
|
||||
cal_store
|
||||
.put_object(principal, calendar_id, object, overwrite)
|
||||
.await?;
|
||||
|
||||
Ok(StatusCode::CREATED.into_response())
|
||||
let mut headers = HeaderMap::new();
|
||||
headers.insert(
|
||||
"ETag",
|
||||
HeaderValue::from_str(&etag).expect("Contains no invalid characters"),
|
||||
);
|
||||
Ok((StatusCode::CREATED, headers).into_response())
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ use axum::extract::{Path, State};
|
||||
use axum::response::{IntoResponse, Response};
|
||||
use axum_extra::TypedHeader;
|
||||
use axum_extra::headers::{ContentType, ETag, HeaderMapExt, IfNoneMatch};
|
||||
use http::HeaderValue;
|
||||
use http::Method;
|
||||
use http::{HeaderMap, StatusCode};
|
||||
use rustical_dav::privileges::UserPrivilege;
|
||||
@@ -87,9 +88,15 @@ pub async fn put_object<AS: AddressbookStore>(
|
||||
};
|
||||
|
||||
let object = AddressObject::from_vcf(object_id, body)?;
|
||||
let etag = object.get_etag();
|
||||
addr_store
|
||||
.put_object(principal, addressbook_id, object, overwrite)
|
||||
.await?;
|
||||
|
||||
Ok(StatusCode::CREATED.into_response())
|
||||
let mut headers = HeaderMap::new();
|
||||
headers.insert(
|
||||
"ETag",
|
||||
HeaderValue::from_str(&etag).expect("Contains no invalid characters"),
|
||||
);
|
||||
Ok((StatusCode::CREATED, headers).into_response())
|
||||
}
|
||||
|
||||
@@ -52,12 +52,12 @@ pub async fn route_delete<R: ResourceService>(
|
||||
return Err(Error::Unauthorized.into());
|
||||
}
|
||||
|
||||
if let Some(if_match) = if_match {
|
||||
if !resource.satisfies_if_match(&if_match) {
|
||||
if let Some(if_match) = if_match
|
||||
&& !resource.satisfies_if_match(&if_match)
|
||||
{
|
||||
// Precondition failed
|
||||
return Err(crate::Error::PreconditionFailed.into());
|
||||
}
|
||||
}
|
||||
if let Some(if_none_match) = if_none_match
|
||||
&& resource.satisfies_if_none_match(&if_none_match)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user