diff options
Diffstat (limited to 'src/db.rs')
-rw-r--r-- | src/db.rs | 30 |
1 files changed, 25 insertions, 5 deletions
@@ -1,12 +1,13 @@ -use crate::models; use crate::error::Error; +use crate::models; +use base64; use diesel::connection::Connection; use diesel::pg::PgConnection; +use diesel::ExpressionMethods; +use diesel::QueryDsl; use diesel::RunQueryDsl; -use rand::Rng; use rand; -use base64; -use bcrypt; +use rand::Rng; pub const COST: u32 = 12; @@ -28,9 +29,28 @@ pub fn adduser(conn: &PgConnection, username: &str, password: &str) -> Result<() let hashed = bcrypt::hash(password, COST)?; let rows = diesel::insert_into(users::table) - .values(models::User::new(username, &hashed)).execute(conn)?; + .values(models::User::new(username, &hashed)) + .execute(conn)?; if rows != 1 { Err(Error::AlreadyExists)?; } Ok(()) } + +pub fn authenticate( + conn: &PgConnection, + username: &str, + password: &str, +) -> Result<models::User, Error> { + use crate::schema::users; + + let user: models::User = users::table + .filter(users::username.eq(username)) + .get_result(conn)?; + + if user.verify(password)? { + Ok(user) + } else { + Err(Error::NotFound) + } +} |