summaryrefslogtreecommitdiff
path: root/src/db.rs
diff options
context:
space:
mode:
authorKjetil Orbekk <kjetil.orbekk@gmail.com>2020-01-29 20:45:21 -0500
committerKjetil Orbekk <kjetil.orbekk@gmail.com>2020-01-29 20:45:21 -0500
commitcbf64a8a5c7d748722369a2ec47c1230650d7b88 (patch)
treeddb11ce3d1035aeb69fbe47dcda35e8a3876c1f3 /src/db.rs
parentc8db39dea2cf50dd1fa6c499600e09818b8db44a (diff)
authentication
Diffstat (limited to 'src/db.rs')
-rw-r--r--src/db.rs30
1 files changed, 25 insertions, 5 deletions
diff --git a/src/db.rs b/src/db.rs
index 71490d8..6014db9 100644
--- a/src/db.rs
+++ b/src/db.rs
@@ -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)
+ }
+}