mirror of
https://github.com/lennart-k/rustical.git
synced 2025-12-14 07:02:24 +00:00
dav: get_resource replace principal with User
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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> {
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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> {
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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())
|
||||||
|
|||||||
Reference in New Issue
Block a user