haste_server/auth_n/oidc/routes/federated/
mod.rs

1use crate::{
2    auth_n::oidc::{middleware::OIDCParameterInjectLayer, routes::AUTHORIZE_PARAMETERS},
3    services::AppState,
4};
5use axum::Router;
6use axum_extra::routing::RouterExt;
7use haste_fhir_search::SearchEngine;
8use haste_fhir_terminology::FHIRTerminology;
9use haste_repository::Repository;
10use std::sync::Arc;
11use tower::ServiceBuilder;
12
13mod callback;
14mod initiate;
15
16pub use initiate::FederatedInitiate;
17
18pub fn federated_router<
19    Repo: Repository + Send + Sync + 'static,
20    Search: SearchEngine + Send + Sync + 'static,
21    Terminology: FHIRTerminology + Send + Sync + 'static,
22>() -> Router<Arc<AppState<Repo, Search, Terminology>>> {
23    let router = Router::new().typed_get(callback::federated_callback).merge(
24        // Only initiate route needs authorize params (we redirect back to authorize in callback with redirect uri stored in session).
25        Router::new()
26            .typed_get(initiate::federated_initiate)
27            .route_layer(ServiceBuilder::new().layer(OIDCParameterInjectLayer::new(
28                (*AUTHORIZE_PARAMETERS).clone(),
29            ))),
30    );
31
32    router
33}