Add dev feature to serve static files from source

This commit is contained in:
Lennart
2025-06-13 14:57:53 +02:00
parent ab90e5129c
commit 87899738f6
5 changed files with 433 additions and 1602 deletions

15
Cargo.lock generated
View File

@@ -1222,6 +1222,12 @@ dependencies = [
"pin-project-lite", "pin-project-lite",
] ]
[[package]]
name = "http-range-header"
version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9171a2ea8a68358193d15dd5d70c1c10a2afc3e7e4c5bc92bc9f025cebd7359c"
[[package]] [[package]]
name = "httparse" name = "httparse"
version = "1.10.1" version = "1.10.1"
@@ -2816,6 +2822,7 @@ dependencies = [
"thiserror 2.0.12", "thiserror 2.0.12",
"tokio", "tokio",
"tower", "tower",
"tower-http",
"tower-sessions", "tower-sessions",
"tracing", "tracing",
"url", "url",
@@ -3776,12 +3783,20 @@ checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2"
dependencies = [ dependencies = [
"bitflags", "bitflags",
"bytes", "bytes",
"futures-core",
"futures-util", "futures-util",
"http", "http",
"http-body", "http-body",
"http-body-util", "http-body-util",
"http-range-header",
"httpdate",
"iri-string", "iri-string",
"mime",
"mime_guess",
"percent-encoding",
"pin-project-lite", "pin-project-lite",
"tokio",
"tokio-util",
"tower", "tower",
"tower-layer", "tower-layer",
"tower-service", "tower-service",

View File

@@ -20,6 +20,7 @@ publish = false
[features] [features]
debug = ["opentelemetry"] debug = ["opentelemetry"]
frontend-dev = ["rustical_frontend/dev"]
opentelemetry = [ opentelemetry = [
"dep:opentelemetry", "dep:opentelemetry",
"dep:opentelemetry-otlp", "dep:opentelemetry-otlp",

View File

@@ -7,6 +7,10 @@ repository.workspace = true
license.workspace = true license.workspace = true
publish = false publish = false
[features]
default = []
dev = ["tower-http/fs"]
[dependencies] [dependencies]
tower.workspace = true tower.workspace = true
http.workspace = true http.workspace = true
@@ -34,3 +38,4 @@ axum-extra.workspace = true
headers.workspace = true headers.workspace = true
tower-sessions.workspace = true tower-sessions.workspace = true
percent-encoding.workspace = true percent-encoding.workspace = true
tower-http = { workspace = true, optional = true }

File diff suppressed because it is too large Load Diff

View File

@@ -25,21 +25,20 @@ mod routes;
pub use config::FrontendConfig; pub use config::FrontendConfig;
use oidc_user_store::OidcUserStore; use oidc_user_store::OidcUserStore;
use crate::{ use crate::routes::{
assets::{Assets, EmbedService}, addressbook::{
routes::{ route_addressbook, route_addressbook_restore, route_create_addressbook,
addressbook::{ route_delete_addressbook,
route_addressbook, route_addressbook_restore, route_create_addressbook,
route_delete_addressbook,
},
app_token::{route_delete_app_token, route_post_app_token},
calendar::{
route_calendar, route_calendar_restore, route_create_calendar, route_delete_calendar,
},
login::{route_get_login, route_post_login, route_post_logout},
user::{route_get_home, route_root, route_user_named},
}, },
app_token::{route_delete_app_token, route_post_app_token},
calendar::{
route_calendar, route_calendar_restore, route_create_calendar, route_delete_calendar,
},
login::{route_get_login, route_post_login, route_post_logout},
user::{route_get_home, route_root, route_user_named},
}; };
#[cfg(not(feature = "dev"))]
use assets::{Assets, EmbedService};
pub fn frontend_router<AP: AuthenticationProvider, CS: CalendarStore, AS: AddressbookStore>( pub fn frontend_router<AP: AuthenticationProvider, CS: CalendarStore, AS: AddressbookStore>(
prefix: &'static str, prefix: &'static str,
@@ -93,8 +92,15 @@ pub fn frontend_router<AP: AuthenticationProvider, CS: CalendarStore, AS: Addres
post(route_addressbook_restore::<AS>), post(route_addressbook_restore::<AS>),
) )
.route("/login", get(route_get_login).post(route_post_login::<AP>)) .route("/login", get(route_get_login).post(route_post_login::<AP>))
.route("/logout", post(route_post_logout)) .route("/logout", post(route_post_logout));
.route_service("/assets/{*file}", EmbedService::<Assets>::new());
#[cfg(not(feature = "dev"))]
let mut router = router.route_service("/assets/{*file}", EmbedService::<Assets>::new());
#[cfg(feature = "dev")]
let mut router = router.nest_service(
"/assets",
tower_http::services::ServeDir::new(concat!(env!("CARGO_MANIFEST_DIR"), "/public/assets")),
);
if let Some(oidc_config) = oidc_config.clone() { if let Some(oidc_config) = oidc_config.clone() {
router = router router = router