diff --git a/Cargo.lock b/Cargo.lock index 115dd64..5860018 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1367,7 +1367,7 @@ dependencies = [ [[package]] name = "karnaugh" -version = "0.1.3" +version = "0.1.4" dependencies = [ "axum", "clap", diff --git a/Cargo.toml b/Cargo.toml index b6cec8c..2dc2575 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "karnaugh" -version = "0.1.3" +version = "0.1.4" edition = "2024" [dependencies] @@ -10,7 +10,7 @@ itertools = "0.14.0" tar = "0.4.44" time = "0.3.47" tokio = { version = "1.48.0", features = ["macros", "rt-multi-thread"] } -tower-http = { version = "0.6.8", features = ["compression-br", "fs", "trace"] } +tower-http = { version = "0.6.8", features = ["compression-br", "fs", "trace", "set-header"] } tracing = "0.1.43" tracing-subscriber = "0.3.22" typst-html = { git = "https://github.com/mkorje/typst.git", branch = "mathml" } diff --git a/flake.nix b/flake.nix index af4fe4c..d9214ec 100644 --- a/flake.nix +++ b/flake.nix @@ -21,9 +21,9 @@ rec { packages.karnaugh = pkgs.rustPlatform.buildRustPackage (final: { pname = "karnaugh"; - version = "0.1.3"; + version = "0.1.4"; src = self; - cargoHash = "sha256-HwwvbYf9hKBANbIoxBQFOgya3K7SwWZCPZKvLGB057U="; + cargoHash = "sha256-pwZOy+9cnpEskNf4HYC81UbXPJIOnUCtxEKzEVTrNyQ="; }); packages.container = pkgs.dockerTools.buildImage { name = "karnaugh"; diff --git a/src/main.rs b/src/main.rs index 33e7cec..1cbe184 100644 --- a/src/main.rs +++ b/src/main.rs @@ -8,7 +8,7 @@ use ::typst::syntax::VirtualPath; use axum::{ Router, extract::{Path, State}, - http::StatusCode, + http::{HeaderValue, StatusCode, header::CACHE_CONTROL}, response::{Html, IntoResponse, Response}, routing::get, }; @@ -17,6 +17,7 @@ use itertools::Itertools; use tower_http::{ compression::CompressionLayer, services::{ServeDir, ServeFile}, + set_header::SetResponseHeaderLayer, trace::TraceLayer, }; use tracing::{Level, info}; @@ -97,14 +98,20 @@ async fn main() { let mut favicon = state.config.get_full_assets_path(); favicon.push(PathBuf::from("favicon.svg")); + let assets_service = ServeDir::new(state.config.get_full_assets_path()); + let app = Router::new() .route("/", get(root_handler)) .route("/{*path}", get(typst_handler)) .route_service("/favicon.ico", ServeFile::new(favicon)) - .nest_service("/assets", ServeDir::new(&state.config.assets_root)) + .nest_service("/assets", assets_service) .with_state(state.clone()) .layer(TraceLayer::new_for_http()) - .layer(CompressionLayer::new()); + .layer(CompressionLayer::new()) + .layer(SetResponseHeaderLayer::overriding( + CACHE_CONTROL, + HeaderValue::from_static("public, max-age=86400, immutable"), + )); let socket = SocketAddrV4::new(Ipv4Addr::new(0, 0, 0, 0), state.config.port); info!("Serving Karnaugh on socket {}", socket);