Return 404 instead of fallback icon

This commit is contained in:
James Hurst 2020-11-09 20:45:58 -05:00
parent e25fc7083d
commit ed70b07d81
2 changed files with 12 additions and 14 deletions

View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 344 B