Skip to main content

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

1use crate::{
2    auth_n::oidc::{
3        middleware::OIDCParameterInjectLayer,
4        routes::{AUTHORIZE_PARAMETERS, LOGOUT_PARAMETERS},
5    },
6    services::AppState,
7};
8use axum::Router;
9use axum_extra::routing::RouterExt;
10use haste_fhir_search::SearchEngine;
11use haste_fhir_terminology::FHIRTerminology;
12use haste_repository::Repository;
13use std::sync::Arc;
14use tower::ServiceBuilder;
15
16mod login;
17mod logout;
18pub mod password_reset;
19
20pub fn interactions_router<
21    Repo: Repository + Send + Sync + 'static,
22    Search: SearchEngine + Send + Sync + 'static,
23    Terminology: FHIRTerminology + Send + Sync + 'static,
24>() -> Router<Arc<AppState<Repo, Search, Terminology>>> {
25    let password_reset_routes = Router::new()
26        .typed_get(password_reset::password_reset_initiate_get)
27        .typed_post(password_reset::password_reset_initiate_post)
28        .typed_get(password_reset::password_reset_verify_get)
29        .typed_post(password_reset::password_reset_verify_post);
30
31    let login_routes = Router::new()
32        .typed_get(login::login_get)
33        .typed_post(login::login_post)
34        .route_layer(ServiceBuilder::new().layer(OIDCParameterInjectLayer::new(
35            (*AUTHORIZE_PARAMETERS).clone(),
36        )));
37
38    let logout_routes = Router::new()
39        .typed_post(logout::logout)
40        .typed_get(logout::logout)
41        .route_layer(
42            ServiceBuilder::new()
43                .layer(OIDCParameterInjectLayer::new((*LOGOUT_PARAMETERS).clone())),
44        );
45
46    Router::new()
47        .merge(login_routes)
48        .merge(logout_routes)
49        .merge(password_reset_routes)
50}