From 5c95f38610c61f43700b3e78dcb56c552d152c2b Mon Sep 17 00:00:00 2001 From: curly Date: Wed, 17 Jul 2024 17:23:32 -0600 Subject: del and list registration keys for admin --- src/db.rs | 34 +++++++++++++++++++++++++++++----- src/main.rs | 24 +++++++++++++++++------- 2 files changed, 46 insertions(+), 12 deletions(-) (limited to 'src') diff --git a/src/db.rs b/src/db.rs index b173f2d..2e81393 100644 --- a/src/db.rs +++ b/src/db.rs @@ -298,19 +298,43 @@ impl DB { result } - pub fn add_key(&mut self, key: &String) { - self.registration_keys.push(key.clone()) + fn add_key(&mut self, key: &String) -> Result<(), String> { + if self.registration_keys.contains(key) { + Err("Key already exists".into()) + } else { + self.registration_keys.push(key.clone()); + Ok(()) + } } pub async fn new_registration_key(&mut self, id: UID, session: &String, key: &String) -> Result<(), String> { let u = self.get_user_authenticated(id, session).await?; - if u.is_admin { - self.add_key(key); + if u.is_admin() { + self.add_key(key)?; + self.save().await + } else { + Err("Not an admin".into()) + } + } + + pub async fn del_registration_key(&mut self, id: UID, session: &String, key: &String) -> Result<(), String> { + let u = self.get_user_authenticated(id, session).await?; + if u.is_admin() { + self.use_key(key).await?; self.save().await } else { Err("Not an admin".into()) } } + + pub async fn list_registration_keys(&self, id: UID, session: &String) -> Result, String> { + let u = self.get_user_authenticated(id, session).await?; + if u.is_admin() { + Ok(self.registration_keys.clone()) + } else { + Err("Not an admin".into()) + } + } pub async fn new_user(&mut self, name: String, password: String, id: UID, key: &String) -> Result { if self.use_key(key).await.is_ok() { @@ -324,7 +348,7 @@ impl DB { match self.save().await { Ok(_) => Ok(user), Err(n) => { - self.add_key(key); + self.add_key(key)?; Err(n) }, } diff --git a/src/main.rs b/src/main.rs index 81b416c..3ad9efd 100644 --- a/src/main.rs +++ b/src/main.rs @@ -125,7 +125,10 @@ async fn new_user(data: Json, db: &State>) -> (Status, R // User has been created Ok(u) => return (Status::Created, Ok(Json(u.into()))), // Could not create user - Err(n) => return (Status::InternalServerError, Err(n.into())), + Err(e) => { + db.uid_generator.delete_uid(n); + return (Status::InternalServerError, Err(e.into())) + }, } } } @@ -239,16 +242,23 @@ async fn new_registration_key(data: Json, db: &State, db: &State>) -> (Status, Result<(), Json>) { - (Status::NotFound, Err("NOT IMPLEMENTED".to_string().into())) -} - #[post("/regkey/del", data="", format="json")] async fn del_registration_key(data: Json, db: &State>) -> (Status, Result<(), Json>) { - (Status::NotFound, Err("NOT IMPLEMENTED".to_string().into())) + let mut db = db.lock().await; + match db.del_registration_key(data.id, &data.session, &data.key).await { + Ok(_) => (Status::Ok, Ok(())), + Err(n) => (Status::InternalServerError, Err(n.into())) + } } +#[post("/regkey/list", data="", format="json")] +async fn list_registration_keys(data: Json, db: &State>) -> (Status, Result>, Json>) { + let db = db.lock().await; + match db.list_registration_keys(data.id, &data.session).await { + Ok(n) => (Status::Ok, Ok(n.into())), + Err(n) => (Status::InternalServerError, Err(n.into())), + } +} #[derive(Deserialize, Debug)] struct TransferForm { -- cgit v1.2.3