diff options
Diffstat (limited to 'src/api/admin/api_server.rs')
-rw-r--r-- | src/api/admin/api_server.rs | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/api/admin/api_server.rs b/src/api/admin/api_server.rs index 836b5158..57842548 100644 --- a/src/api/admin/api_server.rs +++ b/src/api/admin/api_server.rs @@ -3,7 +3,7 @@ use std::sync::Arc; use async_trait::async_trait; use futures::future::Future; -use http::header::CONTENT_TYPE; +use http::header::{CONTENT_TYPE, ALLOW, ACCESS_CONTROL_ALLOW_METHODS, ACCESS_CONTROL_ALLOW_ORIGIN}; use hyper::{Body, Request, Response}; use opentelemetry::trace::{SpanRef, Tracer}; @@ -17,6 +17,7 @@ use crate::error::*; use crate::generic_server::*; use crate::admin::router::{Authorization, Endpoint}; +use crate::admin::cluster::*; pub struct AdminApiServer { garage: Arc<Garage>, @@ -56,6 +57,15 @@ impl AdminApiServer { } } + fn handle_options(&self, _req: &Request<Body>) -> Result<Response<Body>, Error> { + Ok(Response::builder() + .status(204) + .header(ALLOW, "OPTIONS, GET, POST") + .header(ACCESS_CONTROL_ALLOW_METHODS, "OPTIONS, GET, POST") + .header(ACCESS_CONTROL_ALLOW_ORIGIN, "*") + .body(Body::empty())?) + } + fn handle_metrics(&self) -> Result<Response<Body>, Error> { let mut buffer = vec![]; let encoder = TextEncoder::new(); @@ -110,7 +120,9 @@ impl ApiHandler for AdminApiServer { } match endpoint { + Endpoint::Options => self.handle_options(&req), Endpoint::Metrics => self.handle_metrics(), + Endpoint::GetClusterStatus => handle_get_cluster_status(&self.garage).await, _ => Err(Error::NotImplemented(format!( "Admin endpoint {} not implemented yet", endpoint.name() |