aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCurly Bryce <curlybryce@protonmail.com>2024-07-03 16:01:18 -0600
committerCurly Bryce <curlybryce@protonmail.com>2024-07-03 16:01:18 -0600
commit2ae652d150c451ec921eb08821a3f8d158297433 (patch)
tree140934960f7bff0ac2533a5b9e9cf57d54f51a86 /src
parent723ea13a55af719a920b445d9c8cda0c2545c682 (diff)
downloadpoko_server-2ae652d150c451ec921eb08821a3f8d158297433.tar.gz
poko_server-2ae652d150c451ec921eb08821a3f8d158297433.tar.bz2
poko_server-2ae652d150c451ec921eb08821a3f8d158297433.zip
delete users
Diffstat (limited to 'src')
-rw-r--r--src/db.rs21
-rw-r--r--src/main.rs20
-rw-r--r--src/uid.rs4
3 files changed, 40 insertions, 5 deletions
diff --git a/src/db.rs b/src/db.rs
index a609fe5..28b1ec7 100644
--- a/src/db.rs
+++ b/src/db.rs
@@ -281,4 +281,25 @@ impl DB {
let _ = self.save().await;
r
}
+
+ pub async fn delete_user(&mut self, id: &String, session: &String) -> Result<String, String> {
+ match UID::from(id.clone()) {
+ Ok(n) => {
+ self.users = self.users.clone().into_iter().filter(|u| !u.authenticate(session) && n != u.id).collect();
+ self.uid_generator.delete_uid(n);
+ },
+ Err(n) => return Err(n)
+ };
+
+ // Validate
+ let r = match self.get_user(id).await {
+ Ok(_) => Err("Could not delete".into()),
+ Err(_) => {
+ Ok("Deleted".into())
+ },
+ };
+
+ let _ = self.save().await;
+ r
+ }
}
diff --git a/src/main.rs b/src/main.rs
index 22c096d..c48ceda 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -130,12 +130,12 @@ async fn login(data: Json<LoginForm>, db: &State<Mutex<DB>>) -> (Status, Json<St
#[derive(Deserialize)]
struct LogoutForm {
id: String,
- sessionhash: String,
+ session: String,
}
#[post("/logout", data="<data>", format="json")]
async fn logout(data: Json<LogoutForm>, db: &State<Mutex<DB>>) -> (Status, Result<(), Json<String>>) {
let mut db = db.lock().await;
- match db.logout(&data.id, &data.sessionhash).await {
+ match db.logout(&data.id, &data.session).await {
Ok(_) => (Status::Ok, Ok(())),
Err(n) => (Status::Unauthorized, Err(n.into())),
}
@@ -143,7 +143,7 @@ async fn logout(data: Json<LogoutForm>, db: &State<Mutex<DB>>) -> (Status, Resul
#[post("/logout/all", data="<data>", format="json")]
async fn logout_all(data: Json<LogoutForm>, db: &State<Mutex<DB>>) -> (Status, Result<Json<String>, Json<String>>) {
let mut db = db.lock().await;
- match db.logout_all(&data.id, &data.sessionhash).await {
+ match db.logout_all(&data.id, &data.session).await {
Ok(n) => (Status::Ok, Ok(n.into())),
Err(n) => (Status::Unauthorized, Err(n.into())),
}
@@ -151,7 +151,16 @@ async fn logout_all(data: Json<LogoutForm>, db: &State<Mutex<DB>>) -> (Status, R
#[post("/sessions", data="<data>", format="json")]
async fn get_sessions(data: Json<LogoutForm>, db: &State<Mutex<DB>>) -> (Status, Result<Json<Vec<(String, String)>>, Json<String>>) {
let db = db.lock().await;
- match db.get_sessions(&data.id, &data.sessionhash).await {
+ match db.get_sessions(&data.id, &data.session).await {
+ Ok(n) => (Status::Ok, Ok(n.into())),
+ Err(n) => (Status::Unauthorized, Err(n.into())),
+ }
+}
+
+#[post("/delete", data="<data>", format="json")]
+async fn delete(data: Json<LogoutForm>, db: &State<Mutex<DB>>) -> (Status, Result<Json<String>, Json<String>>) {
+ let mut db = db.lock().await;
+ match db.delete_user(&data.id, &data.session).await {
Ok(n) => (Status::Ok, Ok(n.into())),
Err(n) => (Status::Unauthorized, Err(n.into())),
}
@@ -161,5 +170,6 @@ async fn get_sessions(data: Json<LogoutForm>, db: &State<Mutex<DB>>) -> (Status,
fn rocket() -> _ {
rocket::build().manage(Mutex::new(DB::load(Config::new())))
.mount("/", routes![index])
- .mount("/user", routes![login, get_users_by_name, get_user, new_user, get_all_users, logout, logout_all, get_sessions])
+ .mount("/user", routes![login, get_users_by_name, get_user, new_user, get_all_users, logout, logout_all, get_sessions, delete])
+ .mount("/transfer", routes![])
} \ No newline at end of file
diff --git a/src/uid.rs b/src/uid.rs
index fed0af0..886b9c8 100644
--- a/src/uid.rs
+++ b/src/uid.rs
@@ -51,6 +51,10 @@ impl Generator {
}
}
+ pub fn delete_uid(&mut self, u: UID) {
+ self.used_uids = self.used_uids.clone().into_iter().filter(|old| old != &u).collect();
+ }
+
pub fn new_uid(&mut self) -> Result<UID, String> {
let mut count = 0;
loop {