mirror of
https://github.com/lennart-k/rustical.git
synced 2025-12-13 20:32:48 +00:00
Janky fix to make birthday calendar set read_only
This commit is contained in:
@@ -15,6 +15,7 @@ use std::sync::Arc;
|
|||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
pub struct CalendarSetResource {
|
pub struct CalendarSetResource {
|
||||||
pub(crate) principal: String,
|
pub(crate) principal: String,
|
||||||
|
pub(crate) read_only: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(XmlDeserialize, XmlSerialize, PartialEq, Clone, EnumVariants, EnumUnitVariants)]
|
#[derive(XmlDeserialize, XmlSerialize, PartialEq, Clone, EnumVariants, EnumUnitVariants)]
|
||||||
@@ -53,7 +54,11 @@ impl Resource for CalendarSetResource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn get_user_privileges(&self, user: &User) -> Result<UserPrivilegeSet, Self::Error> {
|
fn get_user_privileges(&self, user: &User) -> Result<UserPrivilegeSet, Self::Error> {
|
||||||
Ok(UserPrivilegeSet::owner_only(self.principal == user.id))
|
Ok(if self.read_only {
|
||||||
|
UserPrivilegeSet::owner_read(self.principal == user.id)
|
||||||
|
} else {
|
||||||
|
UserPrivilegeSet::owner_only(self.principal == user.id)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -80,6 +85,7 @@ impl<C: CalendarStore> ResourceService for CalendarSetResourceService<C> {
|
|||||||
) -> Result<Self::Resource, Self::Error> {
|
) -> Result<Self::Resource, Self::Error> {
|
||||||
Ok(CalendarSetResource {
|
Ok(CalendarSetResource {
|
||||||
principal: principal.to_owned(),
|
principal: principal.to_owned(),
|
||||||
|
read_only: self.cal_store.is_read_only(),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ pub fn configure_dav<
|
|||||||
web::scope("/user").service(
|
web::scope("/user").service(
|
||||||
web::scope("/{principal}")
|
web::scope("/{principal}")
|
||||||
.service(PrincipalResourceService(&[
|
.service(PrincipalResourceService(&[
|
||||||
"calendar", "birthdays"
|
("calendar", false), ("birthdays", true)
|
||||||
]).actix_resource().name(PrincipalResource::route_name()))
|
]).actix_resource().name(PrincipalResource::route_name()))
|
||||||
.service(web::scope("/calendar")
|
.service(web::scope("/calendar")
|
||||||
.service(CalendarSetResourceService::new(store.clone()).actix_resource())
|
.service(CalendarSetResourceService::new(store.clone()).actix_resource())
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ use rustical_xml::{EnumUnitVariants, EnumVariants, XmlDeserialize, XmlSerialize}
|
|||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
pub struct PrincipalResource {
|
pub struct PrincipalResource {
|
||||||
principal: String,
|
principal: String,
|
||||||
home_set: &'static [&'static str],
|
home_set: &'static [(&'static str, bool)],
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(XmlDeserialize, XmlSerialize, PartialEq, Clone)]
|
#[derive(XmlDeserialize, XmlSerialize, PartialEq, Clone)]
|
||||||
@@ -80,7 +80,7 @@ impl Resource for PrincipalResource {
|
|||||||
let home_set = CalendarHomeSet(
|
let home_set = CalendarHomeSet(
|
||||||
self.home_set
|
self.home_set
|
||||||
.iter()
|
.iter()
|
||||||
.map(|&home_name| format!("{}/{}", principal_url, home_name).into())
|
.map(|&(home_name, _read_only)| format!("{}/{}", principal_url, home_name).into())
|
||||||
.collect(),
|
.collect(),
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -117,7 +117,7 @@ impl Resource for PrincipalResource {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct PrincipalResourceService(pub &'static [&'static str]);
|
pub struct PrincipalResourceService(pub &'static [(&'static str, bool)]);
|
||||||
|
|
||||||
#[async_trait(?Send)]
|
#[async_trait(?Send)]
|
||||||
impl ResourceService for PrincipalResourceService {
|
impl ResourceService for PrincipalResourceService {
|
||||||
@@ -143,11 +143,12 @@ impl ResourceService for PrincipalResourceService {
|
|||||||
Ok(self
|
Ok(self
|
||||||
.0
|
.0
|
||||||
.iter()
|
.iter()
|
||||||
.map(|&set_name| {
|
.map(|&(set_name, read_only)| {
|
||||||
(
|
(
|
||||||
set_name.to_string(),
|
set_name.to_string(),
|
||||||
CalendarSetResource {
|
CalendarSetResource {
|
||||||
principal: principal.to_owned(),
|
principal: principal.to_owned(),
|
||||||
|
read_only,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user