diff options
author | Alex Auvolat <alex@adnab.me> | 2022-05-17 19:02:13 +0200 |
---|---|---|
committer | Alex Auvolat <alex@adnab.me> | 2022-05-17 19:02:13 +0200 |
commit | dcfa408887b588e9f9eee608c1358a5a81330e9e (patch) | |
tree | 168f66fe25786df731aa2bbf32d1d8f3b683bcdb /src/api/admin/key.rs | |
parent | 70383b4363c9d9d1ddebcb29c60f833022e97d24 (diff) | |
download | garage-dcfa408887b588e9f9eee608c1358a5a81330e9e.tar.gz garage-dcfa408887b588e9f9eee608c1358a5a81330e9e.zip |
Implement ImportKey
Diffstat (limited to 'src/api/admin/key.rs')
-rw-r--r-- | src/api/admin/key.rs | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/src/api/admin/key.rs b/src/api/admin/key.rs index be37088b..f30b5dbb 100644 --- a/src/api/admin/key.rs +++ b/src/api/admin/key.rs @@ -80,6 +80,31 @@ struct CreateKeyRequest { name: String, } +pub async fn handle_import_key( + garage: &Arc<Garage>, + req: Request<Body>, +) -> Result<Response<Body>, Error> { + let req = parse_json_body::<ImportKeyRequest>(req).await?; + + let prev_key = garage.key_table.get(&EmptyKey, &req.access_key_id).await?; + if prev_key.is_some() { + return Err(Error::KeyAlreadyExists(req.access_key_id.to_string())); + } + + let imported_key = Key::import(&req.access_key_id, &req.secret_access_key, &req.name); + garage.key_table.insert(&imported_key).await?; + + key_info_results(garage, imported_key).await +} + +#[derive(Deserialize)] +#[serde(rename_all = "camelCase")] +struct ImportKeyRequest { + access_key_id: String, + secret_access_key: String, + name: String, +} + pub async fn handle_update_key( garage: &Arc<Garage>, id: String, |