From 2aa0e173c870ed37b964af2cd3fa27973556007c Mon Sep 17 00:00:00 2001 From: Lennart <18233294+lennart-k@users.noreply.github.com> Date: Fri, 4 Oct 2024 18:15:35 +0200 Subject: [PATCH] Got rid of this ServicePrefix thing --- .../calendar/methods/report/calendar_multiget.rs | 15 ++++++--------- crates/caldav/src/calendar/methods/report/mod.rs | 6 +----- crates/caldav/src/lib.rs | 3 +-- crates/dav/src/methods/propfind.rs | 5 ----- 4 files changed, 8 insertions(+), 21 deletions(-) diff --git a/crates/caldav/src/calendar/methods/report/calendar_multiget.rs b/crates/caldav/src/calendar/methods/report/calendar_multiget.rs index 3bc727f..876d748 100644 --- a/crates/caldav/src/calendar/methods/report/calendar_multiget.rs +++ b/crates/caldav/src/calendar/methods/report/calendar_multiget.rs @@ -1,5 +1,6 @@ use crate::{ calendar_object::resource::{CalendarObjectProp, CalendarObjectResource}, + principal::PrincipalResource, Error, }; use actix_web::{ @@ -27,14 +28,13 @@ pub struct CalendarMultigetRequest { pub async fn get_objects_calendar_multiget( cal_query: &CalendarMultigetRequest, - prefix: &str, + principal_url: &str, principal: &str, cid: &str, store: &RwLock, ) -> Result, Error> { // TODO: add proper error results for single events - let resource_def = - ResourceDef::prefix(prefix).join(&ResourceDef::new("/user/{principal}/{cid}/{uid}")); + let resource_def = ResourceDef::prefix(principal_url).join(&ResourceDef::new("/{cid}/{uid}")); let mut result = vec![]; @@ -45,10 +45,6 @@ pub async fn get_objects_calendar_multiget( // TODO: Handle error continue; }; - if path.get("principal").unwrap() != principal { - // TODO: Handle error - continue; - } if path.get("cid").unwrap() != cid { // TODO: Handle error continue; @@ -63,13 +59,14 @@ pub async fn get_objects_calendar_multiget( pub async fn handle_calendar_multiget( cal_multiget: CalendarMultigetRequest, req: HttpRequest, - prefix: &str, principal: &str, cid: &str, cal_store: &RwLock, ) -> Result, String>, Error> { + let principal_url = PrincipalResource::get_url(req.resource_map(), vec![principal]).unwrap(); let objects = - get_objects_calendar_multiget(&cal_multiget, prefix, principal, cid, cal_store).await?; + get_objects_calendar_multiget(&cal_multiget, &principal_url, principal, cid, cal_store) + .await?; let props = match cal_multiget.prop { PropfindType::Allprop => { diff --git a/crates/caldav/src/calendar/methods/report/mod.rs b/crates/caldav/src/calendar/methods/report/mod.rs index 53fb0f4..3d846f1 100644 --- a/crates/caldav/src/calendar/methods/report/mod.rs +++ b/crates/caldav/src/calendar/methods/report/mod.rs @@ -5,7 +5,6 @@ use actix_web::{ }; use calendar_multiget::{handle_calendar_multiget, CalendarMultigetRequest}; use calendar_query::{handle_calendar_query, CalendarQueryRequest}; -use rustical_dav::methods::propfind::ServicePrefix; use rustical_store::{auth::User, CalendarStore}; use serde::{Deserialize, Serialize}; use sync_collection::{handle_sync_collection, SyncCollectionRequest}; @@ -37,9 +36,7 @@ pub async fn route_report_calendar( user: User, req: HttpRequest, cal_store: Data>, - prefix: Data, ) -> Result { - let prefix = prefix.into_inner(); let (principal, cid) = path.into_inner(); if principal != user.id { return Err(Error::Unauthorized); @@ -54,8 +51,7 @@ pub async fn route_report_calendar( handle_calendar_query(cal_query, req, &principal, &cid, &cal_store).await? } ReportRequest::CalendarMultiget(cal_multiget) => { - handle_calendar_multiget(cal_multiget, req, &prefix, &principal, &cid, &cal_store) - .await? + handle_calendar_multiget(cal_multiget, req, &principal, &cid, &cal_store).await? } ReportRequest::SyncCollection(sync_collection) => { handle_sync_collection(sync_collection, req, &principal, &cid, &cal_store).await? diff --git a/crates/caldav/src/lib.rs b/crates/caldav/src/lib.rs index a8574cd..d0c27ca 100644 --- a/crates/caldav/src/lib.rs +++ b/crates/caldav/src/lib.rs @@ -5,7 +5,7 @@ use calendar::resource::CalendarResourceService; use calendar_object::resource::CalendarObjectResourceService; use principal::PrincipalResourceService; use root::RootResourceService; -use rustical_dav::methods::{propfind::ServicePrefix, route_delete}; +use rustical_dav::methods::route_delete; use rustical_dav::resource::ResourceService; use rustical_store::auth::{AuthenticationMiddleware, AuthenticationProvider}; use rustical_store::CalendarStore; @@ -44,7 +44,6 @@ pub fn configure_dav( .app_data(Data::new(CalDavContext { store: store.clone(), })) - .app_data(Data::new(ServicePrefix(prefix))) .app_data(Data::from(store.clone())) .service( web::resource("{path:.*}") diff --git a/crates/dav/src/methods/propfind.rs b/crates/dav/src/methods/propfind.rs index 1e516a0..502dc33 100644 --- a/crates/dav/src/methods/propfind.rs +++ b/crates/dav/src/methods/propfind.rs @@ -7,16 +7,11 @@ use crate::xml::TagList; use crate::Error; use actix_web::web::Path; use actix_web::HttpRequest; -use derive_more::derive::Deref; use rustical_store::auth::User; use serde::Deserialize; use tracing::instrument; use tracing_actix_web::RootSpan; -// This is not the final place for this struct -#[derive(Deref)] -pub struct ServicePrefix(pub String); - #[derive(Deserialize, Clone, Debug)] #[serde(rename_all = "kebab-case")] pub struct PropElement {