diff --git a/Cargo.lock b/Cargo.lock index ac6b5418abaccc981ffa155e6f8c18765e065be1..d06439e277d07e6f3b5adfee2823ab1d3ea3c095 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -517,6 +517,7 @@ dependencies = [ name = "cms_rust" version = "0.1.0" dependencies = [ + "actix-files", "actix-web", "actix-web-lab", "dirs", diff --git a/Cargo.toml b/Cargo.toml index c86923c22830affbe358278e647674e322210d0f..5bebde7a43a8c83b7f20a8e74f6b37f5c955b497 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,3 +17,4 @@ dirs = "4.0" structopt = "0.3" env_logger = "0.9" actix-web-lab = "0.17.0" +actix-files = "0.6.2" diff --git a/default_static/favicon.ico b/default_static/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..6c215345b05c43669984f26ba69e8d1e708608e2 Binary files /dev/null and b/default_static/favicon.ico differ diff --git a/src/app/config.rs b/src/app/config.rs index 42ce77848de5707a0e0386bcb28a3281a5906607..97e519bbb7d41bc2c1b359209d8897cfd97647ca 100644 --- a/src/app/config.rs +++ b/src/app/config.rs @@ -1,6 +1,5 @@ use crate::app::AppArgs; use std::path::PathBuf; -use structopt::StructOpt; #[derive(Clone)] pub enum AppContext { @@ -22,8 +21,7 @@ pub struct AppConfig { } impl AppConfig { - pub fn new() -> Self { - let app_args = AppArgs::from_args(); + pub fn new(app_args: AppArgs) -> Self { let exec_path = std::env::current_exe().unwrap(); let exec_name = exec_path .file_name() diff --git a/src/app/state.rs b/src/app/state.rs index 8d0dc75548ddbf3cc1fe0fed60a191b53af49768..eb498c1c1e2c549dc7374756b14067e0e8f71af1 100644 --- a/src/app/state.rs +++ b/src/app/state.rs @@ -1,4 +1,5 @@ -use crate::app::{AppConfig, AppPreferences}; +use crate::app::{AppArgs, AppConfig, AppPreferences}; +use structopt::StructOpt; #[derive(Clone)] pub struct AppState { @@ -11,7 +12,7 @@ pub struct AppState { impl AppState { pub fn new() -> Self { AppState { - config: AppConfig::new(), + config: AppConfig::new(AppArgs::from_args()), preferences: AppPreferences {}, } } diff --git a/src/main.rs b/src/main.rs index c996be1f4371e3176c8f9ae649df1fb4db869b53..ca8ab2a631980029f3ee26a7212cb4ecfaca45cd 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,6 +4,7 @@ mod static_files; mod testing; mod tls_config; mod website; +use actix_files::Files; use actix_web::{App, HttpServer}; use actix_web_lab::middleware::RedirectHttps; use app::AppState; @@ -29,8 +30,8 @@ async fn main() -> std::io::Result<()> { let port_tls = app_state.config.port_tls; let srv_conf = tls_config(&app_state.config); - - let static_files_manager = + let static_dir = static_files_manager.dir.clone(); + let mut_static_files_manager = actix_web::web::Data::new(std::sync::Mutex::new(static_files_manager)); let app_state = actix_web::web::Data::new(std::sync::Mutex::new(app_state)); @@ -41,8 +42,10 @@ async fn main() -> std::io::Result<()> { .wrap(actix_web::middleware::Compress::default()) .wrap(RedirectHttps::default().to_port(port_tls)) .app_data(actix_web::web::Data::clone(&app_state)) - .app_data(actix_web::web::Data::clone(&static_files_manager)) + .app_data(actix_web::web::Data::clone(&mut_static_files_manager)) .app_data(actix_web::web::Data::new(website.clone())) + .service(Files::new("/static/", &static_dir)) + .service(service::files::favicon) .service(service::page) }) .bind(format!("{}:{}", host, port))? diff --git a/src/service/files.rs b/src/service/files.rs new file mode 100644 index 0000000000000000000000000000000000000000..4800bfdb6877c7765b7c6c20580946cffd7e56d8 --- /dev/null +++ b/src/service/files.rs @@ -0,0 +1,11 @@ +use crate::static_files::StaticFilesManager; +use actix_files::NamedFile; +use actix_web::{get, web, Responder}; + +#[get("/favicon.ico")] +pub async fn favicon( + static_files_manager: web::Data<std::sync::Mutex<StaticFilesManager>>, +) -> impl Responder { + let static_files_manager = static_files_manager.lock().unwrap(); + NamedFile::open(static_files_manager.dir.join("default").join("favicon.ico")) +} diff --git a/src/service/mod.rs b/src/service/mod.rs index f5f67f8cfe1c46654785127e661a3e00c05afaab..b27ee732153f842b45a10dd99898468a3e696b8d 100644 --- a/src/service/mod.rs +++ b/src/service/mod.rs @@ -1,2 +1,3 @@ +pub mod files; mod page; pub use page::*; diff --git a/src/static_files.rs b/src/static_files.rs index 4da405f36f67b5cfbac8679c84163147fa28c859..7f33f484afd3cbf5ae06747aa4787278232ca2c9 100644 --- a/src/static_files.rs +++ b/src/static_files.rs @@ -1,9 +1,10 @@ use crate::app::AppState; use std::path::{Path, PathBuf}; +#[derive(Clone)] pub struct StaticFilesManager { - dir: PathBuf, - index: Vec<String>, + pub dir: PathBuf, + pub index: Vec<String>, } impl StaticFilesManager {