diff options
author | Kjetil Orbekk <kjetil.orbekk@gmail.com> | 2020-01-29 20:45:21 -0500 |
---|---|---|
committer | Kjetil Orbekk <kjetil.orbekk@gmail.com> | 2020-01-29 20:45:21 -0500 |
commit | cbf64a8a5c7d748722369a2ec47c1230650d7b88 (patch) | |
tree | ddb11ce3d1035aeb69fbe47dcda35e8a3876c1f3 /src/db.rs | |
parent | c8db39dea2cf50dd1fa6c499600e09818b8db44a (diff) |
authentication
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) + } +} |