use bcrypt::hash;
use bcrypt::verify;
use bcrypt::DEFAULT_COST;
use uuid::Uuid;
use crate::Privacy;
use crate::Result;
#[derive(sqlx::FromRow)]
pub struct User {
pub id: Uuid,
pub username: String,
pub password: String,
pub email: Option<String>,
pub bio: Option<String>,
pub site: Option<String>,
pub privacy: Privacy,
pub admin: bool,
}
impl User {
pub fn new(username: String, password: String) -> Result<Self> {
let password_hash = hash(password, DEFAULT_COST)?;
let id = Uuid::new_v4();
Ok(Self {
id,
username,
password: password_hash,
email: None,
bio: None,
site: None,
privacy: Privacy::Public,
admin: true,
})
}
pub fn verify_password(&self, password: &str) -> Result<bool> {
Ok(verify(password, &self.password)?)
}
}