30 lines
763 B
Rust
30 lines
763 B
Rust
use color_eyre::Result;
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
use crate::utils::middleware::DbConn;
|
|
|
|
#[derive(Debug, Clone, Deserialize, Serialize)]
|
|
pub struct User {
|
|
pub id: i64,
|
|
pub name: String,
|
|
/// I hate this. It's stored in plaintext. Why?
|
|
password: String,
|
|
pub is_admin: bool,
|
|
}
|
|
|
|
impl User {
|
|
pub fn verify(&self, hashed_password: &str, salt: &str) -> bool {
|
|
let ours = md5::compute(format!("{}{}", self.password, salt));
|
|
let ours = format!("{ours:x}");
|
|
|
|
ours == hashed_password
|
|
}
|
|
}
|
|
|
|
pub async fn get_user(conn: DbConn, name: &str) -> Result<Option<User>> {
|
|
let user = sqlx::query_as!(User, "SELECT * FROM users WHERE name = $1", name)
|
|
.fetch_optional(&*conn)
|
|
.await?;
|
|
|
|
Ok(user)
|
|
}
|