From adbccd88348f472751373a2e1d536e818be8fa67 Mon Sep 17 00:00:00 2001 From: Quentin Dufour Date: Tue, 23 Apr 2024 15:43:48 +0200 Subject: Add support for content type --- aero-proto/src/dav/controller.rs | 2 +- aero-proto/src/dav/node.rs | 2 ++ aero-proto/src/dav/resource.rs | 25 +++++++++++++++++++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) (limited to 'aero-proto') diff --git a/aero-proto/src/dav/controller.rs b/aero-proto/src/dav/controller.rs index de6403e..5762581 100644 --- a/aero-proto/src/dav/controller.rs +++ b/aero-proto/src/dav/controller.rs @@ -209,7 +209,7 @@ impl Controller { let response = Response::builder() .status(200) - //.header("content-type", "application/xml; charset=\"utf-8\"") + .header("content-type", self.node.content_type()) .body(boxed_body)?; Ok(response) diff --git a/aero-proto/src/dav/node.rs b/aero-proto/src/dav/node.rs index e2835e9..0b63900 100644 --- a/aero-proto/src/dav/node.rs +++ b/aero-proto/src/dav/node.rs @@ -34,6 +34,8 @@ pub(crate) trait DavNode: Send { fn properties(&self, user: &ArcUser, prop: dav::PropName) -> Vec>; /// Put an element (create or update) fn put<'a>(&'a self, policy: PutPolicy, stream: Content<'a>) -> BoxFuture<'a, Result>; + /// Content type of the element + fn content_type(&self) -> &str; /// Get content fn content<'a>(&'a self) -> BoxFuture<'a, Content<'static>>; diff --git a/aero-proto/src/dav/resource.rs b/aero-proto/src/dav/resource.rs index bd377fb..f13fb0c 100644 --- a/aero-proto/src/dav/resource.rs +++ b/aero-proto/src/dav/resource.rs @@ -70,6 +70,10 @@ impl DavNode for RootNode { futures::stream::once(futures::future::err(std::io::Error::from(std::io::ErrorKind::Unsupported))).boxed() }.boxed() } + + fn content_type(&self) -> &str { + "text/plain" + } } #[derive(Clone)] @@ -139,6 +143,11 @@ impl DavNode for HomeNode { futures::stream::once(futures::future::err(std::io::Error::from(std::io::ErrorKind::Unsupported))).boxed() }.boxed() } + + + fn content_type(&self) -> &str { + "text/plain" + } } #[derive(Clone)] @@ -218,6 +227,10 @@ impl DavNode for CalendarListNode { futures::stream::once(futures::future::err(std::io::Error::from(std::io::ErrorKind::Unsupported))).boxed() }.boxed() } + + fn content_type(&self) -> &str { + "text/plain" + } } #[derive(Clone)] @@ -314,6 +327,10 @@ impl DavNode for CalendarNode { futures::stream::once(futures::future::err(std::io::Error::from(std::io::ErrorKind::Unsupported))).boxed() }.boxed() } + + fn content_type(&self) -> &str { + "text/plain" + } } const FAKE_ICS: &str = r#"BEGIN:VCALENDAR @@ -432,6 +449,10 @@ impl DavNode for EventNode { futures::stream::once(Box::pin(r)).boxed() }.boxed() } + + fn content_type(&self) -> &str { + "text/calendar" + } } #[derive(Clone)] @@ -484,4 +505,8 @@ impl DavNode for CreateEventNode { futures::stream::once(futures::future::err(std::io::Error::from(std::io::ErrorKind::Unsupported))).boxed() }.boxed() } + + fn content_type(&self) -> &str { + "text/plain" + } } -- cgit v1.2.3