Skip to content

Commit

Permalink
Provide Cache-Control Headers
Browse files Browse the repository at this point in the history
max-age = 1 week for everything
stale-while-revalidate = 1 day for everything except raw pastes
immutable for raw pastes

Most likely fixes #2, unless I forgot something.

Suggested-by: Leonora Tindall <[email protected]>
Signed-off-by: Gunwant Jain <[email protected]>
  • Loading branch information
wantguns committed Feb 7, 2022
1 parent 884be16 commit 08ec2cb
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 9 deletions.
31 changes: 26 additions & 5 deletions src/models/response_wrapper.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@ use std::time::SystemTime;

pub enum ResponseWrapper<R> {
MetaInterfaceResponse(R),
PasteContentResponse(R, SystemTime),
PrettyPasteContentResponse(R, SystemTime),
RawPasteContentResponse(R, SystemTime),
Redirect(Box<Redirect>),
NotFound(String),
ServerError(String),
Expand All @@ -19,8 +20,12 @@ impl<'r, 'o: 'r, R: Responder<'r, 'o>> ResponseWrapper<R> {
Self::MetaInterfaceResponse(responder)
}

pub fn paste_response(responder: R, modified: SystemTime) -> Self {
Self::PasteContentResponse(responder, modified)
pub fn pretty_paste_response(responder: R, modified: SystemTime) -> Self {
Self::PrettyPasteContentResponse(responder, modified)
}

pub fn raw_paste_response(responder: R, modified: SystemTime) -> Self {
Self::RawPasteContentResponse(responder, modified)
}

pub fn redirect(redirect: Redirect) -> Self {
Expand Down Expand Up @@ -51,15 +56,31 @@ impl<'r, 'o: 'r, R: Responder<'r, 'o>> Responder<'r, 'o>
MetaInterfaceResponse(sup) => response
.join(sup.respond_to(request)?)
.raw_header("ETag", &*crate::BINARY_ETAG)
.raw_header(
"Cache-Control",
"max-age=604800, stale-while-revalidate=86400",
)
.ok(),

PrettyPasteContentResponse(sup, modified) => response
.join(sup.respond_to(request)?)
.raw_header("Last-Modified", http_strftime(modified))
.raw_header(
"Cache-Control",
"max-age=604800, stale-while-revalidate=86400",
)
.ok(),
PasteContentResponse(sup, modified) => response

RawPasteContentResponse(sup, modified) => response
.join(sup.respond_to(request)?)
.raw_header("Last-Modified", http_strftime(modified))
.raw_header("Cache-Control", "max-age=604800, immutable")
.ok(),

Redirect(sup) => response.join(sup.respond_to(request)?).ok(),

NotFound(s) => {
let body = format!("Unable to find entity '{}'", s);

response
.sized_body(body.len(), Cursor::new(body))
.status(Status::NotFound)
Expand Down
6 changes: 4 additions & 2 deletions src/routes/index.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,11 @@ use rocket_dyn_templates::Template;

use std::collections::HashMap;

use crate::models::response_wrapper::ResponseWrapper;

#[get("/")]
pub async fn index() -> Option<Template> {
pub async fn index() -> ResponseWrapper<Template> {
let mut map = HashMap::new();
map.insert("title", "bin");
Some(Template::render("index.html", &map))
ResponseWrapper::meta_response(Template::render("index.html", &map))
}
4 changes: 3 additions & 1 deletion src/routes/pretty_retrieve.rs
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,9 @@ pub async fn pretter_retrieve_inner(
let rendered = Template::render("pretty.html", &map);

match tree_magic::match_filepath("text/plain", &filepath) {
true => ResponseWrapper::paste_response(rendered, modified_date),
true => {
ResponseWrapper::pretty_paste_response(rendered, modified_date)
}
false => ResponseWrapper::server_error("media type unacceptable"),
}
}
2 changes: 1 addition & 1 deletion src/routes/retrieve.rs
Original file line number Diff line number Diff line change
Expand Up @@ -42,5 +42,5 @@ pub async fn retrieve_inner(id: &str) -> ResponseWrapper<File> {
}
};

ResponseWrapper::paste_response(file, modified_date)
ResponseWrapper::raw_paste_response(file, modified_date)
}

0 comments on commit 08ec2cb

Please sign in to comment.