potree_auth/render/http/
router.rs1use std::sync::LazyLock;
2
3use axum::Extension;
4use axum::Router;
5use axum::routing::get;
6use web_route::ParameterizedRoute;
7use web_route::WebRoute;
8
9use super::super::application::service::RenderingService;
10use super::route_handlers;
11use super::state::State;
12use crate::common::utils::http::initialization_error::InitializationError;
13use crate::project::domain::ProjectId;
14use crate::render::http::middleware::potree_csp::set_potree_csp;
15
16pub static POTREE: LazyLock<ParameterizedRoute> =
17 LazyLock::new(|| ParameterizedRoute::new("/potree/{project_id}"));
18pub static PROJECT_DASHBOARD: LazyLock<ParameterizedRoute> =
19 LazyLock::new(|| ParameterizedRoute::new("/projects"));
20pub static NOT_FOUND: LazyLock<ParameterizedRoute> =
21 LazyLock::new(|| ParameterizedRoute::new("/404"));
22
23#[derive(serde::Deserialize)]
24pub(crate) struct PotreePathParams {
25 pub project_id: ProjectId,
26}
27
28pub fn build_router(
33 rendering_service: RenderingService,
34 login_route: WebRoute,
35) -> Result<Router, InitializationError> {
36 let state = State {
37 rendering_service,
38 login_route,
39 };
40
41 let router = Router::new()
42 .route(
43 &POTREE,
44 get(route_handlers::potree_render).layer(set_potree_csp()?),
45 )
46 .route(&PROJECT_DASHBOARD, get(route_handlers::project_dashboard))
47 .route(&NOT_FOUND, get(route_handlers::not_found))
48 .fallback(get(route_handlers::not_found))
49 .layer(Extension(state));
50
51 Ok(router)
52}