From 33262cc703c69eb85bd7000dbabcf81fe027e9aa Mon Sep 17 00:00:00 2001 From: Paul <paulmakles@gmail.com> Date: Sat, 31 Jul 2021 14:48:08 +0100 Subject: [PATCH] Add cache control header for default avatars. --- set_version.sh | 2 +- src/routes/users/get_default_avatar.rs | 25 +++++++++++++++++++------ src/version.rs | 2 +- 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/set_version.sh b/set_version.sh index 23f0096..40cde68 100755 --- a/set_version.sh +++ b/set_version.sh @@ -1,3 +1,3 @@ #!/bin/bash -export version=0.5.1-alpha.20 +export version=0.5.1-alpha.21 echo "pub const VERSION: &str = \"${version}\";" > src/version.rs diff --git a/src/routes/users/get_default_avatar.rs b/src/routes/users/get_default_avatar.rs index 4e46c73..d2504cf 100644 --- a/src/routes/users/get_default_avatar.rs +++ b/src/routes/users/get_default_avatar.rs @@ -1,28 +1,41 @@ -use rocket::response::NamedFile; +use rocket::{Request, Response}; +use rocket::response::{self, NamedFile, Responder}; use std::path::Path; use crate::database::Ref; +pub struct CachedFile(NamedFile); + +pub static CACHE_CONTROL: &'static str = "public, max-age=31536000, immutable"; + +impl<'r> Responder<'r, 'static> for CachedFile { + fn respond_to(self, req: &'r Request<'_>) -> response::Result<'static> { + Response::build_from(self.0.respond_to(req)?) + .raw_header("Cache-control", CACHE_CONTROL) + .ok() + } +} + #[get("/<target>/default_avatar")] -pub async fn req(target: Ref) -> Option<NamedFile> { +pub async fn req(target: Ref) -> Option<CachedFile> { match target.id.chars().nth(25).unwrap() { '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' => { - NamedFile::open(Path::new("assets/user_red.png")).await.ok() + NamedFile::open(Path::new("assets/user_red.png")).await.ok().map(|n| CachedFile(n)) } '8' | '9' | 'A' | 'C' | 'B' | 'D' | 'E' | 'F' => { NamedFile::open(Path::new("assets/user_green.png")) .await - .ok() + .ok().map(|n| CachedFile(n)) } 'G' | 'H' | 'J' | 'K' | 'M' | 'N' | 'P' | 'Q' => { NamedFile::open(Path::new("assets/user_blue.png")) .await - .ok() + .ok().map(|n| CachedFile(n)) } 'R' | 'S' | 'T' | 'V' | 'W' | 'X' | 'Y' | 'Z' => { NamedFile::open(Path::new("assets/user_yellow.png")) .await - .ok() + .ok().map(|n| CachedFile(n)) } _ => unreachable!(), } diff --git a/src/version.rs b/src/version.rs index a16194b..c7d448d 100644 --- a/src/version.rs +++ b/src/version.rs @@ -1 +1 @@ -pub const VERSION: &str = "0.5.1-alpha.20"; +pub const VERSION: &str = "0.5.1-alpha.21"; -- GitLab