diff --git a/crates/caldav/src/calendar/resource.rs b/crates/caldav/src/calendar/resource.rs index 1959427..5e2a707 100644 --- a/crates/caldav/src/calendar/resource.rs +++ b/crates/caldav/src/calendar/resource.rs @@ -15,6 +15,7 @@ use async_trait::async_trait; use derive_more::derive::{From, Into}; use rustical_dav::resource::{InvalidProperty, Resource, ResourceService}; use rustical_dav::xml::HrefElement; +use rustical_store::auth::User; use rustical_store::{Calendar, CalendarStore}; use serde::{Deserialize, Serialize}; use std::str::FromStr; @@ -256,8 +257,8 @@ impl ResourceService for CalendarResourceService { type Resource = CalendarResource; type Error = Error; - async fn get_resource(&self, principal: String) -> Result { - if self.principal != principal { + async fn get_resource(&self, user: User) -> Result { + if self.principal != user.id { return Err(Error::Unauthorized); } let calendar = self diff --git a/crates/caldav/src/calendar_object/resource.rs b/crates/caldav/src/calendar_object/resource.rs index 1a05c7e..9985860 100644 --- a/crates/caldav/src/calendar_object/resource.rs +++ b/crates/caldav/src/calendar_object/resource.rs @@ -4,7 +4,7 @@ use actix_web::{dev::ResourceMap, web::Data, HttpRequest}; use async_trait::async_trait; use derive_more::derive::{From, Into}; use rustical_dav::resource::{InvalidProperty, Resource, ResourceService}; -use rustical_store::{CalendarObject, CalendarStore}; +use rustical_store::{auth::User, CalendarObject, CalendarStore}; use serde::{Deserialize, Serialize}; use std::sync::Arc; use strum::{EnumString, VariantNames}; @@ -132,8 +132,8 @@ impl ResourceService for CalendarObjectResourceServic }) } - async fn get_resource(&self, principal: String) -> Result { - if self.principal != principal { + async fn get_resource(&self, user: User) -> Result { + if self.principal != user.id { return Err(Error::Unauthorized); } let event = self diff --git a/crates/caldav/src/principal/mod.rs b/crates/caldav/src/principal/mod.rs index 80c5737..5efeee4 100644 --- a/crates/caldav/src/principal/mod.rs +++ b/crates/caldav/src/principal/mod.rs @@ -6,6 +6,7 @@ use actix_web::HttpRequest; use async_trait::async_trait; use rustical_dav::resource::{InvalidProperty, Resource, ResourceService}; use rustical_dav::xml::HrefElement; +use rustical_store::auth::User; use rustical_store::CalendarStore; use serde::{Deserialize, Serialize}; use std::sync::Arc; @@ -122,8 +123,8 @@ impl ResourceService for PrincipalResourceService }) } - async fn get_resource(&self, principal: String) -> Result { - if self.principal != principal { + async fn get_resource(&self, user: User) -> Result { + if self.principal != user.id { return Err(Error::Unauthorized); } Ok(PrincipalResource { diff --git a/crates/caldav/src/root/mod.rs b/crates/caldav/src/root/mod.rs index c52b148..e14f43a 100644 --- a/crates/caldav/src/root/mod.rs +++ b/crates/caldav/src/root/mod.rs @@ -5,6 +5,7 @@ use actix_web::HttpRequest; use async_trait::async_trait; use rustical_dav::resource::{InvalidProperty, Resource, ResourceService}; use rustical_dav::xml::HrefElement; +use rustical_store::auth::User; use serde::{Deserialize, Serialize}; use strum::{EnumString, VariantNames}; @@ -85,8 +86,8 @@ impl ResourceService for RootResourceService { Ok(Self) } - async fn get_resource(&self, principal: String) -> Result { - Ok(RootResource { principal }) + async fn get_resource(&self, user: User) -> Result { + Ok(RootResource { principal: user.id }) } async fn save_resource(&self, _file: Self::Resource) -> Result<(), Self::Error> { diff --git a/crates/carddav/src/address_object/resource.rs b/crates/carddav/src/address_object/resource.rs index e031bba..e71101f 100644 --- a/crates/carddav/src/address_object/resource.rs +++ b/crates/carddav/src/address_object/resource.rs @@ -3,7 +3,7 @@ use actix_web::{dev::ResourceMap, web::Data, HttpRequest}; use async_trait::async_trait; use derive_more::derive::{From, Into}; use rustical_dav::resource::{InvalidProperty, Resource, ResourceService}; -use rustical_store::{AddressObject, AddressbookStore}; +use rustical_store::{auth::User, AddressObject, AddressbookStore}; use serde::{Deserialize, Serialize}; use std::sync::Arc; use strum::{EnumString, VariantNames}; @@ -133,8 +133,8 @@ impl ResourceService for AddressObjectResourceSer }) } - async fn get_resource(&self, principal: String) -> Result { - if self.principal != principal { + async fn get_resource(&self, user: User) -> Result { + if self.principal != user.id { return Err(Error::Unauthorized); } let event = self diff --git a/crates/carddav/src/addressbook/resource.rs b/crates/carddav/src/addressbook/resource.rs index faa3bd6..de966b9 100644 --- a/crates/carddav/src/addressbook/resource.rs +++ b/crates/carddav/src/addressbook/resource.rs @@ -12,6 +12,7 @@ use async_trait::async_trait; use derive_more::derive::{From, Into}; use rustical_dav::resource::{InvalidProperty, Resource, ResourceService}; use rustical_dav::xml::HrefElement; +use rustical_store::auth::User; use rustical_store::{Addressbook, AddressbookStore}; use serde::{Deserialize, Serialize}; use std::str::FromStr; @@ -196,8 +197,8 @@ impl ResourceService for AddressbookResourceServi type Resource = AddressbookResource; type Error = Error; - async fn get_resource(&self, principal: String) -> Result { - if self.principal != principal { + async fn get_resource(&self, user: User) -> Result { + if self.principal != user.id { return Err(Error::Unauthorized); } let addressbook = self diff --git a/crates/carddav/src/principal/mod.rs b/crates/carddav/src/principal/mod.rs index 42a9736..a01f7a4 100644 --- a/crates/carddav/src/principal/mod.rs +++ b/crates/carddav/src/principal/mod.rs @@ -6,6 +6,7 @@ use actix_web::HttpRequest; use async_trait::async_trait; use rustical_dav::resource::{InvalidProperty, Resource, ResourceService}; use rustical_dav::xml::HrefElement; +use rustical_store::auth::User; use rustical_store::AddressbookStore; use serde::{Deserialize, Serialize}; use std::sync::Arc; @@ -121,8 +122,8 @@ impl ResourceService for PrincipalResourceService< }) } - async fn get_resource(&self, principal: String) -> Result { - if self.principal != principal { + async fn get_resource(&self, user: User) -> Result { + if self.principal != user.id { return Err(Error::Unauthorized); } Ok(PrincipalResource { diff --git a/crates/carddav/src/root/mod.rs b/crates/carddav/src/root/mod.rs index eab037e..41b4e0d 100644 --- a/crates/carddav/src/root/mod.rs +++ b/crates/carddav/src/root/mod.rs @@ -5,6 +5,7 @@ use actix_web::HttpRequest; use async_trait::async_trait; use rustical_dav::resource::{InvalidProperty, Resource, ResourceService}; use rustical_dav::xml::HrefElement; +use rustical_store::auth::User; use serde::{Deserialize, Serialize}; use strum::{EnumString, VariantNames}; @@ -85,8 +86,8 @@ impl ResourceService for RootResourceService { Ok(Self) } - async fn get_resource(&self, principal: String) -> Result { - Ok(RootResource { principal }) + async fn get_resource(&self, user: User) -> Result { + Ok(RootResource { principal: user.id }) } async fn save_resource(&self, _file: Self::Resource) -> Result<(), Self::Error> { diff --git a/crates/dav/src/methods/propfind.rs b/crates/dav/src/methods/propfind.rs index a24c37a..f1d3e50 100644 --- a/crates/dav/src/methods/propfind.rs +++ b/crates/dav/src/methods/propfind.rs @@ -79,7 +79,7 @@ pub async fn route_propfind( } } - let resource = resource_service.get_resource(user.id).await?; + let resource = resource_service.get_resource(user).await?; let response = resource.propfind(req.path(), props, req.resource_map())?; Ok(MultistatusElement { diff --git a/crates/dav/src/methods/proppatch.rs b/crates/dav/src/methods/proppatch.rs index ecc5076..1e47689 100644 --- a/crates/dav/src/methods/proppatch.rs +++ b/crates/dav/src/methods/proppatch.rs @@ -76,7 +76,7 @@ pub async fn route_proppatch( }) .collect(); - let mut resource = resource_service.get_resource(user.id).await?; + let mut resource = resource_service.get_resource(user).await?; let mut props_ok = Vec::new(); let mut props_conflict = Vec::new(); diff --git a/crates/dav/src/resource.rs b/crates/dav/src/resource.rs index d3413b4..be955e5 100644 --- a/crates/dav/src/resource.rs +++ b/crates/dav/src/resource.rs @@ -11,6 +11,7 @@ use actix_web::{http::StatusCode, HttpRequest, ResponseError}; use async_trait::async_trait; use core::fmt; use itertools::Itertools; +use rustical_store::auth::User; use serde::{Deserialize, Serialize}; use std::str::FromStr; use strum::VariantNames; @@ -153,7 +154,7 @@ pub trait ResourceService: Sized + 'static { Ok(vec![]) } - async fn get_resource(&self, principal: String) -> Result; + async fn get_resource(&self, user: User) -> Result; async fn save_resource(&self, file: Self::Resource) -> Result<(), Self::Error>; async fn delete_resource(&self, _use_trashbin: bool) -> Result<(), Self::Error> { Err(crate::Error::Unauthorized.into())