summaryrefslogtreecommitdiff
path: root/src/db.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/db.rs')
-rw-r--r--src/db.rs35
1 files changed, 20 insertions, 15 deletions
diff --git a/src/db.rs b/src/db.rs
index 3f94ff2..077c165 100644
--- a/src/db.rs
+++ b/src/db.rs
@@ -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)
}