From d9532dd22ce2d4d7da99e35605c55ad4997e04c2 Mon Sep 17 00:00:00 2001 From: Antoine Gersant Date: Sat, 1 Jul 2017 12:42:49 -0700 Subject: [PATCH] Moved auth() out of DB struct --- src/api.rs | 5 +++-- src/db/mod.rs | 6 ------ src/user.rs | 8 ++++++-- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/api.rs b/src/api.rs index 9cc43b7..4bf2411 100644 --- a/src/api.rs +++ b/src/api.rs @@ -18,6 +18,7 @@ use url::percent_encoding::percent_decode; use db::DB; use errors::*; use thumbnails::*; +use user; use utils::*; const CURRENT_MAJOR_VERSION: i32 = 2; @@ -149,7 +150,7 @@ impl Handler for AuthHandler { // Auth via Authorization header if let Some(auth) = req.headers.get::>() { if let Some(ref password) = auth.password { - auth_success = self.db.auth(auth.username.as_str(), password.as_str())?; + auth_success = user::auth(self.db.deref(), auth.username.as_str(), password.as_str())?; req.extensions .insert::(Session { username: auth.username.clone() }); } @@ -193,7 +194,7 @@ fn auth(request: &mut Request, db: &DB) -> IronResult { _ => return Err(Error::from(ErrorKind::MissingPassword).into()), }; } - if db.auth(username.as_str(), password.as_str())? { + if user::auth(db, username.as_str(), password.as_str())? { request .extensions .insert::(Session { username: username.clone() }); diff --git a/src/db/mod.rs b/src/db/mod.rs index e373952..e334457 100644 --- a/src/db/mod.rs +++ b/src/db/mod.rs @@ -245,12 +245,6 @@ impl DB { .filter_map(|s| self.virtualize_directory(&vfs, s)); Ok(virtual_directories.collect::>()) } - - pub fn auth(&self, username: &str, password: &str) -> Result { - let connection = self.connection.lock().unwrap(); - let connection = connection.deref(); - auth(connection, username, password) - } } impl ConnectionSource for DB { diff --git a/src/user.rs b/src/user.rs index fe3f0d8..66c42a3 100644 --- a/src/user.rs +++ b/src/user.rs @@ -1,8 +1,9 @@ +use core::ops::Deref; use diesel::prelude::*; -use diesel::sqlite::SqliteConnection; use rand; use ring::{digest, pbkdf2}; +use db::ConnectionSource; use db::users; use errors::*; @@ -60,8 +61,11 @@ impl NewUser { } } -pub fn auth(connection: &SqliteConnection, username: &str, password: &str) -> Result { +pub fn auth(db: &T, username: &str, password: &str) -> Result where T: ConnectionSource { use db::users::dsl::*; + let connection = db.get_connection(); + let connection = connection.lock().unwrap(); + let connection = connection.deref(); let user: User = users.filter(name.eq(username)).get_result(connection)?; Ok(user.verify_password(password)) }