diff options
author | metamuffin <metamuffin@disroot.org> | 2024-04-30 01:59:13 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2024-04-30 01:59:13 +0200 |
commit | fcc558d8e1c6759c19adc81c55bbe6b0a1a0ee35 (patch) | |
tree | 5f13bd3215828ca4e92fcde641abfff8c11bb4aa | |
parent | f57e6a8e8977d1acdfafeda7b1444cb155730894 (diff) | |
download | gnix-fcc558d8e1c6759c19adc81c55bbe6b0a1a0ee35.tar gnix-fcc558d8e1c6759c19adc81c55bbe6b0a1a0ee35.tar.bz2 gnix-fcc558d8e1c6759c19adc81c55bbe6b0a1a0ee35.tar.zst |
sest cache control header
-rw-r--r-- | src/config.rs | 12 | ||||
-rw-r--r-- | src/filters/files.rs | 16 |
2 files changed, 26 insertions, 2 deletions
diff --git a/src/config.rs b/src/config.rs index 700c4ed..e661996 100644 --- a/src/config.rs +++ b/src/config.rs @@ -100,7 +100,19 @@ pub struct FileserverConfig { pub last_modified: bool, #[serde(default = "return_true")] pub etag: bool, + #[serde(default)] + pub cache: CacheConfig, } + +#[derive(Debug, Default, Serialize, Deserialize)] +#[serde(rename_all = "snake_case")] +pub enum CacheConfig { + #[default] + Public, + Private, + NoStore, +} + fn return_true() -> bool { true } diff --git a/src/filters/files.rs b/src/filters/files.rs index 59de2f3..0b313e2 100644 --- a/src/filters/files.rs +++ b/src/filters/files.rs @@ -1,7 +1,13 @@ -use crate::{config::FileserverConfig, ServiceError}; +use crate::{ + config::{CacheConfig, FileserverConfig}, + ServiceError, +}; use bytes::{Bytes, BytesMut}; use futures_util::{future, future::Either, ready, stream, FutureExt, Stream, StreamExt}; -use headers::{AcceptRanges, ContentLength, ContentRange, ContentType, HeaderMapExt, LastModified}; +use headers::{ + AcceptRanges, CacheControl, ContentLength, ContentRange, ContentType, HeaderMapExt, + LastModified, +}; use http_body_util::{combinators::BoxBody, BodyExt, StreamBody}; use humansize::FormatSizeOptions; use hyper::{ @@ -139,6 +145,12 @@ pub async fn serve_files( let mime = mime_guess::from_path(path).first_or_octet_stream(); r.headers_mut().typed_insert(ContentType::from(mime)); + r.headers_mut().typed_insert(match config.cache { + CacheConfig::Public => CacheControl::new().with_public(), + CacheConfig::Private => CacheControl::new().with_private(), + CacheConfig::NoStore => CacheControl::new().with_no_store(), + }); + // if config.etag { // r.headers_mut().typed_insert(etag); // } |