1use utoipa::{
4 Modify, OpenApi,
5 openapi::security::{HttpAuthScheme, HttpBuilder, SecurityScheme},
6};
7
8use super::handlers;
9
10#[derive(OpenApi)]
12#[openapi(
13 paths(
14 handlers::health,
15 handlers::get_sessions,
16 handlers::get_image_analysis,
17 handlers::get_configurations,
18 handlers::get_nodes,
19 handlers::get_groups,
20 handlers::get_images,
21 handlers::get_templates,
22 handlers::get_boot_parameters,
23 handlers::get_kernel_parameters,
24 handlers::get_redfish_endpoints,
25 handlers::get_groups_nodes,
26 handlers::get_groups_hardware,
27 handlers::get_clusters_deprecated,
28 handlers::get_hardware_clusters_deprecated,
29 handlers::get_hardware_nodes_list,
30 handlers::delete_node,
31 handlers::add_node,
32 handlers::delete_group,
33 handlers::create_group,
34 handlers::add_nodes_to_group,
35 handlers::delete_group_members,
36 handlers::delete_boot_parameters,
37 handlers::add_boot_parameters,
38 handlers::update_boot_parameters,
39 handlers::delete_redfish_endpoint,
40 handlers::add_redfish_endpoint,
41 handlers::update_redfish_endpoint,
42 handlers::delete_session,
43 handlers::delete_images,
44 handlers::delete_configurations,
45 handlers::create_session,
46 handlers::apply_boot_config,
47 handlers::apply_kernel_parameters,
48 handlers::add_kernel_parameters,
49 handlers::delete_kernel_parameters,
50 handlers::migrate_nodes,
51 handlers::migrate_backup,
52 handlers::migrate_restore,
53 handlers::create_ephemeral_env,
54 handlers::post_power,
55 handlers::get_power_transition,
56 handlers::post_template_session,
57 handlers::get_session_logs,
58 handlers::post_sat_configuration,
59 handlers::post_sat_image_cfs_session,
60 handlers::post_sat_image_stamp,
61 handlers::post_sat_session_template,
62 handlers::post_sat_validate,
63 handlers::add_hw_component,
64 handlers::delete_hw_component,
65 handlers::apply_hw_configuration,
66 handlers::console_node_ws,
67 handlers::console_session_ws,
68 handlers::auth_token,
69 handlers::auth_validate,
70 handlers::get_available_groups,
71 ),
72 components(schemas(
73 handlers::ErrorResponse,
74 handlers::AddNodeRequest,
75 handlers::AddNodesToGroupRequest,
76 handlers::AddNodesToGroupResponse,
77 handlers::DeleteBootParametersRequest,
78 handlers::CreateSessionRequest,
79 handlers::ApplyBootConfigRequest,
80 handlers::KernelParamOp,
81 handlers::ApplyKernelParametersRequest,
82 handlers::MigrateNodesRequest,
83 handlers::MigrateBackupRequest,
84 handlers::MigrateRestoreRequest,
85 handlers::CreateEphemeralEnvRequest,
86 handlers::DeleteGroupMembersRequest,
87 handlers::PowerAction,
88 handlers::PowerTargetType,
89 handlers::PowerRequest,
90 handlers::BosOperation,
91 handlers::PostTemplateSessionRequest,
92 handlers::AddKernelParametersRequest,
93 handlers::DeleteKernelParametersRequest,
94 handlers::AddHwComponentRequest,
95 handlers::DeleteHwComponentRequest,
96 handlers::HwClusterMode,
97 handlers::ApplyHwConfigurationRequest,
98 manta_shared::types::auth::AuthTokenRequest,
99 manta_shared::types::auth::AuthTokenResponse,
100 manta_shared::types::auth::ValidateTokenRequest,
101 crate::service::boot_parameters::UpdateBootParametersParams,
102 manta_shared::types::api::redfish_endpoints::UpdateRedfishEndpointParams,
103 manta_shared::types::dto::NodeDetails,
104 manta_shared::types::api::responses::CreatedResponse,
105 manta_shared::types::api::responses::AddNodeResponse,
106 manta_shared::types::api::responses::CreateSessionResponse,
107 manta_shared::types::api::responses::EphemeralEnvResponse,
108 manta_shared::types::api::responses::CompletedResponse,
109 manta_shared::types::api::responses::MigrateNodesPairResult,
110 manta_shared::types::api::responses::MigrateNodesResponse,
111 manta_shared::types::api::analysis::BackendSummary,
112 manta_shared::types::api::configuration_analysis::ConfigurationAnalysis,
113 manta_backend_dispatcher::types::Group,
114 manta_backend_dispatcher::types::Member,
115 manta_backend_dispatcher::types::bss::BootParameters,
116 )),
117 modifiers(&SecurityAddon),
118 info(
119 title = "Manta API",
120 version = env!("CARGO_PKG_VERSION"),
121 description = "REST API for managing CSM/OpenCHAMI HPC clusters via manta.",
122 )
123)]
124pub struct ApiDoc;
125
126struct SecurityAddon;
127
128impl Modify for SecurityAddon {
129 fn modify(&self, openapi: &mut utoipa::openapi::OpenApi) {
130 if let Some(components) = openapi.components.as_mut() {
131 components.add_security_scheme(
132 "bearerAuth",
133 SecurityScheme::Http(
134 HttpBuilder::new()
135 .scheme(HttpAuthScheme::Bearer)
136 .bearer_format("JWT")
137 .build(),
138 ),
139 );
140 }
141 openapi.servers = Some(vec![
144 utoipa::openapi::ServerBuilder::new()
145 .url("/api/v1")
146 .description(Some("manta API v1"))
147 .build(),
148 ]);
149 }
150}