1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
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)?)
}
}
|