From 5d8b67472af2d0bc37873c0e7e3b5c1a75c7dd90 Mon Sep 17 00:00:00 2001 From: Lennart <18233294+lennart-k@users.noreply.github.com> Date: Tue, 28 May 2024 12:50:56 +0200 Subject: [PATCH] caldav: Refactor DELETE --- crates/caldav/src/calendar/methods/delete.rs | 22 ++++++++++++++++++++ crates/caldav/src/calendar/methods/mod.rs | 14 +------------ crates/caldav/src/lib.rs | 5 ++++- 3 files changed, 27 insertions(+), 14 deletions(-) create mode 100644 crates/caldav/src/calendar/methods/delete.rs diff --git a/crates/caldav/src/calendar/methods/delete.rs b/crates/caldav/src/calendar/methods/delete.rs new file mode 100644 index 0000000..8c2d678 --- /dev/null +++ b/crates/caldav/src/calendar/methods/delete.rs @@ -0,0 +1,22 @@ +use crate::CalDavContext; +use crate::Error; +use actix_web::{ + web::{Data, Path}, + HttpResponse, +}; +use rustical_auth::{AuthInfoExtractor, CheckAuthentication}; +use rustical_store::calendar::CalendarStore; + +pub async fn route_delete_calendar( + context: Data>, + path: Path<(String, String)>, + auth: AuthInfoExtractor, +) -> Result { + let (principal, cid) = path.into_inner(); + if principal != auth.inner.user_id { + return Err(Error::Unauthorized); + } + context.store.write().await.delete_calendar(&cid).await?; + + Ok(HttpResponse::Ok().body("")) +} diff --git a/crates/caldav/src/calendar/methods/mod.rs b/crates/caldav/src/calendar/methods/mod.rs index 9f6b2f7..a6e2adf 100644 --- a/crates/caldav/src/calendar/methods/mod.rs +++ b/crates/caldav/src/calendar/methods/mod.rs @@ -14,6 +14,7 @@ use rustical_dav::xml_snippets::generate_multistatus; use rustical_store::calendar::CalendarStore; use rustical_store::event::Event; +pub mod delete; pub mod mkcalendar; async fn handle_report_calendar_query( @@ -88,16 +89,3 @@ pub async fn route_report_calendar( - context: Data>, - path: Path<(String, String)>, - auth: AuthInfoExtractor, -) -> Result { - let _user = auth.inner.user_id; - // TODO: verify whether user is authorized - let (_principal, cid) = path.into_inner(); - context.store.write().await.delete_calendar(&cid).await?; - - Ok(HttpResponse::Ok().body("")) -} diff --git a/crates/caldav/src/lib.rs b/crates/caldav/src/lib.rs index 30a7c14..2d619e7 100644 --- a/crates/caldav/src/lib.rs +++ b/crates/caldav/src/lib.rs @@ -60,7 +60,10 @@ pub fn configure_dav( .route( mkcalendar_method().to(calendar::methods::mkcalendar::route_mkcol_calendar::), ) - .route(web::method(Method::DELETE).to(calendar::methods::delete_calendar::)), + .route( + web::method(Method::DELETE) + .to(calendar::methods::delete::route_delete_calendar::), + ), ) .service( web::resource("/{principal}/{calendar}/{event}")