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
980
pub fn new_service(scope_path: &str, state: &State) -> Router {
14
980
    let mut role_scopes_tokeninfo: HashMap<Method, RoleScopeType> = HashMap::new();
15
980
    let mut role_scopes_logout: HashMap<Method, RoleScopeType> = HashMap::new();
16
980

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

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