Skip to content

Commit

Permalink
Add library to get latest errata-info from RSS-feed
Browse files Browse the repository at this point in the history
  • Loading branch information
m-bucher committed Oct 28, 2024
1 parent 53578d9 commit 6973881
Show file tree
Hide file tree
Showing 6 changed files with 405 additions and 0 deletions.
5 changes: 5 additions & 0 deletions .rubocop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,11 @@ Metrics/PerceivedComplexity:
Max: 22


RSpec/MultipleDescribes:
Exclude:
- 'spec/lib/deb_erratum_rss_spec.rb'


Style/BlockComments:
Exclude:
- 'spec/spec_helper.rb'
Expand Down
4 changes: 4 additions & 0 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ gem "simplecov-lcov", "~> 0.8.0", group: :test

gem "simplecov", "~> 0.22.0", group: :test

gem "rspec-collection_matchers", "~> 1.2", group: :test

# Added at 2021-11-12 17:19:23 +0200 by bernhard:
gem 'parallel', '~> 1.20', '< 1.21', group: %i[build test]

Expand All @@ -39,3 +41,5 @@ group :development, optional: true do
gem "byebug", "~> 11.1"
gem "pry", "~> 0.14.2"
end

gem "feedjira", "~> 3.2", group: :monitor
14 changes: 14 additions & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,23 @@ GEM
bzip2-ffi (1.1.1)
ffi (~> 1.0)
coderay (1.1.3)
crass (1.0.6)
diff-lcs (1.5.1)
docile (1.4.1)
feedjira (3.2.3)
loofah (>= 2.3.1, < 3)
sax-machine (>= 1.0, < 2)
ffi (1.17.0-x86_64-linux-gnu)
json (2.7.3)
json-stream (1.0.0)
json-streamer (2.1.0)
json-stream
loofah (2.23.1)
crass (~> 1.0.2)
nokogiri (>= 1.12.0)
method_source (1.1.0)
nokogiri (1.16.7-x86_64-linux)
racc (~> 1.4)
parallel (1.20.1)
parser (3.3.5.0)
ast (~> 2.4.1)
Expand All @@ -30,6 +39,8 @@ GEM
rspec-core (~> 3.13.0)
rspec-expectations (~> 3.13.0)
rspec-mocks (~> 3.13.0)
rspec-collection_matchers (1.2.1)
rspec-expectations (>= 2.99.0.beta1)
rspec-core (3.13.2)
rspec-support (~> 3.13.0)
rspec-expectations (3.13.3)
Expand All @@ -56,6 +67,7 @@ GEM
ruby-debian (0.3.8)
ruby-progressbar (1.13.0)
ruby-xz (1.0.3)
sax-machine (1.3.2)
simplecov (0.22.0)
docile (~> 1.1)
simplecov-html (~> 0.11)
Expand All @@ -73,10 +85,12 @@ PLATFORMS
DEPENDENCIES
byebug (~> 11.1)
bzip2-ffi (~> 1.0)
feedjira (~> 3.2)
json-streamer (~> 2.1)
parallel (~> 1.20, < 1.21)
pry (~> 0.14.2)
rspec (~> 3.13)
rspec-collection_matchers (~> 1.2)
rubocop (~> 1.51.0)
rubocop-rspec (~> 3.0)
ruby-debian (~> 0.3.8)
Expand Down
73 changes: 73 additions & 0 deletions lib/deb_erratum_rss.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
# frozen_string_literal: true

require 'net/http'
require 'feedjira'

# module to inject #erratum_id into Feedjira's feed-entries
module ErrataEntryUtilities
def erratum_id
title.split.first.slice(/[\w-]+/)
end
end
Feedjira::Parser::RSSEntry.include ErrataEntryUtilities

# Generic class to extract information from Debian/Ubuntu 'errata' RSS-feeds (security announcements)
class LatestErratum
ACCEPTED_CONTENT_TYPES = [
'application/rss+xml',
'text/xml'
].freeze
def initialize(url)
res = Net::HTTP.get_response(URI(url))
raise "Unsupported content-type: #{res['content-type']}" unless ACCEPTED_CONTENT_TYPES.include? res['content-type'].split(';').first

@feed = Feedjira.parse(res.body)
end

def latest
entries.first
end

def latest_published
latest.published
end

def latest_id
latest.erratum_id
end

def since_yesterday
@feed.entries.select { |entry| entry.published + 1 >= Time.now }
end

# returns array of the latest 'num' feed-entries
# TODO: assumes the feed is sorted by date
def recent(num=1)
entries.slice(0, num)
end

def entries
@feed.entries
end
end

# read and parse latest Debian Security Announcements (DSA) RSS-feed
class LatestDsaErratum < LatestErratum
def initialize
super('https://www.debian.org/security/dsa')
end
end

# read and parse latest Debian LTS Security Announcements (DLA) RSS-feed
class LatestDlaErratum < LatestErratum
def initialize
super('https://www.debian.org/lts/security/dla')
end
end

# read and parse latest Ubuntu Security Notices (USN) RSS-feed
class LatestUsnErratum < LatestErratum
def initialize
super('https://ubuntu.com/security/notices/rss.xml')
end
end
223 changes: 223 additions & 0 deletions spec/fixtures/dsa.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,223 @@
<?xml version="1.0" encoding="UTF-8" ?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel rdf:about="https://www.debian.org/security/dsa.rdf">
<title>Debian Security</title>
<link>https://www.debian.org/security/dsa.rdf</link>
<dc:date>2024-10-25T11:32:10Z</dc:date>
<description>Debian Security Advisories</description>
<items>
<rdf:Seq>
<rdf:li rdf:resource="https://lists.debian.org/debian-security-announce/2024/msg00209.html" />
<rdf:li rdf:resource="https://lists.debian.org/debian-security-announce/2024/msg00208.html" />
<rdf:li rdf:resource="https://lists.debian.org/debian-security-announce/2024/msg00207.html" />
<rdf:li rdf:resource="https://lists.debian.org/debian-security-announce/2024/msg00206.html" />
<rdf:li rdf:resource="https://lists.debian.org/debian-security-announce/2024/msg00205.html" />
<rdf:li rdf:resource="https://lists.debian.org/debian-security-announce/2024/msg00204.html" />
<rdf:li rdf:resource="https://lists.debian.org/debian-security-announce/2024/msg00203.html" />
<rdf:li rdf:resource="https://lists.debian.org/debian-security-announce/2024/msg00202.html" />
<rdf:li rdf:resource="https://lists.debian.org/debian-security-announce/2024/msg00201.html" />
<rdf:li rdf:resource="https://lists.debian.org/debian-security-announce/2024/msg00200.html" />
<rdf:li rdf:resource="https://lists.debian.org/debian-security-announce/2024/msg00199.html" />
<rdf:li rdf:resource="https://lists.debian.org/debian-security-announce/2024/msg00198.html" />
<rdf:li rdf:resource="https://lists.debian.org/debian-security-announce/2024/msg00197.html" />
<rdf:li rdf:resource="https://lists.debian.org/debian-security-announce/2024/msg00196.html" />
<rdf:li rdf:resource="https://lists.debian.org/debian-security-announce/2024/msg00195.html" />
<rdf:li rdf:resource="https://lists.debian.org/debian-security-announce/2024/msg00194.html" />
<rdf:li rdf:resource="https://lists.debian.org/debian-security-announce/2024/msg00193.html" />
<rdf:li rdf:resource="https://lists.debian.org/debian-security-announce/2024/msg00192.html" />
<rdf:li rdf:resource="https://lists.debian.org/debian-security-announce/2024/msg00191.html" />
<rdf:li rdf:resource="https://lists.debian.org/debian-security-announce/2024/msg00190.html" />
<rdf:li rdf:resource="https://lists.debian.org/debian-security-announce/2024/msg00189.html" />
<rdf:li rdf:resource="https://lists.debian.org/debian-security-announce/2024/msg00188.html" />
<rdf:li rdf:resource="https://lists.debian.org/debian-security-announce/2024/msg00187.html" />
<rdf:li rdf:resource="https://lists.debian.org/debian-security-announce/2024/msg00186.html" />
<rdf:li rdf:resource="https://lists.debian.org/debian-security-announce/2024/msg00185.html" />
<rdf:li rdf:resource="https://lists.debian.org/debian-security-announce/2024/msg00184.html" />
<rdf:li rdf:resource="https://lists.debian.org/debian-security-announce/2024/msg00183.html" />
<rdf:li rdf:resource="https://lists.debian.org/debian-security-announce/2024/msg00182.html" />
<rdf:li rdf:resource="https://lists.debian.org/debian-security-announce/2024/msg00181.html" />
<rdf:li rdf:resource="https://lists.debian.org/debian-security-announce/2024/msg00180.html" />
</rdf:Seq>
</items>
</channel>
<item rdf:about="https://lists.debian.org/debian-security-announce/2024/msg00209.html">
<title>DSA-5795-1 python-sql - security update</title>
<link>https://lists.debian.org/debian-security-announce/2024/msg00209.html</link>
<dc:date>2024-10-21</dc:date>
<description>&lt;a href=&quot;https://security-tracker.debian.org/tracker/DSA-5795-1&quot;&gt;https://security-tracker.debian.org/tracker/DSA-5795-1&lt;/a&gt;</description>
</item>
<item rdf:about="https://lists.debian.org/debian-security-announce/2024/msg00208.html">
<title>DSA-5794-1 openjdk-17 - security update</title>
<link>https://lists.debian.org/debian-security-announce/2024/msg00208.html</link>
<dc:date>2024-10-21</dc:date>
<description>&lt;a href=&quot;https://security-tracker.debian.org/tracker/DSA-5794-1&quot;&gt;https://security-tracker.debian.org/tracker/DSA-5794-1&lt;/a&gt;</description>
</item>
<item rdf:about="https://lists.debian.org/debian-security-announce/2024/msg00207.html">
<title>DSA-5793-1 chromium - security update</title>
<link>https://lists.debian.org/debian-security-announce/2024/msg00207.html</link>
<dc:date>2024-10-20</dc:date>
<description>&lt;a href=&quot;https://security-tracker.debian.org/tracker/DSA-5793-1&quot;&gt;https://security-tracker.debian.org/tracker/DSA-5793-1&lt;/a&gt;</description>
</item>
<item rdf:about="https://lists.debian.org/debian-security-announce/2024/msg00206.html">
<title>DSA-5792-1 webkit2gtk - security update</title>
<link>https://lists.debian.org/debian-security-announce/2024/msg00206.html</link>
<dc:date>2024-10-14</dc:date>
<description>&lt;a href=&quot;https://security-tracker.debian.org/tracker/DSA-5792-1&quot;&gt;https://security-tracker.debian.org/tracker/DSA-5792-1&lt;/a&gt;</description>
</item>
<item rdf:about="https://lists.debian.org/debian-security-announce/2024/msg00205.html">
<title>DSA-5791-1 python-reportlab - security update</title>
<link>https://lists.debian.org/debian-security-announce/2024/msg00205.html</link>
<dc:date>2024-10-13</dc:date>
<description>&lt;a href=&quot;https://security-tracker.debian.org/tracker/DSA-5791-1&quot;&gt;https://security-tracker.debian.org/tracker/DSA-5791-1&lt;/a&gt;</description>
</item>
<item rdf:about="https://lists.debian.org/debian-security-announce/2024/msg00204.html">
<title>DSA-5790-1 node-dompurify - security update</title>
<link>https://lists.debian.org/debian-security-announce/2024/msg00204.html</link>
<dc:date>2024-10-13</dc:date>
<description>&lt;a href=&quot;https://security-tracker.debian.org/tracker/DSA-5790-1&quot;&gt;https://security-tracker.debian.org/tracker/DSA-5790-1&lt;/a&gt;</description>
</item>
<item rdf:about="https://lists.debian.org/debian-security-announce/2024/msg00203.html">
<title>DSA-5789-1 thunderbird - security update</title>
<link>https://lists.debian.org/debian-security-announce/2024/msg00203.html</link>
<dc:date>2024-10-12</dc:date>
<description>&lt;a href=&quot;https://security-tracker.debian.org/tracker/DSA-5789-1&quot;&gt;https://security-tracker.debian.org/tracker/DSA-5789-1&lt;/a&gt;</description>
</item>
<item rdf:about="https://lists.debian.org/debian-security-announce/2024/msg00202.html">
<title>DSA-5788-1 firefox-esr - security update</title>
<link>https://lists.debian.org/debian-security-announce/2024/msg00202.html</link>
<dc:date>2024-10-10</dc:date>
<description>&lt;a href=&quot;https://security-tracker.debian.org/tracker/DSA-5788-1&quot;&gt;https://security-tracker.debian.org/tracker/DSA-5788-1&lt;/a&gt;</description>
</item>
<item rdf:about="https://lists.debian.org/debian-security-announce/2024/msg00201.html">
<title>DSA-5787-1 chromium - security update</title>
<link>https://lists.debian.org/debian-security-announce/2024/msg00201.html</link>
<dc:date>2024-10-09</dc:date>
<description>&lt;a href=&quot;https://security-tracker.debian.org/tracker/DSA-5787-1&quot;&gt;https://security-tracker.debian.org/tracker/DSA-5787-1&lt;/a&gt;</description>
</item>
<item rdf:about="https://lists.debian.org/debian-security-announce/2024/msg00200.html">
<title>DSA-5729-2 apache2 - regression update</title>
<link>https://lists.debian.org/debian-security-announce/2024/msg00200.html</link>
<dc:date>2024-10-08</dc:date>
<description>&lt;a href=&quot;https://security-tracker.debian.org/tracker/DSA-5729-2&quot;&gt;https://security-tracker.debian.org/tracker/DSA-5729-2&lt;/a&gt;</description>
</item>
<item rdf:about="https://lists.debian.org/debian-security-announce/2024/msg00199.html">
<title>DSA-5786-1 libgsf - security update</title>
<link>https://lists.debian.org/debian-security-announce/2024/msg00199.html</link>
<dc:date>2024-10-05</dc:date>
<description>&lt;a href=&quot;https://security-tracker.debian.org/tracker/DSA-5786-1&quot;&gt;https://security-tracker.debian.org/tracker/DSA-5786-1&lt;/a&gt;</description>
</item>
<item rdf:about="https://lists.debian.org/debian-security-announce/2024/msg00198.html">
<title>DSA-5785-1 mediawiki - security update</title>
<link>https://lists.debian.org/debian-security-announce/2024/msg00198.html</link>
<dc:date>2024-10-05</dc:date>
<description>&lt;a href=&quot;https://security-tracker.debian.org/tracker/DSA-5785-1&quot;&gt;https://security-tracker.debian.org/tracker/DSA-5785-1&lt;/a&gt;</description>
</item>
<item rdf:about="https://lists.debian.org/debian-security-announce/2024/msg00197.html">
<title>DSA-5784-1 oath-toolkit - security update</title>
<link>https://lists.debian.org/debian-security-announce/2024/msg00197.html</link>
<dc:date>2024-10-04</dc:date>
<description>&lt;a href=&quot;https://security-tracker.debian.org/tracker/DSA-5784-1&quot;&gt;https://security-tracker.debian.org/tracker/DSA-5784-1&lt;/a&gt;</description>
</item>
<item rdf:about="https://lists.debian.org/debian-security-announce/2024/msg00196.html">
<title>DSA-5783-1 firefox-esr - security update</title>
<link>https://lists.debian.org/debian-security-announce/2024/msg00196.html</link>
<dc:date>2024-10-04</dc:date>
<description>&lt;a href=&quot;https://security-tracker.debian.org/tracker/DSA-5783-1&quot;&gt;https://security-tracker.debian.org/tracker/DSA-5783-1&lt;/a&gt;</description>
</item>
<item rdf:about="https://lists.debian.org/debian-security-announce/2024/msg00195.html">
<title>DSA-5782-1 linux - security update</title>
<link>https://lists.debian.org/debian-security-announce/2024/msg00195.html</link>
<dc:date>2024-10-03</dc:date>
<description>&lt;a href=&quot;https://security-tracker.debian.org/tracker/DSA-5782-1&quot;&gt;https://security-tracker.debian.org/tracker/DSA-5782-1&lt;/a&gt;</description>
</item>
<item rdf:about="https://lists.debian.org/debian-security-announce/2024/msg00194.html">
<title>DSA-5781-1 chromium - security update</title>
<link>https://lists.debian.org/debian-security-announce/2024/msg00194.html</link>
<dc:date>2024-10-03</dc:date>
<description>&lt;a href=&quot;https://security-tracker.debian.org/tracker/DSA-5781-1&quot;&gt;https://security-tracker.debian.org/tracker/DSA-5781-1&lt;/a&gt;</description>
</item>
<item rdf:about="https://lists.debian.org/debian-security-announce/2024/msg00193.html">
<title>DSA-5780-1 php8.2 - security update</title>
<link>https://lists.debian.org/debian-security-announce/2024/msg00193.html</link>
<dc:date>2024-10-02</dc:date>
<description>&lt;a href=&quot;https://security-tracker.debian.org/tracker/DSA-5780-1&quot;&gt;https://security-tracker.debian.org/tracker/DSA-5780-1&lt;/a&gt;</description>
</item>
<item rdf:about="https://lists.debian.org/debian-security-announce/2024/msg00192.html">
<title>DSA-5779-1 cups - security update</title>
<link>https://lists.debian.org/debian-security-announce/2024/msg00192.html</link>
<dc:date>2024-09-29</dc:date>
<description>&lt;a href=&quot;https://security-tracker.debian.org/tracker/DSA-5779-1&quot;&gt;https://security-tracker.debian.org/tracker/DSA-5779-1&lt;/a&gt;</description>
</item>
<item rdf:about="https://lists.debian.org/debian-security-announce/2024/msg00191.html">
<title>DSA-5778-1 cups-filters - security update</title>
<link>https://lists.debian.org/debian-security-announce/2024/msg00191.html</link>
<dc:date>2024-09-29</dc:date>
<description>&lt;a href=&quot;https://security-tracker.debian.org/tracker/DSA-5778-1&quot;&gt;https://security-tracker.debian.org/tracker/DSA-5778-1&lt;/a&gt;</description>
</item>
<item rdf:about="https://lists.debian.org/debian-security-announce/2024/msg00190.html">
<title>DSA-5777-1 booth - security update</title>
<link>https://lists.debian.org/debian-security-announce/2024/msg00190.html</link>
<dc:date>2024-09-27</dc:date>
<description>&lt;a href=&quot;https://security-tracker.debian.org/tracker/DSA-5777-1&quot;&gt;https://security-tracker.debian.org/tracker/DSA-5777-1&lt;/a&gt;</description>
</item>
<item rdf:about="https://lists.debian.org/debian-security-announce/2024/msg00189.html">
<title>DSA-5776-1 tryton-server - security update</title>
<link>https://lists.debian.org/debian-security-announce/2024/msg00189.html</link>
<dc:date>2024-09-27</dc:date>
<description>&lt;a href=&quot;https://security-tracker.debian.org/tracker/DSA-5776-1&quot;&gt;https://security-tracker.debian.org/tracker/DSA-5776-1&lt;/a&gt;</description>
</item>
<item rdf:about="https://lists.debian.org/debian-security-announce/2024/msg00188.html">
<title>DSA-5775-1 chromium - security update</title>
<link>https://lists.debian.org/debian-security-announce/2024/msg00188.html</link>
<dc:date>2024-09-26</dc:date>
<description>&lt;a href=&quot;https://security-tracker.debian.org/tracker/DSA-5775-1&quot;&gt;https://security-tracker.debian.org/tracker/DSA-5775-1&lt;/a&gt;</description>
</item>
<item rdf:about="https://lists.debian.org/debian-security-announce/2024/msg00187.html">
<title>DSA-5774-1 ruby-saml - security update</title>
<link>https://lists.debian.org/debian-security-announce/2024/msg00187.html</link>
<dc:date>2024-09-20</dc:date>
<description>&lt;a href=&quot;https://security-tracker.debian.org/tracker/DSA-5774-1&quot;&gt;https://security-tracker.debian.org/tracker/DSA-5774-1&lt;/a&gt;</description>
</item>
<item rdf:about="https://lists.debian.org/debian-security-announce/2024/msg00186.html">
<title>DSA-5773-1 chromium - security update</title>
<link>https://lists.debian.org/debian-security-announce/2024/msg00186.html</link>
<dc:date>2024-09-19</dc:date>
<description>&lt;a href=&quot;https://security-tracker.debian.org/tracker/DSA-5773-1&quot;&gt;https://security-tracker.debian.org/tracker/DSA-5773-1&lt;/a&gt;</description>
</item>
<item rdf:about="https://lists.debian.org/debian-security-announce/2024/msg00185.html">
<title>DSA-5772-1 libreoffice - security update</title>
<link>https://lists.debian.org/debian-security-announce/2024/msg00185.html</link>
<dc:date>2024-09-17</dc:date>
<description>&lt;a href=&quot;https://security-tracker.debian.org/tracker/DSA-5772-1&quot;&gt;https://security-tracker.debian.org/tracker/DSA-5772-1&lt;/a&gt;</description>
</item>
<item rdf:about="https://lists.debian.org/debian-security-announce/2024/msg00184.html">
<title>DSA-5771-1 php-twig - security update</title>
<link>https://lists.debian.org/debian-security-announce/2024/msg00184.html</link>
<dc:date>2024-09-17</dc:date>
<description>&lt;a href=&quot;https://security-tracker.debian.org/tracker/DSA-5771-1&quot;&gt;https://security-tracker.debian.org/tracker/DSA-5771-1&lt;/a&gt;</description>
</item>
<item rdf:about="https://lists.debian.org/debian-security-announce/2024/msg00183.html">
<title>DSA-5770-1 expat - security update</title>
<link>https://lists.debian.org/debian-security-announce/2024/msg00183.html</link>
<dc:date>2024-09-17</dc:date>
<description>&lt;a href=&quot;https://security-tracker.debian.org/tracker/DSA-5770-1&quot;&gt;https://security-tracker.debian.org/tracker/DSA-5770-1&lt;/a&gt;</description>
</item>
<item rdf:about="https://lists.debian.org/debian-security-announce/2024/msg00182.html">
<title>DSA-5769-1 git - security update</title>
<link>https://lists.debian.org/debian-security-announce/2024/msg00182.html</link>
<dc:date>2024-09-13</dc:date>
<description>&lt;a href=&quot;https://security-tracker.debian.org/tracker/DSA-5769-1&quot;&gt;https://security-tracker.debian.org/tracker/DSA-5769-1&lt;/a&gt;</description>
</item>
<item rdf:about="https://lists.debian.org/debian-security-announce/2024/msg00181.html">
<title>DSA-5768-1 chromium - security update</title>
<link>https://lists.debian.org/debian-security-announce/2024/msg00181.html</link>
<dc:date>2024-09-11</dc:date>
<description>&lt;a href=&quot;https://security-tracker.debian.org/tracker/DSA-5768-1&quot;&gt;https://security-tracker.debian.org/tracker/DSA-5768-1&lt;/a&gt;</description>
</item>
<item rdf:about="https://lists.debian.org/debian-security-announce/2024/msg00180.html">
<title>DSA-5767-1 thunderbird - security update</title>
<link>https://lists.debian.org/debian-security-announce/2024/msg00180.html</link>
<dc:date>2024-09-08</dc:date>
<description>&lt;a href=&quot;https://security-tracker.debian.org/tracker/DSA-5767-1&quot;&gt;https://security-tracker.debian.org/tracker/DSA-5767-1&lt;/a&gt;</description>
</item>
</rdf:RDF>
Loading

0 comments on commit 6973881

Please sign in to comment.