48h article window, add CISA feeds, remove dead feeds

This commit is contained in:
bot
2026-04-29 10:28:09 +03:00
parent 47d8394568
commit 898909e061
4 changed files with 8 additions and 9 deletions
-1
View File
@@ -13,7 +13,6 @@
"Cyber Security Hub": "https://www.cshub.com/rss-feeds", "Cyber Security Hub": "https://www.cshub.com/rss-feeds",
"PortSwigger Daily Swig": "https://portswigger.net/daily-swig/rss", "PortSwigger Daily Swig": "https://portswigger.net/daily-swig/rss",
"Qualys": "https://blog.qualys.com/feed", "Qualys": "https://blog.qualys.com/feed",
"Rapid7": "https://blog.rapid7.com/feed",
"0x44 Security Blog": "https://0x44.cc/feed.xml", "0x44 Security Blog": "https://0x44.cc/feed.xml",
"NCSC UK Blog": "https://www.ncsc.gov.uk/api/1/services/v1/all-rss-feed.xml", "NCSC UK Blog": "https://www.ncsc.gov.uk/api/1/services/v1/all-rss-feed.xml",
"FBI Cyber Feeds": "https://www.fbi.gov/feeds" "FBI Cyber Feeds": "https://www.fbi.gov/feeds"
-3
View File
@@ -14,15 +14,12 @@
"Check Point Research": "https://research.checkpoint.com/feed/", "Check Point Research": "https://research.checkpoint.com/feed/",
"RET2 Systems Blog": "https://blog.ret2.io/feed.xml", "RET2 Systems Blog": "https://blog.ret2.io/feed.xml",
"secret club": "https://secret.club/feed.xml", "secret club": "https://secret.club/feed.xml",
"j00ru vx tech": "https://j00ru.vexillium.org/feed/",
"Connor McGarr": "https://connormcgarr.github.io/feed.xml", "Connor McGarr": "https://connormcgarr.github.io/feed.xml",
"phoenhex team": "https://phoenhex.re/feed.xml", "phoenhex team": "https://phoenhex.re/feed.xml",
"Google Project Zero": "https://googleprojectzero.blogspot.com/feeds/posts/default", "Google Project Zero": "https://googleprojectzero.blogspot.com/feeds/posts/default",
"SpecterOps Blog": "https://specterops.io/blog/", "SpecterOps Blog": "https://specterops.io/blog/",
"Hack The Box - Red Teaming": "https://www.hackthebox.com/rss/blog/red-teaming", "Hack The Box - Red Teaming": "https://www.hackthebox.com/rss/blog/red-teaming",
"Code White": "https://code-white.com/rss/",
"TrustedSec Blog": "https://www.trustedsec.com/feed/", "TrustedSec Blog": "https://www.trustedsec.com/feed/",
"Outflank Blog": "https://outflank.nl/blog/feed/",
"Pentest Partners Blog": "https://www.pentestpartners.com/feed/", "Pentest Partners Blog": "https://www.pentestpartners.com/feed/",
"Black Hills InfoSec Blog": "https://www.blackhillsinfosec.com/blog/feed/", "Black Hills InfoSec Blog": "https://www.blackhillsinfosec.com/blog/feed/",
"xpnsec Blog": "https://blog.xpnsec.com/rss/" "xpnsec Blog": "https://blog.xpnsec.com/rss/"
+3
View File
@@ -1,5 +1,8 @@
{ {
"threat_intel": { "threat_intel": {
"CISA Advisories": "https://www.cisa.gov/cybersecurity-advisories/all.xml",
"CISA Alerts": "https://www.cisa.gov/cybersecurity-advisories/alerts.xml",
"CISA ICS Advisories": "https://www.cisa.gov/cybersecurity-advisories/ics-advisories.xml",
"SANS Internet Storm Center": "https://isc.sans.edu/rssfeed.xml", "SANS Internet Storm Center": "https://isc.sans.edu/rssfeed.xml",
"Vulnerability Lab": "https://www.vulnerability-lab.com/rss/rss.php", "Vulnerability Lab": "https://www.vulnerability-lab.com/rss/rss.php",
"Proofpoint Threat Insight": "https://www.proofpoint.com/us/rss.xml", "Proofpoint Threat Insight": "https://www.proofpoint.com/us/rss.xml",
+5 -5
View File
@@ -219,12 +219,12 @@ class RSSFeedManager:
'canonical_url': canonical_url, 'canonical_url': canonical_url,
} }
def is_article_from_today(self, published_dt: datetime) -> bool: def is_article_recent(self, published_dt: datetime) -> bool:
"""Allow only items published on today's UTC date.""" """Allow articles published within the last 48 hours."""
now_utc = datetime.now(timezone.utc).date()
if published_dt.tzinfo is None: if published_dt.tzinfo is None:
published_dt = published_dt.replace(tzinfo=timezone.utc) published_dt = published_dt.replace(tzinfo=timezone.utc)
return published_dt.astimezone(timezone.utc).date() == now_utc age = datetime.now(timezone.utc) - published_dt.astimezone(timezone.utc)
return age.total_seconds() <= 48 * 3600
def is_duplicate_article(self, article: Dict) -> bool: def is_duplicate_article(self, article: Dict) -> bool:
"""Check URL/content fingerprint duplicates against sent-history.""" """Check URL/content fingerprint duplicates against sent-history."""
@@ -309,7 +309,7 @@ class RSSFeedManager:
published_dt = datetime(*published[:6], tzinfo=timezone.utc) published_dt = datetime(*published[:6], tzinfo=timezone.utc)
# Strict real-time gate: today's UTC articles only. # Strict real-time gate: today's UTC articles only.
if not self.is_article_from_today(published_dt): if not self.is_article_recent(published_dt):
continue continue
# Get content/description # Get content/description