vw_small

Hardened fork of Vaultwarden (https://github.com/dani-garcia/vaultwarden) with fewer features.
git clone https://git.philomathiclife.com/repos/vw_small
Log | Files | Refs | README

commit 558410c5bdad41232ef9479937ca7b9a65db8463
parent 0dc0decaa712ed69f37c526e210492cbbc9577fa
Author: Daniel GarcĂ­a <dani-garcia@users.noreply.github.com>
Date:   Sat, 14 Nov 2020 14:17:53 +0100

Merge pull request #1220 from jameshurst/master

Return 404 instead of fallback icon
Diffstat:
Msrc/api/icons.rs | 34++++++++++++++++------------------
Dsrc/static/fallback-icon.png | 0
2 files changed, 16 insertions(+), 18 deletions(-)

diff --git a/src/api/icons.rs b/src/api/icons.rs @@ -17,8 +17,6 @@ pub fn routes() -> Vec<Route> { routes![icon] } -const FALLBACK_ICON: &[u8; 344] = include_bytes!("../static/fallback-icon.png"); - const ALLOWED_CHARS: &str = "_-."; static CLIENT: Lazy<Client> = Lazy::new(|| { @@ -52,15 +50,15 @@ fn is_valid_domain(domain: &str) -> bool { } #[get("/<domain>/icon.png")] -fn icon(domain: String) -> Cached<Content<Vec<u8>>> { - let icon_type = ContentType::new("image", "x-icon"); - +fn icon(domain: String) -> Option<Cached<Content<Vec<u8>>>> { if !is_valid_domain(&domain) { warn!("Invalid domain: {:#?}", domain); - return Cached::long(Content(icon_type, FALLBACK_ICON.to_vec())); + return None; } - Cached::long(Content(icon_type, get_icon(&domain))) + get_icon(&domain).map(|icon| { + Cached::long(Content(ContentType::new("image", "x-icon"), icon)) + }) } /// TODO: This is extracted from IpAddr::is_global, which is unstable: @@ -190,39 +188,39 @@ fn check_icon_domain_is_blacklisted(domain: &str) -> bool { is_blacklisted } -fn get_icon(domain: &str) -> Vec<u8> { +fn get_icon(domain: &str) -> Option<Vec<u8>> { let path = format!("{}/{}.png", CONFIG.icon_cache_folder(), domain); + // Check for expiration of negatively cached copy + if icon_is_negcached(&path) { + return None; + } + if let Some(icon) = get_cached_icon(&path) { - return icon; + return Some(icon); } if CONFIG.disable_icon_download() { - return FALLBACK_ICON.to_vec(); + return None; } - // Get the icon, or fallback in case of error + // Get the icon, or None in case of error match download_icon(&domain) { Ok(icon) => { save_icon(&path, &icon); - icon + Some(icon) } Err(e) => { error!("Error downloading icon: {:?}", e); let miss_indicator = path + ".miss"; let empty_icon = Vec::new(); save_icon(&miss_indicator, &empty_icon); - FALLBACK_ICON.to_vec() + None } } } fn get_cached_icon(path: &str) -> Option<Vec<u8>> { - // Check for expiration of negatively cached copy - if icon_is_negcached(path) { - return Some(FALLBACK_ICON.to_vec()); - } - // Check for expiration of successfully cached copy if icon_is_expired(path) { return None; diff --git a/src/static/fallback-icon.png b/src/static/fallback-icon.png Binary files differ.