aboutsummaryrefslogtreecommitdiff
path: root/src/api/admin
diff options
context:
space:
mode:
Diffstat (limited to 'src/api/admin')
-rw-r--r--src/api/admin/Cargo.toml44
-rw-r--r--src/api/admin/api.rs9
-rw-r--r--src/api/admin/api_server.rs18
-rw-r--r--src/api/admin/bucket.rs9
-rw-r--r--src/api/admin/cluster.rs6
-rw-r--r--src/api/admin/error.rs23
-rw-r--r--src/api/admin/key.rs6
-rw-r--r--src/api/admin/lib.rs (renamed from src/api/admin/mod.rs)3
-rw-r--r--src/api/admin/router_v0.rs5
-rw-r--r--src/api/admin/router_v1.rs7
-rw-r--r--src/api/admin/router_v2.rs13
-rw-r--r--src/api/admin/special.rs11
12 files changed, 100 insertions, 54 deletions
diff --git a/src/api/admin/Cargo.toml b/src/api/admin/Cargo.toml
new file mode 100644
index 00000000..94a321a6
--- /dev/null
+++ b/src/api/admin/Cargo.toml
@@ -0,0 +1,44 @@
+[package]
+name = "garage_api_admin"
+version = "1.0.1"
+authors = ["Alex Auvolat <alex@adnab.me>"]
+edition = "2018"
+license = "AGPL-3.0"
+description = "Admin API server crate for the Garage object store"
+repository = "https://git.deuxfleurs.fr/Deuxfleurs/garage"
+readme = "../../README.md"
+
+[lib]
+path = "lib.rs"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
+garage_model.workspace = true
+garage_table.workspace = true
+garage_util.workspace = true
+garage_rpc.workspace = true
+garage_api_common.workspace = true
+
+argon2.workspace = true
+async-trait.workspace = true
+err-derive.workspace = true
+hex.workspace = true
+paste.workspace = true
+tracing.workspace = true
+
+futures.workspace = true
+tokio.workspace = true
+http.workspace = true
+hyper = { workspace = true, default-features = false, features = ["server", "http1"] }
+url.workspace = true
+
+serde.workspace = true
+serde_json.workspace = true
+
+opentelemetry.workspace = true
+opentelemetry-prometheus = { workspace = true, optional = true }
+prometheus = { workspace = true, optional = true }
+
+[features]
+metrics = [ "opentelemetry-prometheus", "prometheus" ]
diff --git a/src/api/admin/api.rs b/src/api/admin/api.rs
index 21133f10..99832564 100644
--- a/src/api/admin/api.rs
+++ b/src/api/admin/api.rs
@@ -8,10 +8,11 @@ use serde::{Deserialize, Serialize};
use garage_model::garage::Garage;
-use crate::admin::error::Error;
-use crate::admin::macros::*;
-use crate::admin::EndpointHandler;
-use crate::helpers::is_default;
+use garage_api_common::helpers::is_default;
+
+use crate::error::Error;
+use crate::macros::*;
+use crate::EndpointHandler;
// This generates the following:
//
diff --git a/src/api/admin/api_server.rs b/src/api/admin/api_server.rs
index d66714db..be29e617 100644
--- a/src/api/admin/api_server.rs
+++ b/src/api/admin/api_server.rs
@@ -19,15 +19,15 @@ use garage_model::garage::Garage;
use garage_util::error::Error as GarageError;
use garage_util::socket_address::UnixOrTCPSocketAddress;
-use crate::generic_server::*;
-
-use crate::admin::api::*;
-use crate::admin::error::*;
-use crate::admin::router_v0;
-use crate::admin::router_v1;
-use crate::admin::Authorization;
-use crate::admin::EndpointHandler;
-use crate::helpers::*;
+use garage_api_common::generic_server::*;
+use garage_api_common::helpers::*;
+
+use crate::api::*;
+use crate::error::*;
+use crate::router_v0;
+use crate::router_v1;
+use crate::Authorization;
+use crate::EndpointHandler;
pub type ResBody = BoxBody<Error>;
diff --git a/src/api/admin/bucket.rs b/src/api/admin/bucket.rs
index d2d75fc0..123956ca 100644
--- a/src/api/admin/bucket.rs
+++ b/src/api/admin/bucket.rs
@@ -16,10 +16,11 @@ use garage_model::permission::*;
use garage_model::s3::mpu_table;
use garage_model::s3::object_table::*;
-use crate::admin::api::*;
-use crate::admin::error::*;
-use crate::admin::EndpointHandler;
-use crate::common_error::CommonError;
+use garage_api_common::common_error::CommonError;
+
+use crate::api::*;
+use crate::error::*;
+use crate::EndpointHandler;
#[async_trait]
impl EndpointHandler for ListBucketsRequest {
diff --git a/src/api/admin/cluster.rs b/src/api/admin/cluster.rs
index 0cfd744a..dc16bd50 100644
--- a/src/api/admin/cluster.rs
+++ b/src/api/admin/cluster.rs
@@ -10,9 +10,9 @@ use garage_rpc::layout;
use garage_model::garage::Garage;
-use crate::admin::api::*;
-use crate::admin::error::*;
-use crate::admin::EndpointHandler;
+use crate::api::*;
+use crate::error::*;
+use crate::EndpointHandler;
#[async_trait]
impl EndpointHandler for GetClusterStatusRequest {
diff --git a/src/api/admin/error.rs b/src/api/admin/error.rs
index 205fc314..3712ee7d 100644
--- a/src/api/admin/error.rs
+++ b/src/api/admin/error.rs
@@ -6,17 +6,19 @@ use hyper::{HeaderMap, StatusCode};
pub use garage_model::helper::error::Error as HelperError;
-use crate::common_error::CommonError;
-pub use crate::common_error::{CommonErrorDerivative, OkOrBadRequest, OkOrInternalError};
-use crate::generic_server::ApiError;
-use crate::helpers::*;
+use garage_api_common::common_error::{commonErrorDerivative, CommonError};
+pub use garage_api_common::common_error::{
+ CommonErrorDerivative, OkOrBadRequest, OkOrInternalError,
+};
+use garage_api_common::generic_server::ApiError;
+use garage_api_common::helpers::*;
/// Errors of this crate
#[derive(Debug, Error)]
pub enum Error {
#[error(display = "{}", _0)]
/// Error from common error
- Common(CommonError),
+ Common(#[error(source)] CommonError),
// Category: cannot process
/// The API access key does not exist
@@ -31,14 +33,7 @@ pub enum Error {
KeyAlreadyExists(String),
}
-impl<T> From<T> for Error
-where
- CommonError: From<T>,
-{
- fn from(err: T) -> Self {
- Error::Common(CommonError::from(err))
- }
-}
+commonErrorDerivative!(Error);
/// FIXME: helper errors are transformed into their corresponding variants
/// in the Error struct, but in many case a helper error should be considered
@@ -53,8 +48,6 @@ impl From<HelperError> for Error {
}
}
-impl CommonErrorDerivative for Error {}
-
impl Error {
pub fn code(&self) -> &'static str {
match self {
diff --git a/src/api/admin/key.rs b/src/api/admin/key.rs
index d2f449ed..5b7de075 100644
--- a/src/api/admin/key.rs
+++ b/src/api/admin/key.rs
@@ -8,9 +8,9 @@ use garage_table::*;
use garage_model::garage::Garage;
use garage_model::key_table::*;
-use crate::admin::api::*;
-use crate::admin::error::*;
-use crate::admin::EndpointHandler;
+use crate::api::*;
+use crate::error::*;
+use crate::EndpointHandler;
#[async_trait]
impl EndpointHandler for ListKeysRequest {
diff --git a/src/api/admin/mod.rs b/src/api/admin/lib.rs
index 86f5bcac..31b3874d 100644
--- a/src/api/admin/mod.rs
+++ b/src/api/admin/lib.rs
@@ -1,3 +1,6 @@
+#[macro_use]
+extern crate tracing;
+
pub mod api_server;
mod error;
mod macros;
diff --git a/src/api/admin/router_v0.rs b/src/api/admin/router_v0.rs
index 68676445..9dd742ba 100644
--- a/src/api/admin/router_v0.rs
+++ b/src/api/admin/router_v0.rs
@@ -2,8 +2,9 @@ use std::borrow::Cow;
use hyper::{Method, Request};
-use crate::admin::error::*;
-use crate::router_macros::*;
+use garage_api_common::router_macros::*;
+
+use crate::error::*;
router_match! {@func
diff --git a/src/api/admin/router_v1.rs b/src/api/admin/router_v1.rs
index 7e738145..138a801d 100644
--- a/src/api/admin/router_v1.rs
+++ b/src/api/admin/router_v1.rs
@@ -2,9 +2,10 @@ use std::borrow::Cow;
use hyper::{Method, Request};
-use crate::admin::error::*;
-use crate::admin::router_v0;
-use crate::router_macros::*;
+use garage_api_common::router_macros::*;
+
+use crate::error::*;
+use crate::router_v0;
router_match! {@func
diff --git a/src/api/admin/router_v2.rs b/src/api/admin/router_v2.rs
index 9d60b312..b36bca34 100644
--- a/src/api/admin/router_v2.rs
+++ b/src/api/admin/router_v2.rs
@@ -4,12 +4,13 @@ use hyper::body::Incoming as IncomingBody;
use hyper::{Method, Request};
use paste::paste;
-use crate::admin::api::*;
-use crate::admin::error::*;
-use crate::admin::router_v1;
-use crate::admin::Authorization;
-use crate::helpers::*;
-use crate::router_macros::*;
+use garage_api_common::helpers::*;
+use garage_api_common::router_macros::*;
+
+use crate::api::*;
+use crate::error::*;
+use crate::router_v1;
+use crate::Authorization;
impl AdminApiRequest {
/// Determine which S3 endpoint a request is for using the request, and a bucket which was
diff --git a/src/api/admin/special.rs b/src/api/admin/special.rs
index da3764d9..0b26fe32 100644
--- a/src/api/admin/special.rs
+++ b/src/api/admin/special.rs
@@ -10,11 +10,12 @@ use hyper::{Response, StatusCode};
use garage_model::garage::Garage;
use garage_rpc::system::ClusterHealthStatus;
-use crate::admin::api::{CheckDomainRequest, HealthRequest, OptionsRequest};
-use crate::admin::api_server::ResBody;
-use crate::admin::error::*;
-use crate::admin::EndpointHandler;
-use crate::helpers::*;
+use garage_api_common::helpers::*;
+
+use crate::api::{CheckDomainRequest, HealthRequest, OptionsRequest};
+use crate::api_server::ResBody;
+use crate::error::*;
+use crate::EndpointHandler;
#[async_trait]
impl EndpointHandler for OptionsRequest {