diff options
Diffstat (limited to 'src/db.rs')
-rw-r--r-- | src/db.rs | 35 |
1 files changed, 20 insertions, 15 deletions
@@ -1,8 +1,9 @@ use crate::error::Error; use crate::models; -use diesel::dsl::select; -use diesel::dsl::exists; +use bcrypt; use diesel::connection::Connection; +use diesel::dsl::exists; +use diesel::dsl::select; use diesel::pg::PgConnection; use diesel::ExpressionMethods; use diesel::QueryDsl; @@ -25,7 +26,8 @@ pub fn create_config(conn: &PgConnection, config: &models::Config) -> Result<(), pub fn get_config(conn: &PgConnection) -> Result<models::Config, Error> { use crate::schema::config; - config::table.get_result::<models::Config>(conn) + config::table + .get_result::<models::Config>(conn) .map_err(From::from) } @@ -34,7 +36,10 @@ 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)) + .values(models::NewUser { + username, + password: &hashed, + }) .execute(conn)?; if rows != 1 { Err(Error::AlreadyExists)?; @@ -45,28 +50,28 @@ pub fn adduser(conn: &PgConnection, username: &str, password: &str) -> Result<() pub fn authenticate( conn: &PgConnection, username: &str, - password: &str, + typed_password: &str, ) -> Result<models::User, Error> { use crate::schema::users; - let user: models::User = users::table + let mut user = users::table .filter(users::username.eq(username)) - .get_result(conn)?; + .get_result::<models::User>(conn)?; - if user.verify(password)? { + if bcrypt::verify(typed_password, &user.password)? { + user.password = "".to_string(); Ok(user) } else { Err(Error::NotFound) } } -pub fn user_exists( - conn: &PgConnection, - username: &str) -> Result<bool, Error> { +pub fn get_user(conn: &PgConnection, username: &str) -> Result<models::User, Error> { use crate::schema::users; - let result = select(exists(users::table.filter(users::username.eq(username)))) - .get_result(conn) - .map_err(|err| err)?; - Ok(result) + let mut user = users::table + .filter(users::username.eq(username)) + .get_result::<models::User>(conn)?; + user.password = "".to_string(); + Ok(user) } |