mirror of
https://github.com/deuxfleurs-org/garage.git
synced 2026-08-08 13:53:13 +00:00
admin api: update semantics of some endpoints, and update doc
This commit is contained in:
@@ -500,8 +500,9 @@ pub struct BucketDenyKeyResponse(pub GetBucketInfoResponse);
|
||||
|
||||
// ---- GlobalAliasBucket ----
|
||||
|
||||
#[derive(Deserialize)]
|
||||
pub struct GlobalAliasBucketRequest {
|
||||
pub id: String,
|
||||
pub bucket_id: String,
|
||||
pub alias: String,
|
||||
}
|
||||
|
||||
@@ -510,8 +511,9 @@ pub struct GlobalAliasBucketResponse(pub GetBucketInfoResponse);
|
||||
|
||||
// ---- GlobalUnaliasBucket ----
|
||||
|
||||
#[derive(Deserialize)]
|
||||
pub struct GlobalUnaliasBucketRequest {
|
||||
pub id: String,
|
||||
pub bucket_id: String,
|
||||
pub alias: String,
|
||||
}
|
||||
|
||||
@@ -520,8 +522,9 @@ pub struct GlobalUnaliasBucketResponse(pub GetBucketInfoResponse);
|
||||
|
||||
// ---- LocalAliasBucket ----
|
||||
|
||||
#[derive(Deserialize)]
|
||||
pub struct LocalAliasBucketRequest {
|
||||
pub id: String,
|
||||
pub bucket_id: String,
|
||||
pub access_key_id: String,
|
||||
pub alias: String,
|
||||
}
|
||||
@@ -531,8 +534,9 @@ pub struct LocalAliasBucketResponse(pub GetBucketInfoResponse);
|
||||
|
||||
// ---- LocalUnaliasBucket ----
|
||||
|
||||
#[derive(Deserialize)]
|
||||
pub struct LocalUnaliasBucketRequest {
|
||||
pub id: String,
|
||||
pub bucket_id: String,
|
||||
pub access_key_id: String,
|
||||
pub alias: String,
|
||||
}
|
||||
|
||||
@@ -39,7 +39,7 @@ pub struct AdminApiServer {
|
||||
admin_token: Option<String>,
|
||||
}
|
||||
|
||||
enum Endpoint {
|
||||
pub enum Endpoint {
|
||||
Old(router_v1::Endpoint),
|
||||
New(String),
|
||||
}
|
||||
@@ -159,7 +159,7 @@ impl ApiHandler for AdminApiServer {
|
||||
AdminApiRequest::Options(req) => req.handle(&self.garage).await,
|
||||
AdminApiRequest::CheckDomain(req) => req.handle(&self.garage).await,
|
||||
AdminApiRequest::Health(req) => req.handle(&self.garage).await,
|
||||
AdminApiRequest::Metrics(req) => self.handle_metrics(),
|
||||
AdminApiRequest::Metrics(_req) => self.handle_metrics(),
|
||||
req => {
|
||||
let res = req.handle(&self.garage).await?;
|
||||
json_ok_response(&res)
|
||||
|
||||
@@ -457,7 +457,7 @@ impl EndpointHandler for GlobalAliasBucketRequest {
|
||||
type Response = GlobalAliasBucketResponse;
|
||||
|
||||
async fn handle(self, garage: &Arc<Garage>) -> Result<GlobalAliasBucketResponse, Error> {
|
||||
let bucket_id = parse_bucket_id(&self.id)?;
|
||||
let bucket_id = parse_bucket_id(&self.bucket_id)?;
|
||||
|
||||
let helper = garage.locked_helper().await;
|
||||
|
||||
@@ -476,7 +476,7 @@ impl EndpointHandler for GlobalUnaliasBucketRequest {
|
||||
type Response = GlobalUnaliasBucketResponse;
|
||||
|
||||
async fn handle(self, garage: &Arc<Garage>) -> Result<GlobalUnaliasBucketResponse, Error> {
|
||||
let bucket_id = parse_bucket_id(&self.id)?;
|
||||
let bucket_id = parse_bucket_id(&self.bucket_id)?;
|
||||
|
||||
let helper = garage.locked_helper().await;
|
||||
|
||||
@@ -495,7 +495,7 @@ impl EndpointHandler for LocalAliasBucketRequest {
|
||||
type Response = LocalAliasBucketResponse;
|
||||
|
||||
async fn handle(self, garage: &Arc<Garage>) -> Result<LocalAliasBucketResponse, Error> {
|
||||
let bucket_id = parse_bucket_id(&self.id)?;
|
||||
let bucket_id = parse_bucket_id(&self.bucket_id)?;
|
||||
|
||||
let helper = garage.locked_helper().await;
|
||||
|
||||
@@ -514,7 +514,7 @@ impl EndpointHandler for LocalUnaliasBucketRequest {
|
||||
type Response = LocalUnaliasBucketResponse;
|
||||
|
||||
async fn handle(self, garage: &Arc<Garage>) -> Result<LocalUnaliasBucketResponse, Error> {
|
||||
let bucket_id = parse_bucket_id(&self.id)?;
|
||||
let bucket_id = parse_bucket_id(&self.bucket_id)?;
|
||||
|
||||
let helper = garage.locked_helper().await;
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ macro_rules! admin_endpoints {
|
||||
}
|
||||
|
||||
impl AdminApiRequest {
|
||||
fn name(&self) -> &'static str {
|
||||
pub fn name(&self) -> &'static str {
|
||||
match self {
|
||||
$(
|
||||
Self::$special_endpoint(_) => stringify!($special_endpoint),
|
||||
|
||||
+29
-15
@@ -43,22 +43,22 @@ impl AdminApiRequest {
|
||||
POST UpdateKey (body_field, query::id),
|
||||
POST CreateKey (body),
|
||||
POST ImportKey (body),
|
||||
DELETE DeleteKey (query::id),
|
||||
POST DeleteKey (query::id),
|
||||
GET ListKeys (),
|
||||
// Bucket endpoints
|
||||
GET GetBucketInfo (query_opt::id, query_opt::global_alias),
|
||||
GET ListBuckets (),
|
||||
POST CreateBucket (body),
|
||||
DELETE DeleteBucket (query::id),
|
||||
PUT UpdateBucket (body_field, query::id),
|
||||
POST DeleteBucket (query::id),
|
||||
POST UpdateBucket (body_field, query::id),
|
||||
// Bucket-key permissions
|
||||
POST BucketAllowKey (body),
|
||||
POST BucketDenyKey (body),
|
||||
// Bucket aliases
|
||||
PUT GlobalAliasBucket (query::id, query::alias),
|
||||
DELETE GlobalUnaliasBucket (query::id, query::alias),
|
||||
PUT LocalAliasBucket (query::id, query::access_key_id, query::alias),
|
||||
DELETE LocalUnaliasBucket (query::id, query::access_key_id, query::alias),
|
||||
POST GlobalAliasBucket (body),
|
||||
POST GlobalUnaliasBucket (body),
|
||||
POST LocalAliasBucket (body),
|
||||
POST LocalUnaliasBucket (body),
|
||||
]);
|
||||
|
||||
if let Some(message) = query.nonempty_message() {
|
||||
@@ -131,7 +131,11 @@ impl AdminApiRequest {
|
||||
let body = parse_json_body::<UpdateKeyRequestBody, _, Error>(req).await?;
|
||||
Ok(AdminApiRequest::UpdateKey(UpdateKeyRequest { id, body }))
|
||||
}
|
||||
Endpoint::DeleteKey { id } => Ok(AdminApiRequest::DeleteKey(DeleteKeyRequest { id })),
|
||||
|
||||
// DeleteKey semantics changed:
|
||||
// - in v1/ : HTTP DELETE => HTTP 204 No Content
|
||||
// - in v2/ : HTTP POST => HTTP 200 Ok
|
||||
// Endpoint::DeleteKey { id } => Ok(AdminApiRequest::DeleteKey(DeleteKeyRequest { id })),
|
||||
|
||||
// Buckets
|
||||
Endpoint::ListBuckets => Ok(AdminApiRequest::ListBuckets(ListBucketsRequest)),
|
||||
@@ -145,9 +149,13 @@ impl AdminApiRequest {
|
||||
let req = parse_json_body::<CreateBucketRequest, _, Error>(req).await?;
|
||||
Ok(AdminApiRequest::CreateBucket(req))
|
||||
}
|
||||
Endpoint::DeleteBucket { id } => {
|
||||
Ok(AdminApiRequest::DeleteBucket(DeleteBucketRequest { id }))
|
||||
}
|
||||
|
||||
// DeleteBucket semantics changed::
|
||||
// - in v1/ : HTTP DELETE => HTTP 204 No Content
|
||||
// - in v2/ : HTTP POST => HTTP 200 Ok
|
||||
// Endpoint::DeleteBucket { id } => {
|
||||
// Ok(AdminApiRequest::DeleteBucket(DeleteBucketRequest { id }))
|
||||
// }
|
||||
Endpoint::UpdateBucket { id } => {
|
||||
let body = parse_json_body::<UpdateBucketRequestBody, _, Error>(req).await?;
|
||||
Ok(AdminApiRequest::UpdateBucket(UpdateBucketRequest {
|
||||
@@ -167,10 +175,16 @@ impl AdminApiRequest {
|
||||
}
|
||||
// Bucket aliasing
|
||||
Endpoint::GlobalAliasBucket { id, alias } => Ok(AdminApiRequest::GlobalAliasBucket(
|
||||
GlobalAliasBucketRequest { id, alias },
|
||||
GlobalAliasBucketRequest {
|
||||
bucket_id: id,
|
||||
alias,
|
||||
},
|
||||
)),
|
||||
Endpoint::GlobalUnaliasBucket { id, alias } => Ok(
|
||||
AdminApiRequest::GlobalUnaliasBucket(GlobalUnaliasBucketRequest { id, alias }),
|
||||
AdminApiRequest::GlobalUnaliasBucket(GlobalUnaliasBucketRequest {
|
||||
bucket_id: id,
|
||||
alias,
|
||||
}),
|
||||
),
|
||||
Endpoint::LocalAliasBucket {
|
||||
id,
|
||||
@@ -178,7 +192,7 @@ impl AdminApiRequest {
|
||||
alias,
|
||||
} => Ok(AdminApiRequest::LocalAliasBucket(LocalAliasBucketRequest {
|
||||
access_key_id,
|
||||
id,
|
||||
bucket_id: id,
|
||||
alias,
|
||||
})),
|
||||
Endpoint::LocalUnaliasBucket {
|
||||
@@ -188,7 +202,7 @@ impl AdminApiRequest {
|
||||
} => Ok(AdminApiRequest::LocalUnaliasBucket(
|
||||
LocalUnaliasBucketRequest {
|
||||
access_key_id,
|
||||
id,
|
||||
bucket_id: id,
|
||||
alias,
|
||||
},
|
||||
)),
|
||||
|
||||
Reference in New Issue
Block a user