routing changes

This commit is contained in:
Lennart
2025-06-09 17:19:25 +02:00
parent 8f29a468db
commit 2ba0beeafc
6 changed files with 97 additions and 56 deletions

View File

@@ -1,3 +1,5 @@
use axum::response::Redirect;
use axum::routing::any;
use axum::{Extension, Router};
use derive_more::Constructor;
use principal::PrincipalResourceService;
@@ -46,8 +48,16 @@ pub fn caldav_router<
cal_store: store.clone(),
};
RootResourceService::<_, User, CalDavPrincipalUri>::new(principal_service.clone())
.axum_router()
.layer(AuthenticationLayer::new(auth_provider))
.layer(Extension(CalDavPrincipalUri(prefix)))
Router::new()
.nest(
prefix,
RootResourceService::<_, User, CalDavPrincipalUri>::new(principal_service.clone())
.axum_router()
.layer(AuthenticationLayer::new(auth_provider))
.layer(Extension(CalDavPrincipalUri(prefix))),
)
.route(
"/.well-known/caldav",
any(async || Redirect::permanent(prefix)),
)
}

View File

@@ -1,3 +1,5 @@
use axum::response::Redirect;
use axum::routing::any;
use axum::{Extension, Router};
use derive_more::Constructor;
pub use error::Error;
@@ -36,8 +38,16 @@ pub fn carddav_router<AP: AuthenticationProvider, A: AddressbookStore, S: Subscr
auth_provider.clone(),
subscription_store.clone(),
);
RootResourceService::<_, User, CardDavPrincipalUri>::new(principal_service.clone())
.axum_router()
.layer(AuthenticationLayer::new(auth_provider))
.layer(Extension(CardDavPrincipalUri(prefix)))
Router::new()
.nest(
prefix,
RootResourceService::<_, User, CardDavPrincipalUri>::new(principal_service.clone())
.axum_router()
.layer(AuthenticationLayer::new(auth_provider))
.layer(Extension(CardDavPrincipalUri(prefix))),
)
.route(
"/.well-known/carddav",
any(async || Redirect::permanent(prefix)),
)
}

View File

@@ -2,6 +2,30 @@ mod extension;
pub mod notifier;
mod prop;
pub mod register;
use derive_more::Constructor;
pub use extension::*;
pub use prop::*;
use rustical_store::{CollectionOperation, SubscriptionStore};
use std::sync::Arc;
use tokio::sync::mpsc::Receiver;
use tracing::error;
#[derive(Debug, Constructor)]
pub struct DavPushController<S: SubscriptionStore> {
allowed_push_servers: Option<Vec<String>>,
sub_store: Arc<S>,
}
impl<S: SubscriptionStore> DavPushController<S> {
pub async fn notifier(&self, mut recv: Receiver<CollectionOperation>) {
while let Some(message) = recv.recv().await {
let subscribers = match self.sub_store.get_subscriptions(&message.topic).await {
Ok(subs) => subs,
Err(err) => {
error!("{err}");
continue;
}
};
}
}
}

View File

@@ -3,7 +3,7 @@ use axum::{
body::Body,
extract::{OriginalUri, Request},
middleware::{self, Next},
response::Response,
response::{Redirect, Response},
routing::{get, post},
};
use headers::{ContentType, HeaderMapExt};
@@ -51,6 +51,7 @@ pub fn frontend_router<
AS: AddressbookStore,
S: SessionStore + Clone,
>(
prefix: &'static str,
auth_provider: Arc<AP>,
cal_store: Arc<CS>,
addr_store: Arc<AS>,
@@ -120,7 +121,7 @@ pub fn frontend_router<
.layer(Extension(oidc_config));
}
router
router = router
.layer(AuthenticationLayer::new(auth_provider.clone()))
.layer(
SessionManagerLayer::new(session_store)
@@ -133,7 +134,11 @@ pub fn frontend_router<
.layer(Extension(addr_store.clone()))
.layer(Extension(frontend_config.clone()))
.layer(Extension(oidc_config.clone()))
.layer(middleware::from_fn(unauthorized_handler))
.layer(middleware::from_fn(unauthorized_handler));
Router::new()
.nest(prefix, router)
.route("/", get(async || Redirect::to(prefix)))
}
async fn unauthorized_handler(mut request: Request, next: Next) -> Response {