From add8371776ba5b40dfd5cbd7674dda9be5b1ebba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Ml=C3=A1dek?= Date: Tue, 15 Feb 2022 01:21:04 +0100 Subject: [PATCH] send cache-control (immutable, 31) for /raw/{hash} --- src/routes.rs | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/src/routes.rs b/src/routes.rs index 6991596..f051ca8 100644 --- a/src/routes.rs +++ b/src/routes.rs @@ -11,9 +11,9 @@ use crate::util::jobs::JobContainer; use actix_files::NamedFile; use actix_multipart::Multipart; use actix_web::error::{ErrorBadRequest, ErrorInternalServerError, ErrorNotFound}; -use actix_web::http; -use actix_web::http::header::{ContentDisposition, DispositionType}; +use actix_web::http::header::{CacheControl, CacheDirective, ContentDisposition, DispositionType}; use actix_web::{delete, error, get, post, put, web, Either, Error, HttpResponse}; +use actix_web::{http, Responder}; use anyhow::{anyhow, Result}; use futures_util::TryStreamExt; use log::{debug, info, trace}; @@ -52,7 +52,7 @@ pub async fn get_raw( state: web::Data, web::Query(query): web::Query, hash: web::Path, -) -> Result, Error> { +) -> Result { let address = Address::decode(&b58_decode(hash.into_inner()).map_err(ErrorInternalServerError)?) .map_err(ErrorInternalServerError)?; @@ -76,14 +76,22 @@ pub async fn get_raw( if query.native.is_none() { Ok(Either::A( - NamedFile::open(file_path)?.set_content_disposition(ContentDisposition { - disposition: if query.inline.is_some() { - DispositionType::Inline - } else { - DispositionType::Attachment - }, - parameters: vec![], - }), + NamedFile::open(file_path)? + .set_content_disposition(ContentDisposition { + disposition: if query.inline.is_some() { + DispositionType::Inline + } else { + DispositionType::Attachment + }, + parameters: vec![], + }) + .with_header( + http::header::CACHE_CONTROL, + CacheControl(vec![ + CacheDirective::MaxAge(2678400), + CacheDirective::Extension("immutable".into(), None), + ]), + ), )) } else if state.desktop_enabled { #[cfg(feature = "desktop")]