From 07dd10848f403cbdda0080e5e7e20408ef08c836 Mon Sep 17 00:00:00 2001 From: Athou Date: Mon, 25 Dec 2023 10:28:21 +0100 Subject: [PATCH] return default content type if invalid instead of crashing --- .../favicon/AbstractFaviconFetcher.java | 9 ------ .../commafeed/backend/favicon/Favicon.java | 30 +++++++++++++++++++ .../backend/service/FeedService.java | 2 +- .../commafeed/frontend/resource/FeedREST.java | 6 ++-- .../frontend/resource/fever/FeverREST.java | 2 +- 5 files changed, 35 insertions(+), 14 deletions(-) create mode 100644 commafeed-server/src/main/java/com/commafeed/backend/favicon/Favicon.java diff --git a/commafeed-server/src/main/java/com/commafeed/backend/favicon/AbstractFaviconFetcher.java b/commafeed-server/src/main/java/com/commafeed/backend/favicon/AbstractFaviconFetcher.java index 1f6823f4..06e8054b 100644 --- a/commafeed-server/src/main/java/com/commafeed/backend/favicon/AbstractFaviconFetcher.java +++ b/commafeed-server/src/main/java/com/commafeed/backend/favicon/AbstractFaviconFetcher.java @@ -7,8 +7,6 @@ import org.apache.commons.lang3.StringUtils; import com.commafeed.backend.model.Feed; -import lombok.Getter; -import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @Slf4j @@ -50,11 +48,4 @@ public abstract class AbstractFaviconFetcher { return true; } - - @RequiredArgsConstructor - @Getter - public static class Favicon { - private final byte[] icon; - private final String mediaType; - } } diff --git a/commafeed-server/src/main/java/com/commafeed/backend/favicon/Favicon.java b/commafeed-server/src/main/java/com/commafeed/backend/favicon/Favicon.java new file mode 100644 index 00000000..cd9a3419 --- /dev/null +++ b/commafeed-server/src/main/java/com/commafeed/backend/favicon/Favicon.java @@ -0,0 +1,30 @@ +package com.commafeed.backend.favicon; + +import jakarta.ws.rs.core.MediaType; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@RequiredArgsConstructor +@Getter +@Slf4j +public class Favicon { + + private static final MediaType DEFAULT_MEDIA_TYPE = MediaType.valueOf("image/x-icon"); + + private final byte[] icon; + private final MediaType mediaType; + + public Favicon(byte[] icon, String contentType) { + this(icon, parseMediaType(contentType)); + } + + private static MediaType parseMediaType(String contentType) { + try { + return MediaType.valueOf(contentType); + } catch (Exception e) { + log.debug("invalid content type '{}' received, returning default value", contentType); + return DEFAULT_MEDIA_TYPE; + } + } +} \ No newline at end of file diff --git a/commafeed-server/src/main/java/com/commafeed/backend/service/FeedService.java b/commafeed-server/src/main/java/com/commafeed/backend/service/FeedService.java index d989b6b9..5fbc0b81 100644 --- a/commafeed-server/src/main/java/com/commafeed/backend/service/FeedService.java +++ b/commafeed-server/src/main/java/com/commafeed/backend/service/FeedService.java @@ -9,7 +9,7 @@ import org.apache.commons.io.IOUtils; import com.commafeed.backend.dao.FeedDAO; import com.commafeed.backend.favicon.AbstractFaviconFetcher; -import com.commafeed.backend.favicon.AbstractFaviconFetcher.Favicon; +import com.commafeed.backend.favicon.Favicon; import com.commafeed.backend.feed.FeedUtils; import com.commafeed.backend.model.Feed; diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/resource/FeedREST.java b/commafeed-server/src/main/java/com/commafeed/frontend/resource/FeedREST.java index df18483e..21314e12 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/resource/FeedREST.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/resource/FeedREST.java @@ -24,7 +24,7 @@ import com.commafeed.backend.cache.CacheService; import com.commafeed.backend.dao.FeedCategoryDAO; import com.commafeed.backend.dao.FeedEntryStatusDAO; import com.commafeed.backend.dao.FeedSubscriptionDAO; -import com.commafeed.backend.favicon.AbstractFaviconFetcher.Favicon; +import com.commafeed.backend.favicon.Favicon; import com.commafeed.backend.feed.FeedEntryKeyword; import com.commafeed.backend.feed.FeedFetcher; import com.commafeed.backend.feed.FeedFetcher.FeedFetcherResult; @@ -364,10 +364,10 @@ public class FeedREST { if (subscription == null) { return Response.status(Status.NOT_FOUND).build(); } + Feed feed = subscription.getFeed(); Favicon icon = feedService.fetchFavicon(feed); - - ResponseBuilder builder = Response.ok(icon.getIcon(), StringUtils.defaultIfBlank(icon.getMediaType(), "image/x-icon")); + ResponseBuilder builder = Response.ok(icon.getIcon(), icon.getMediaType()); CacheControl cacheControl = new CacheControl(); cacheControl.setMaxAge(2592000); diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/resource/fever/FeverREST.java b/commafeed-server/src/main/java/com/commafeed/frontend/resource/fever/FeverREST.java index b957a792..21e7016b 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/resource/fever/FeverREST.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/resource/fever/FeverREST.java @@ -21,7 +21,7 @@ import com.commafeed.backend.dao.FeedCategoryDAO; import com.commafeed.backend.dao.FeedEntryDAO; import com.commafeed.backend.dao.FeedEntryStatusDAO; import com.commafeed.backend.dao.FeedSubscriptionDAO; -import com.commafeed.backend.favicon.AbstractFaviconFetcher.Favicon; +import com.commafeed.backend.favicon.Favicon; import com.commafeed.backend.model.Feed; import com.commafeed.backend.model.FeedCategory; import com.commafeed.backend.model.FeedEntry;