diff --git a/src/api.rs b/src/api.rs index 80ddf2a..a6779b4 100644 --- a/src/api.rs +++ b/src/api.rs @@ -1,9 +1,4 @@ -use std::fs; -use std::io; -use std::path::*; -use std::ops::Deref; -use std::sync::Arc; - +use diesel::prelude::*; use iron::prelude::*; use iron::headers::{Authorization, Basic}; use iron::{AroundMiddleware, Handler, status}; @@ -12,10 +7,17 @@ use params; use secure_session::middleware::{SessionMiddleware, SessionConfig}; use secure_session::session::{SessionManager, ChaCha20Poly1305SessionManager}; use serde_json; +use std::fs; +use std::io; +use std::path::*; +use std::ops::Deref; +use std::sync::Arc; use typemap; use url::percent_encoding::percent_decode; -use db::DB; +use config::MiscSettings; +use db::{ConnectionSource, DB}; +use db::misc_settings; use errors::*; use thumbnails::*; use index; @@ -52,11 +54,22 @@ impl typemap::Key for SessionKey { type Value = Session; } +fn get_auth_secret(db: &T) -> Result + where T: ConnectionSource +{ + use self::misc_settings::dsl::*; + let connection = db.get_connection(); + let connection = connection.lock().unwrap(); + let connection = connection.deref(); + let misc: MiscSettings = misc_settings.get_result(connection)?; + Ok(misc.auth_secret.to_owned()) +} + pub fn get_handler(db: Arc) -> Result { let api_handler = get_endpoints(db.clone()); let mut api_chain = Chain::new(api_handler); - let auth_secret = db.deref().get_auth_secret()?; + let auth_secret = get_auth_secret(db.deref())?; let session_manager = ChaCha20Poly1305SessionManager::::from_password(auth_secret.as_bytes()); let session_config = SessionConfig::default(); diff --git a/src/config.rs b/src/config.rs index de74450..fb9c7d1 100644 --- a/src/config.rs +++ b/src/config.rs @@ -59,23 +59,29 @@ pub fn parse(path: &path::Path) -> Result { Ok(config) } -fn reset(db: &T) -> Result<()> where T:ConnectionSource { +fn reset(db: &T) -> Result<()> + where T: ConnectionSource +{ let connection = db.get_connection(); let connection = connection.lock().unwrap(); let connection = connection.deref(); diesel::delete(mount_points::table).execute(connection)?; diesel::delete(users::table).execute(connection)?; - + Ok(()) } -pub fn overwrite(db: &T, new_config: &UserConfig) -> Result<()> where T:ConnectionSource { +pub fn overwrite(db: &T, new_config: &UserConfig) -> Result<()> + where T: ConnectionSource +{ reset(db)?; ammend(db, new_config) } -pub fn ammend(db: &T, new_config: &UserConfig) -> Result<()> where T:ConnectionSource { +pub fn ammend(db: &T, new_config: &UserConfig) -> Result<()> + where T: ConnectionSource +{ let connection = db.get_connection(); let connection = connection.lock().unwrap(); let connection = connection.deref(); diff --git a/src/db/mod.rs b/src/db/mod.rs index c73518d..5d18a7f 100644 --- a/src/db/mod.rs +++ b/src/db/mod.rs @@ -6,7 +6,6 @@ use std::fs; use std::path::{Path, PathBuf}; use std::sync::{Arc, Mutex}; -use config::MiscSettings; use errors::*; mod schema; @@ -64,13 +63,6 @@ impl DB { embedded_migrations::run(connection)?; Ok(()) } - - pub fn get_auth_secret(&self) -> Result { - let connection = self.connection.lock().unwrap(); - let connection = connection.deref(); - let misc: MiscSettings = misc_settings::table.get_result(connection)?; - Ok(misc.auth_secret.to_owned()) - } } impl ConnectionSource for DB {