From 3f8df2d8676591b443864f769142eba24041da11 Mon Sep 17 00:00:00 2001 From: Florian Gilcher Date: Tue, 14 May 2019 11:14:50 +0200 Subject: [PATCH 1/2] Set cache headers on all statics --- src/caching.rs | 40 ++++++++++++++++++++++++++++++++++++++++ src/main.rs | 15 +++++++++++---- 2 files changed, 51 insertions(+), 4 deletions(-) create mode 100644 src/caching.rs diff --git a/src/caching.rs b/src/caching.rs new file mode 100644 index 000000000..f40458bee --- /dev/null +++ b/src/caching.rs @@ -0,0 +1,40 @@ +use rocket::http::hyper::header::{CacheControl, CacheDirective}; +use rocket::request::Request; +use rocket::response::{self, Responder}; + +pub struct Cached { + inner: R, + directives: Vec, +} + +impl<'r, R> Responder<'r> for Cached +where + R: Responder<'r>, +{ + fn respond_to(self, req: &Request) -> response::Result<'r> { + let Cached { inner, directives } = self; + inner.respond_to(req).map(|mut res| { + res.set_header(CacheControl(directives)); + res + }) + } +} + +pub trait Caching +where + Self: Sized, +{ + fn cached(self, directives: Vec) -> Cached; +} + +impl<'r, R> Caching for R +where + R: Responder<'r>, +{ + fn cached(self, directives: Vec) -> Cached { + Cached { + inner: self, + directives: directives, + } + } +} diff --git a/src/main.rs b/src/main.rs index 76fe2699f..61c741fe3 100644 --- a/src/main.rs +++ b/src/main.rs @@ -22,6 +22,7 @@ extern crate regex; extern crate handlebars; mod cache; +mod caching; mod category; mod headers; mod i18n; @@ -51,6 +52,8 @@ use sass_rs::{compile_file, Options}; use category::Category; use i18n::{I18NHelper, SupportedLocale, TeamHelper}; +use caching::{Cached, Caching}; +use rocket::http::hyper::header::CacheDirective; #[derive(Serialize)] struct Context { @@ -87,13 +90,17 @@ fn components(_file: PathBuf) -> Template { } #[get("/logos/", rank = 1)] -fn logos(file: PathBuf) -> Option { - NamedFile::open(Path::new("static/logos").join(file)).ok() +fn logos(file: PathBuf) -> Option> { + NamedFile::open(Path::new("static/logos").join(file)) + .ok() + .map(|file| file.cached(vec![CacheDirective::MaxAge(3600)])) } #[get("/static/", rank = 1)] -fn files(file: PathBuf) -> Option { - NamedFile::open(Path::new("static/").join(file)).ok() +fn files(file: PathBuf) -> Option> { + NamedFile::open(Path::new("static/").join(file)) + .ok() + .map(|file| file.cached(vec![CacheDirective::MaxAge(3600)])) } #[get("/")] From 6d7624980c2eb867168681ca585a62dbec361903 Mon Sep 17 00:00:00 2001 From: Florian Gilcher Date: Mon, 27 May 2019 20:17:59 +0200 Subject: [PATCH 2/2] Make rustfmt happy --- src/main.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.rs b/src/main.rs index 61c741fe3..621ebd148 100644 --- a/src/main.rs +++ b/src/main.rs @@ -51,8 +51,8 @@ use sass_rs::{compile_file, Options}; use category::Category; -use i18n::{I18NHelper, SupportedLocale, TeamHelper}; use caching::{Cached, Caching}; +use i18n::{I18NHelper, SupportedLocale, TeamHelper}; use rocket::http::hyper::header::CacheDirective; #[derive(Serialize)]