Forward the keys update to zookeeper

This commit is contained in:
Tamo 2023-08-03 10:22:34 +02:00
parent b0ff595f60
commit 0cd81573b4
2 changed files with 13 additions and 12 deletions

View File

@ -116,7 +116,7 @@ impl AuthController {
Ok(key) Ok(key)
} }
pub fn update_key(&self, uid: Uuid, patch: PatchApiKey) -> Result<Key> { pub async fn update_key(&self, uid: Uuid, patch: PatchApiKey) -> Result<Key> {
let mut key = self.get_key(uid)?; let mut key = self.get_key(uid)?;
match patch.description { match patch.description {
Setting::NotSet => (), Setting::NotSet => (),
@ -127,7 +127,14 @@ impl AuthController {
name => key.name = name.set(), name => key.name = name.set(),
}; };
key.updated_at = OffsetDateTime::now_utc(); key.updated_at = OffsetDateTime::now_utc();
self.store.put_api_key(key) let store = self.store.clone();
// TODO: we may commit only after zk persisted the keys
let key = tokio::task::spawn_blocking(move || store.put_api_key(key)).await??;
if let Some(ref zk) = self.zk {
zk.set_data(&format!("/auth/{}", key.uid), &serde_json::to_vec_pretty(&key)?, None)
.await?;
}
Ok(key)
} }
pub fn get_key(&self, uid: Uuid) -> Result<Key> { pub fn get_key(&self, uid: Uuid) -> Result<Key> {

View File

@ -106,17 +106,11 @@ pub async fn patch_api_key(
) -> Result<HttpResponse, ResponseError> { ) -> Result<HttpResponse, ResponseError> {
let key = path.into_inner().key; let key = path.into_inner().key;
let patch_api_key = body.into_inner(); let patch_api_key = body.into_inner();
let res = tokio::task::spawn_blocking(move || -> Result<_, AuthControllerError> { let uid = Uuid::parse_str(&key).or_else(|_| auth_controller.get_uid_from_encoded_key(&key))?;
let uid = let key = auth_controller.update_key(uid, patch_api_key).await?;
Uuid::parse_str(&key).or_else(|_| auth_controller.get_uid_from_encoded_key(&key))?; let key = KeyView::from_key(key, &auth_controller);
let key = auth_controller.update_key(uid, patch_api_key)?;
Ok(KeyView::from_key(key, &auth_controller)) Ok(HttpResponse::Ok().json(key))
})
.await
.map_err(|e| ResponseError::from_msg(e.to_string(), Code::Internal))??;
Ok(HttpResponse::Ok().json(res))
} }
pub async fn delete_api_key( pub async fn delete_api_key(