From 83eaf1a5f5ec4c4179cb838f41df6d3ab058f002 Mon Sep 17 00:00:00 2001 From: Simon Bruder Date: Tue, 25 Jun 2024 13:30:51 +0200 Subject: [PATCH] Add static file serving --- Cargo.lock | 55 +++++++++++++++++++++++++++++++++++++++++++++++++ Cargo.toml | 1 + src/main.rs | 8 ++++--- static/.gitkeep | 0 4 files changed, 61 insertions(+), 3 deletions(-) create mode 100644 static/.gitkeep diff --git a/Cargo.lock b/Cargo.lock index 78ccf3d..66661b7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -19,6 +19,29 @@ dependencies = [ "tracing", ] +[[package]] +name = "actix-files" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0773d59061dedb49a8aed04c67291b9d8cf2fe0b60130a381aab53c6dd86e9be" +dependencies = [ + "actix-http", + "actix-service", + "actix-utils", + "actix-web", + "bitflags", + "bytes", + "derive_more", + "futures-core", + "http-range", + "log", + "mime", + "mime_guess", + "percent-encoding", + "pin-project-lite", + "v_htmlescape", +] + [[package]] name = "actix-http" version = "3.8.0" @@ -734,6 +757,12 @@ dependencies = [ "itoa", ] +[[package]] +name = "http-range" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21dec9db110f5f872ed9699c3ecf50cf16f423502706ba5c72462e28d3157573" + [[package]] name = "httparse" version = "1.9.4" @@ -809,6 +838,7 @@ checksum = "d4345964bb142484797b161f473a503a434de77149dd8c7427788c6e13379388" name = "li7y" version = "0.0.0" dependencies = [ + "actix-files", "actix-web", "diesel", "diesel_migrations", @@ -890,6 +920,16 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" +[[package]] +name = "mime_guess" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef" +dependencies = [ + "mime", + "unicase", +] + [[package]] name = "miniz_oxide" version = "0.7.4" @@ -1401,6 +1441,15 @@ version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +[[package]] +name = "unicase" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" +dependencies = [ + "version_check", +] + [[package]] name = "unicode-bidi" version = "0.3.15" @@ -1449,6 +1498,12 @@ dependencies = [ "serde", ] +[[package]] +name = "v_htmlescape" +version = "0.15.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e8257fbc510f0a46eb602c10215901938b5c2a7d5e70fc11483b1d3c9b5b18c" + [[package]] name = "vcpkg" version = "0.2.15" diff --git a/Cargo.toml b/Cargo.toml index 4717dd8..67c694e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,6 +10,7 @@ edition = "2021" license = "AGPL-3.0-or-later" [dependencies] +actix-files = "0.6.6" actix-web = "4.8.0" diesel = { version = "2.2.1", features = ["postgres", "r2d2", "uuid"] } diesel_migrations = { version = "2.2.0", features = ["postgres"] } diff --git a/src/main.rs b/src/main.rs index 355c621..b555573 100644 --- a/src/main.rs +++ b/src/main.rs @@ -8,7 +8,7 @@ use actix_web::{web, App, HttpServer}; use diesel::prelude::*; use diesel::r2d2; use diesel_migrations::{embed_migrations, EmbeddedMigrations, MigrationHarness}; -use log::info; +use log::{debug, info}; pub const MIGRATIONS: EmbeddedMigrations = embed_migrations!(); @@ -32,13 +32,15 @@ async fn main() -> std::io::Result<()> { let port = env::var("LISTEN_PORT").map_or(8080, |s| { s.parse::().expect("failed to parse LISTEN_PORT") }); + let static_root = env::var("STATIC_ROOT").unwrap_or("static".to_string()); - info!("Starting on {address}:{port}"); + info!("Starting on {address}:{port} with static files from {static_root}"); + debug!("Serving static files from {static_root}"); HttpServer::new(move || { App::new() .app_data(web::Data::new(pool.clone())) - .service(web::scope("/api").configure(li7y::api::config)) + .service(web::scope("/api/v1").configure(li7y::api::v1::config)) .service(actix_files::Files::new("/static", &static_root)) }) .bind((address, port))? diff --git a/static/.gitkeep b/static/.gitkeep new file mode 100644 index 0000000..e69de29