Pour tout problème contactez-nous par mail : support@froggit.fr | La FAQ :grey_question: | Rejoignez-nous sur le Chat :speech_balloon:

Skip to content
Snippets Groups Projects
Commit cf7e559d authored by Pierre Jarriges's avatar Pierre Jarriges
Browse files

appstate builder

parent 7aac0083
No related branches found
No related tags found
No related merge requests found
......@@ -33,21 +33,8 @@ impl AppConfig {
.unwrap()
.to_string();
let context = match app_args.context.as_str() {
"prod" => AppContext::Production,
_ => AppContext::Debug,
};
let storage_dir = match &app_args.app_storage_root {
Some(dir) => dir.join(&exec_name),
None => match context {
AppContext::Production => PathBuf::from("/var").join(&exec_name),
AppContext::Debug => dirs::home_dir()
.expect("Unable to get home dir")
.join(&exec_name),
},
};
let context = Self::get_context(&app_args);
let storage_dir = Self::get_storage_dir(&app_args, &exec_name, &context).unwrap();
let ssl_certs_dir = app_args.ssl_certs_dir.join(&app_args.host);
AppConfig {
......@@ -65,6 +52,34 @@ impl AppConfig {
admin_cookie_name: app_args.admin_cookie_name,
}
}
fn get_storage_dir(
app_args: &AppArgs,
exec_name: &String,
context: &AppContext,
) -> Result<PathBuf, String> {
match &app_args.app_storage_root {
Some(dir) => Ok(dir.join(&exec_name)),
None => match context {
AppContext::Production => Ok(PathBuf::from("/var").join(&exec_name)),
AppContext::Debug => {
let home_dir = dirs::home_dir();
if home_dir.is_none() {
return Err(String::from("Unable to get home dir"));
}
Ok(home_dir.unwrap().join(&exec_name))
}
},
}
}
fn get_context(app_args: &AppArgs) -> AppContext {
match app_args.context.as_str() {
"prod" => AppContext::Production,
_ => AppContext::Debug,
}
}
pub fn get_log_level(&self) -> String {
match self.context {
AppContext::Debug => "debug".to_string(),
......
mod args;
mod config;
mod preferences;
mod state;
pub use args::*;
pub use config::*;
pub use preferences::*;
pub use state::*;
#[derive(Clone)]
pub struct AppPreferences {}
use crate::app::{AppArgs, AppConfig, AppPreferences};
use crate::app::{AppArgs, AppConfig};
use crate::cookie::SecureCookie;
use actix_web::cookie::Cookie;
use structopt::StructOpt;
......@@ -6,31 +6,46 @@ use structopt::StructOpt;
#[derive(Clone)]
pub struct AppState {
pub config: AppConfig,
pub preferences: AppPreferences,
pub admin_auth_token: AdminAuthToken,
}
impl AppState {
pub struct AppStateBuilder {
args: Option<AppArgs>,
}
impl AppStateBuilder {
pub fn new() -> Self {
let config = AppConfig::new(AppArgs::from_args());
let admin_cookie_name = config.admin_cookie_name.to_owned();
AppStateBuilder { args: None }
}
pub fn build(&self) -> AppState {
let config = self.config();
AppState {
config,
preferences: AppPreferences {},
admin_auth_token: AdminAuthToken::new(admin_cookie_name),
config: config.clone(),
admin_auth_token: AdminAuthToken::new(config.admin_cookie_name.to_owned()),
}
}
#[cfg(test)]
pub fn testing() -> Self {
let config = AppConfig::new(AppArgs::testing());
let admin_cookie_name = config.admin_cookie_name.to_owned();
AppState {
config,
preferences: AppPreferences {},
admin_auth_token: AdminAuthToken::new(admin_cookie_name),
fn config(&self) -> AppConfig {
AppConfig::new(self.get_args())
}
fn get_args(&self) -> AppArgs {
match &self.args {
Some(args) => args.clone(),
None => AppArgs::from_args(),
}
}
pub fn use_args(&mut self, args: AppArgs) -> &Self {
self.args = Some(args);
self
}
}
impl AppState {
pub fn builder() -> AppStateBuilder {
AppStateBuilder::new()
}
}
#[derive(Clone)]
......
......@@ -9,16 +9,17 @@ mod website;
use actix_files::Files;
use actix_web::{web, App, HttpServer};
use actix_web_lab::middleware::RedirectHttps;
use app::AppState;
use app::{AppArgs, AppState};
use middleware::AuthService;
use static_files::StaticFilesManager;
use std::sync::RwLock;
use structopt::StructOpt;
use tls_config::tls_config;
use website::WebSiteBuilder;
#[actix_web::main]
async fn main() -> std::io::Result<()> {
let app_state = AppState::new();
let app_state = AppState::builder().use_args(AppArgs::from_args()).build();
env_logger::Builder::from_env(
env_logger::Env::default().default_filter_or(&app_state.config.get_log_level()),
......
......@@ -143,7 +143,7 @@ async fn delete_static_file(
#[cfg(test)]
mod test_static_files_services {
use super::*;
use crate::{cookie::*, website::*, AppState};
use crate::{app::AppArgs, cookie::*, website::*, AppState};
use actix_web::{
http::{Method, StatusCode},
test,
......@@ -172,7 +172,7 @@ mod test_static_files_services {
#[actix_web::test]
async fn post_files_unauthenticated_should_be_unauthorized() {
let app_state = AppState::testing();
let app_state = AppState::builder().use_args(AppArgs::testing()).build();
let static_dir = std::path::PathBuf::from("./test");
let ws = WebSiteBuilder::testing(&static_dir);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment