diff options
author | curly <curly@infernal.garden> | 2024-07-17 17:23:32 -0600 |
---|---|---|
committer | curly <curly@infernal.garden> | 2024-07-17 17:23:32 -0600 |
commit | 5c95f38610c61f43700b3e78dcb56c552d152c2b (patch) | |
tree | 8f180173da663cbaebafec70659e1c3c32b71c53 /src | |
parent | d8f80c973159813a5937395a0f53c042b0c738c2 (diff) | |
download | poko_server-5c95f38610c61f43700b3e78dcb56c552d152c2b.tar.gz poko_server-5c95f38610c61f43700b3e78dcb56c552d152c2b.tar.bz2 poko_server-5c95f38610c61f43700b3e78dcb56c552d152c2b.zip |
del and list registration keys for admin
Diffstat (limited to 'src')
-rw-r--r-- | src/db.rs | 34 | ||||
-rw-r--r-- | src/main.rs | 24 |
2 files changed, 46 insertions, 12 deletions
@@ -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<Vec<String>, 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<User, String> { 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<RegisterForm>, db: &State<Mutex<DB>>) -> (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<NewRegistrationKeyForm>, db: &State<Mut } } -#[post("/regkey/list", data="<data>", format="json")] -async fn list_registration_keys(data: Json<LogoutForm>, db: &State<Mutex<DB>>) -> (Status, Result<(), Json<String>>) { - (Status::NotFound, Err("NOT IMPLEMENTED".to_string().into())) -} - #[post("/regkey/del", data="<data>", format="json")] async fn del_registration_key(data: Json<NewRegistrationKeyForm>, db: &State<Mutex<DB>>) -> (Status, Result<(), Json<String>>) { - (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="<data>", format="json")] +async fn list_registration_keys(data: Json<LogoutForm>, db: &State<Mutex<DB>>) -> (Status, Result<Json<Vec<String>>, Json<String>>) { + 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 { |