resourcetype: Proper namespace handling

This commit is contained in:
Lennart
2025-01-04 14:58:33 +01:00
parent e7f51f040b
commit f406b7dbb2
11 changed files with 126 additions and 62 deletions

View File

@@ -13,7 +13,7 @@ use async_trait::async_trait;
use derive_more::derive::{From, Into};
use rustical_dav::privileges::UserPrivilegeSet;
use rustical_dav::resource::{Resource, ResourceService};
use rustical_dav::xml::HrefElement;
use rustical_dav::xml::{HrefElement, Resourcetype, ResourcetypeInner};
use rustical_store::auth::User;
use rustical_store::{Calendar, CalendarStore};
use rustical_xml::{XmlDeserialize, XmlSerialize};
@@ -93,11 +93,33 @@ impl Resource for CalendarResource {
type Error = Error;
type PrincipalResource = PrincipalResource;
fn get_resourcetype(&self) -> &'static [&'static str] {
fn get_resourcetype(&self) -> Resourcetype {
if self.0.subscription_url.is_none() {
&["collection", "C:calendar"]
Resourcetype {
inner: &[
ResourcetypeInner {
ns: rustical_dav::namespace::NS_DAV,
name: "collection",
},
ResourcetypeInner {
ns: rustical_dav::namespace::NS_CALDAV,
name: "calendar",
},
],
}
} else {
&["collection", "CS:subscribed"]
Resourcetype {
inner: &[
ResourcetypeInner {
ns: rustical_dav::namespace::NS_DAV,
name: "collection",
},
ResourcetypeInner {
ns: rustical_dav::namespace::NS_CALENDARSERVER,
name: "subscribed",
},
],
}
}
}

View File

@@ -6,6 +6,7 @@ use derive_more::derive::{From, Into};
use rustical_dav::{
privileges::UserPrivilegeSet,
resource::{Resource, ResourceService},
xml::Resourcetype,
};
use rustical_store::{auth::User, CalendarObject, CalendarStore};
use rustical_xml::{XmlDeserialize, XmlSerialize};
@@ -53,8 +54,8 @@ impl Resource for CalendarObjectResource {
type Error = Error;
type PrincipalResource = PrincipalResource;
fn get_resourcetype(&self) -> &'static [&'static str] {
&[]
fn get_resourcetype(&self) -> Resourcetype {
Resourcetype { inner: &[] }
}
fn get_prop(

View File

@@ -4,7 +4,7 @@ use actix_web::dev::ResourceMap;
use async_trait::async_trait;
use rustical_dav::privileges::UserPrivilegeSet;
use rustical_dav::resource::{Resource, ResourceService};
use rustical_dav::xml::HrefElement;
use rustical_dav::xml::{HrefElement, Resourcetype, ResourcetypeInner};
use rustical_store::auth::User;
use rustical_store::CalendarStore;
use rustical_xml::{XmlDeserialize, XmlSerialize};
@@ -57,8 +57,19 @@ impl Resource for PrincipalResource {
type Error = Error;
type PrincipalResource = PrincipalResource;
fn get_resourcetype(&self) -> &'static [&'static str] {
&["collection", "principal"]
fn get_resourcetype(&self) -> Resourcetype {
Resourcetype {
inner: &[
ResourcetypeInner {
ns: rustical_dav::namespace::NS_DAV,
name: "collection",
},
ResourcetypeInner {
ns: rustical_dav::namespace::NS_DAV,
name: "principal",
},
],
}
}
fn get_prop(