allow 'deletion' of user

This commit is contained in:
2023-04-28 19:29:20 +02:00
parent c5741e8139
commit 055c330a3e
5 changed files with 36 additions and 6 deletions

View File

@ -18,6 +18,7 @@ pub struct User {
pub is_cox: bool,
is_admin: bool,
is_guest: bool,
deleted: bool,
}
#[derive(Debug)]
@ -34,7 +35,7 @@ impl User {
sqlx::query_as!(
User,
"
SELECT id, name, pw, is_cox, is_admin, is_guest
SELECT id, name, pw, is_cox, is_admin, is_guest, deleted
FROM user
WHERE id like ?
",
@ -49,7 +50,7 @@ WHERE id like ?
sqlx::query_as!(
User,
"
SELECT id, name, pw, is_cox, is_admin, is_guest
SELECT id, name, pw, is_cox, is_admin, is_guest, deleted
FROM user
WHERE name like ?
",
@ -64,8 +65,9 @@ WHERE name like ?
sqlx::query_as!(
User,
"
SELECT id, name, pw, is_cox, is_admin, is_guest
SELECT id, name, pw, is_cox, is_admin, is_guest, deleted
FROM user
WHERE deleted = 0
ORDER BY name
"
)
@ -103,6 +105,11 @@ ORDER BY name
return Err(LoginError::InvalidAuthenticationCombo); // Username not found
};
if user.deleted {
return Err(LoginError::InvalidAuthenticationCombo); //User existed sometime ago; has
//been deleted
}
match user.pw.clone() {
Some(user_pw) => {
let password_hash = Self::get_hashed_pw(&pw);
@ -139,6 +146,13 @@ ORDER BY name
.unwrap()
.to_string()
}
pub async fn delete(&self, db: &SqlitePool) {
sqlx::query!("UPDATE user SET deleted=1 WHERE id=?", self.id)
.execute(db)
.await
.unwrap(); //Okay, because we can only create a User of a valid id
}
}
#[async_trait]