From 669cfe895233a9aab71b83fa66cafcf587f4bd2c Mon Sep 17 00:00:00 2001 From: jeremystretch Date: Mon, 27 Mar 2023 09:29:51 -0400 Subject: [PATCH] Closes #12062: Avoid caching invalid RSS feed content --- netbox/extras/dashboard/widgets.py | 12 ++++--- .../extras/dashboard/widgets/rssfeed.html | 33 ++++++++++++------- 2 files changed, 28 insertions(+), 17 deletions(-) diff --git a/netbox/extras/dashboard/widgets.py b/netbox/extras/dashboard/widgets.py index 13cc60af0..253208cbf 100644 --- a/netbox/extras/dashboard/widgets.py +++ b/netbox/extras/dashboard/widgets.py @@ -193,14 +193,16 @@ class RSSFeedWidget(DashboardWidget): return f'dashboard_rss_{url_checksum}' def get_feed(self): - # Fetch RSS content from cache + # Fetch RSS content from cache if available if feed_content := cache.get(self.cache_key): feed = feedparser.FeedParserDict(feed_content) else: feed = feedparser.parse(self.config['feed_url']) - # Cap number of entries - max_entries = self.config.get('max_entries') - feed['entries'] = feed['entries'][:max_entries] - cache.set(self.cache_key, dict(feed), self.config.get('cache_timeout')) + if not feed.bozo: + # Cap number of entries + max_entries = self.config.get('max_entries') + feed['entries'] = feed['entries'][:max_entries] + # Cache the feed content + cache.set(self.cache_key, dict(feed), self.config.get('cache_timeout')) return feed diff --git a/netbox/templates/extras/dashboard/widgets/rssfeed.html b/netbox/templates/extras/dashboard/widgets/rssfeed.html index 293e22b7f..5de3c3105 100644 --- a/netbox/templates/extras/dashboard/widgets/rssfeed.html +++ b/netbox/templates/extras/dashboard/widgets/rssfeed.html @@ -1,13 +1,22 @@ -
- {% for entry in feed.entries %} -
-
{{ entry.title }}
-
- {{ entry.summary|safe }} +{% if not feed.bozo %} +
+ {% for entry in feed.entries %} +
+
{{ entry.title }}
+
+ {{ entry.summary|safe }} +
-
- {% empty %} -
No content found
- {% endfor %} -
- + {% empty %} +
No content found
+ {% endfor %} +
+{% else %} + {# There was an error retrieving/parsing the feed #} + + There was a problem fetching the RSS feed: + +
+Response status: {{ feed.status }}
+Error: {{ feed.bozo_exception|escape }}
+{% endif %}