summaryrefslogtreecommitdiff
path: root/src/db.rs
diff options
context:
space:
mode:
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)
+ }
+}