1
use std::collections::HashMap;
2

            
3
use axum::{http::Method, routing, Router};
4

            
5
use super::super::{
6
    oauth2::middleware::{AuthService, RoleScopeType},
7
    State,
8
};
9

            
10
mod api;
11
mod response;
12

            
13
1948
pub fn new_service(scope_path: &str, state: &State) -> Router {
14
1948
    let mut role_scopes_tokeninfo: HashMap<Method, RoleScopeType> = HashMap::new();
15
1948
    let mut role_scopes_logout: HashMap<Method, RoleScopeType> = HashMap::new();
16
1948

            
17
1948
    match state.api_scopes.get("auth.tokeninfo.get") {
18
1946
        None => {
19
1946
            role_scopes_tokeninfo.insert(Method::GET, (vec![], vec![]));
20
1946
        }
21
2
        Some(scopes) => {
22
2
            role_scopes_tokeninfo.insert(Method::GET, (vec![], scopes.clone()));
23
2
        }
24
    }
25
1948
    match state.api_scopes.get("auth.logout.post") {
26
1946
        None => {
27
1946
            role_scopes_logout.insert(Method::POST, (vec![], vec![]));
28
1946
        }
29
2
        Some(scopes) => {
30
2
            role_scopes_logout.insert(Method::POST, (vec![], scopes.clone()));
31
2
        }
32
    }
33

            
34
1948
    Router::new().nest(
35
1948
        scope_path,
36
1948
        Router::new()
37
1948
            .route(
38
1948
                "/tokeninfo",
39
1948
                routing::get(api::get_tokeninfo)
40
1948
                    .layer(AuthService::new(&state.model, role_scopes_tokeninfo)),
41
1948
            )
42
1948
            .route(
43
1948
                "/logout",
44
1948
                routing::post(api::post_logout)
45
1948
                    .layer(AuthService::new(&state.model, role_scopes_logout)),
46
1948
            )
47
1948
            .with_state(state.clone()),
48
1948
    )
49
1948
}