manta_server/server/
api_doc.rs

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