dav: get_resource replace principal with User

This commit is contained in:
Lennart
2024-10-31 18:20:43 +01:00
parent a136f86ca7
commit eab03fef6b
11 changed files with 28 additions and 21 deletions

View File

@@ -15,6 +15,7 @@ use async_trait::async_trait;
use derive_more::derive::{From, Into}; use derive_more::derive::{From, Into};
use rustical_dav::resource::{InvalidProperty, Resource, ResourceService}; use rustical_dav::resource::{InvalidProperty, Resource, ResourceService};
use rustical_dav::xml::HrefElement; use rustical_dav::xml::HrefElement;
use rustical_store::auth::User;
use rustical_store::{Calendar, CalendarStore}; use rustical_store::{Calendar, CalendarStore};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use std::str::FromStr; use std::str::FromStr;
@@ -256,8 +257,8 @@ impl<C: CalendarStore + ?Sized> ResourceService for CalendarResourceService<C> {
type Resource = CalendarResource; type Resource = CalendarResource;
type Error = Error; type Error = Error;
async fn get_resource(&self, principal: String) -> Result<Self::Resource, Error> { async fn get_resource(&self, user: User) -> Result<Self::Resource, Error> {
if self.principal != principal { if self.principal != user.id {
return Err(Error::Unauthorized); return Err(Error::Unauthorized);
} }
let calendar = self let calendar = self

View File

@@ -4,7 +4,7 @@ use actix_web::{dev::ResourceMap, web::Data, HttpRequest};
use async_trait::async_trait; use async_trait::async_trait;
use derive_more::derive::{From, Into}; use derive_more::derive::{From, Into};
use rustical_dav::resource::{InvalidProperty, Resource, ResourceService}; use rustical_dav::resource::{InvalidProperty, Resource, ResourceService};
use rustical_store::{CalendarObject, CalendarStore}; use rustical_store::{auth::User, CalendarObject, CalendarStore};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use std::sync::Arc; use std::sync::Arc;
use strum::{EnumString, VariantNames}; use strum::{EnumString, VariantNames};
@@ -132,8 +132,8 @@ impl<C: CalendarStore + ?Sized> ResourceService for CalendarObjectResourceServic
}) })
} }
async fn get_resource(&self, principal: String) -> Result<Self::Resource, Self::Error> { async fn get_resource(&self, user: User) -> Result<Self::Resource, Self::Error> {
if self.principal != principal { if self.principal != user.id {
return Err(Error::Unauthorized); return Err(Error::Unauthorized);
} }
let event = self let event = self

View File

@@ -6,6 +6,7 @@ use actix_web::HttpRequest;
use async_trait::async_trait; use async_trait::async_trait;
use rustical_dav::resource::{InvalidProperty, Resource, ResourceService}; use rustical_dav::resource::{InvalidProperty, Resource, ResourceService};
use rustical_dav::xml::HrefElement; use rustical_dav::xml::HrefElement;
use rustical_store::auth::User;
use rustical_store::CalendarStore; use rustical_store::CalendarStore;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use std::sync::Arc; use std::sync::Arc;
@@ -122,8 +123,8 @@ impl<C: CalendarStore + ?Sized> ResourceService for PrincipalResourceService<C>
}) })
} }
async fn get_resource(&self, principal: String) -> Result<Self::Resource, Self::Error> { async fn get_resource(&self, user: User) -> Result<Self::Resource, Self::Error> {
if self.principal != principal { if self.principal != user.id {
return Err(Error::Unauthorized); return Err(Error::Unauthorized);
} }
Ok(PrincipalResource { Ok(PrincipalResource {

View File

@@ -5,6 +5,7 @@ use actix_web::HttpRequest;
use async_trait::async_trait; use async_trait::async_trait;
use rustical_dav::resource::{InvalidProperty, Resource, ResourceService}; use rustical_dav::resource::{InvalidProperty, Resource, ResourceService};
use rustical_dav::xml::HrefElement; use rustical_dav::xml::HrefElement;
use rustical_store::auth::User;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use strum::{EnumString, VariantNames}; use strum::{EnumString, VariantNames};
@@ -85,8 +86,8 @@ impl ResourceService for RootResourceService {
Ok(Self) Ok(Self)
} }
async fn get_resource(&self, principal: String) -> Result<Self::Resource, Self::Error> { async fn get_resource(&self, user: User) -> Result<Self::Resource, Self::Error> {
Ok(RootResource { principal }) Ok(RootResource { principal: user.id })
} }
async fn save_resource(&self, _file: Self::Resource) -> Result<(), Self::Error> { async fn save_resource(&self, _file: Self::Resource) -> Result<(), Self::Error> {

View File

@@ -3,7 +3,7 @@ use actix_web::{dev::ResourceMap, web::Data, HttpRequest};
use async_trait::async_trait; use async_trait::async_trait;
use derive_more::derive::{From, Into}; use derive_more::derive::{From, Into};
use rustical_dav::resource::{InvalidProperty, Resource, ResourceService}; use rustical_dav::resource::{InvalidProperty, Resource, ResourceService};
use rustical_store::{AddressObject, AddressbookStore}; use rustical_store::{auth::User, AddressObject, AddressbookStore};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use std::sync::Arc; use std::sync::Arc;
use strum::{EnumString, VariantNames}; use strum::{EnumString, VariantNames};
@@ -133,8 +133,8 @@ impl<AS: AddressbookStore + ?Sized> ResourceService for AddressObjectResourceSer
}) })
} }
async fn get_resource(&self, principal: String) -> Result<Self::Resource, Self::Error> { async fn get_resource(&self, user: User) -> Result<Self::Resource, Self::Error> {
if self.principal != principal { if self.principal != user.id {
return Err(Error::Unauthorized); return Err(Error::Unauthorized);
} }
let event = self let event = self

View File

@@ -12,6 +12,7 @@ use async_trait::async_trait;
use derive_more::derive::{From, Into}; use derive_more::derive::{From, Into};
use rustical_dav::resource::{InvalidProperty, Resource, ResourceService}; use rustical_dav::resource::{InvalidProperty, Resource, ResourceService};
use rustical_dav::xml::HrefElement; use rustical_dav::xml::HrefElement;
use rustical_store::auth::User;
use rustical_store::{Addressbook, AddressbookStore}; use rustical_store::{Addressbook, AddressbookStore};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use std::str::FromStr; use std::str::FromStr;
@@ -196,8 +197,8 @@ impl<AS: AddressbookStore + ?Sized> ResourceService for AddressbookResourceServi
type Resource = AddressbookResource; type Resource = AddressbookResource;
type Error = Error; type Error = Error;
async fn get_resource(&self, principal: String) -> Result<Self::Resource, Error> { async fn get_resource(&self, user: User) -> Result<Self::Resource, Error> {
if self.principal != principal { if self.principal != user.id {
return Err(Error::Unauthorized); return Err(Error::Unauthorized);
} }
let addressbook = self let addressbook = self

View File

@@ -6,6 +6,7 @@ use actix_web::HttpRequest;
use async_trait::async_trait; use async_trait::async_trait;
use rustical_dav::resource::{InvalidProperty, Resource, ResourceService}; use rustical_dav::resource::{InvalidProperty, Resource, ResourceService};
use rustical_dav::xml::HrefElement; use rustical_dav::xml::HrefElement;
use rustical_store::auth::User;
use rustical_store::AddressbookStore; use rustical_store::AddressbookStore;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use std::sync::Arc; use std::sync::Arc;
@@ -121,8 +122,8 @@ impl<A: AddressbookStore + ?Sized> ResourceService for PrincipalResourceService<
}) })
} }
async fn get_resource(&self, principal: String) -> Result<Self::Resource, Self::Error> { async fn get_resource(&self, user: User) -> Result<Self::Resource, Self::Error> {
if self.principal != principal { if self.principal != user.id {
return Err(Error::Unauthorized); return Err(Error::Unauthorized);
} }
Ok(PrincipalResource { Ok(PrincipalResource {

View File

@@ -5,6 +5,7 @@ use actix_web::HttpRequest;
use async_trait::async_trait; use async_trait::async_trait;
use rustical_dav::resource::{InvalidProperty, Resource, ResourceService}; use rustical_dav::resource::{InvalidProperty, Resource, ResourceService};
use rustical_dav::xml::HrefElement; use rustical_dav::xml::HrefElement;
use rustical_store::auth::User;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use strum::{EnumString, VariantNames}; use strum::{EnumString, VariantNames};
@@ -85,8 +86,8 @@ impl ResourceService for RootResourceService {
Ok(Self) Ok(Self)
} }
async fn get_resource(&self, principal: String) -> Result<Self::Resource, Self::Error> { async fn get_resource(&self, user: User) -> Result<Self::Resource, Self::Error> {
Ok(RootResource { principal }) Ok(RootResource { principal: user.id })
} }
async fn save_resource(&self, _file: Self::Resource) -> Result<(), Self::Error> { async fn save_resource(&self, _file: Self::Resource) -> Result<(), Self::Error> {

View File

@@ -79,7 +79,7 @@ pub async fn route_propfind<R: ResourceService>(
} }
} }
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())?; let response = resource.propfind(req.path(), props, req.resource_map())?;
Ok(MultistatusElement { Ok(MultistatusElement {

View File

@@ -76,7 +76,7 @@ pub async fn route_proppatch<R: ResourceService>(
}) })
.collect(); .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_ok = Vec::new();
let mut props_conflict = Vec::new(); let mut props_conflict = Vec::new();

View File

@@ -11,6 +11,7 @@ use actix_web::{http::StatusCode, HttpRequest, ResponseError};
use async_trait::async_trait; use async_trait::async_trait;
use core::fmt; use core::fmt;
use itertools::Itertools; use itertools::Itertools;
use rustical_store::auth::User;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use std::str::FromStr; use std::str::FromStr;
use strum::VariantNames; use strum::VariantNames;
@@ -153,7 +154,7 @@ pub trait ResourceService: Sized + 'static {
Ok(vec![]) Ok(vec![])
} }
async fn get_resource(&self, principal: String) -> Result<Self::Resource, Self::Error>; async fn get_resource(&self, user: User) -> Result<Self::Resource, Self::Error>;
async fn save_resource(&self, file: Self::Resource) -> Result<(), Self::Error>; async fn save_resource(&self, file: Self::Resource) -> Result<(), Self::Error>;
async fn delete_resource(&self, _use_trashbin: bool) -> Result<(), Self::Error> { async fn delete_resource(&self, _use_trashbin: bool) -> Result<(), Self::Error> {
Err(crate::Error::Unauthorized.into()) Err(crate::Error::Unauthorized.into())