nvd_feed_api 0.3.1 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/FUNDING.yml +3 -0
- data/.gitlab-ci.yml +6 -14
- data/.rubocop.yml +4 -1
- data/.tool-versions +1 -1
- data/.yardopts +2 -0
- data/Gemfile +24 -1
- data/Gemfile.lock +35 -38
- data/lib/nvd_feed_api/feed.rb +14 -17
- data/lib/nvd_feed_api/meta.rb +5 -6
- data/lib/nvd_feed_api/version.rb +1 -1
- data/lib/nvd_feed_api.rb +19 -14
- data/nvd_feed_api.gemspec +11 -22
- data/pages/CHANGELOG.md +16 -1
- metadata +12 -119
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d03fa81fd296a62aba7a9356b3c41135851febb254af4db13758c5b76475739f
|
4
|
+
data.tar.gz: c0d716121dccaeaee6944ccd3e0d85cf59854084ae68d0f7347fb678dc4760bf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b5bef50a5709e8bd53a138110e80f6a5ee34d02f5849e1a3d9add0c9573e963926adbdf6eeb610b75d04d25d285b4450b8e99aa724582d382ed072ef46c89a8a
|
7
|
+
data.tar.gz: 7be0a9191d6efb0e7a80e7a868d8d019186268008473e3e731fe9e4e3e1d21b85b7cc6189c912d5315495dbb12dbaaa688ca077823ba844a01d91b11696ae954
|
data/.github/FUNDING.yml
ADDED
data/.gitlab-ci.yml
CHANGED
@@ -25,25 +25,17 @@ before_script:
|
|
25
25
|
- bundle exec rubocop
|
26
26
|
- bundle exec rake test
|
27
27
|
|
28
|
-
test:2.4:
|
29
|
-
<<: *job_definition
|
30
|
-
image: ruby:2.4-alpine
|
31
|
-
|
32
|
-
test:2.5:
|
33
|
-
<<: *job_definition
|
34
|
-
image: ruby:2.5-alpine
|
35
|
-
|
36
|
-
test:2.6:
|
37
|
-
<<: *job_definition
|
38
|
-
image: ruby:2.6-alpine
|
28
|
+
#test:2.4:
|
29
|
+
# <<: *job_definition
|
30
|
+
# image: ruby:2.4-alpine
|
39
31
|
|
40
|
-
test:
|
32
|
+
test:3.1:
|
41
33
|
<<: *job_definition
|
42
|
-
image: ruby:
|
34
|
+
image: ruby:3.1-alpine
|
43
35
|
|
44
36
|
pages:
|
45
37
|
stage: deploy
|
46
|
-
image: ruby:
|
38
|
+
image: ruby:3.1-alpine
|
47
39
|
script:
|
48
40
|
- bundle exec yard doc
|
49
41
|
- mkdir public
|
data/.rubocop.yml
CHANGED
@@ -25,7 +25,7 @@ Metrics/ClassLength:
|
|
25
25
|
Enabled: false
|
26
26
|
|
27
27
|
Metrics/CyclomaticComplexity:
|
28
|
-
Max:
|
28
|
+
Max: 25
|
29
29
|
|
30
30
|
Metrics/MethodLength:
|
31
31
|
Max: 100
|
@@ -39,6 +39,9 @@ Naming/VariableName:
|
|
39
39
|
Security/JSONLoad:
|
40
40
|
Enabled: false
|
41
41
|
|
42
|
+
Style/CaseLikeIf:
|
43
|
+
Enabled: true
|
44
|
+
|
42
45
|
Style/FrozenStringLiteralComment:
|
43
46
|
EnforcedStyle: never
|
44
47
|
|
data/.tool-versions
CHANGED
@@ -1 +1 @@
|
|
1
|
-
ruby
|
1
|
+
ruby 3.1.0
|
data/.yardopts
CHANGED
data/Gemfile
CHANGED
@@ -1,4 +1,27 @@
|
|
1
1
|
source 'https://rubygems.org'
|
2
2
|
|
3
|
-
# Specify your gem's dependencies in .gemspec
|
4
3
|
gemspec
|
4
|
+
|
5
|
+
group :runtime, :cli do
|
6
|
+
gem 'archive-zip', '~> 0.11'
|
7
|
+
gem 'nokogiri', '~> 1.11'
|
8
|
+
gem 'oj', '>= 3.7.8', '<4'
|
9
|
+
end
|
10
|
+
|
11
|
+
group :development, :install do
|
12
|
+
gem 'bundler', '~> 2.1'
|
13
|
+
end
|
14
|
+
|
15
|
+
group :development, :test do
|
16
|
+
gem 'minitest', '~> 5.12'
|
17
|
+
gem 'rake', '~> 13.0'
|
18
|
+
end
|
19
|
+
|
20
|
+
group :development, :lint do
|
21
|
+
gem 'rubocop', '~> 1.23'
|
22
|
+
end
|
23
|
+
|
24
|
+
group :development, :docs do
|
25
|
+
gem 'commonmarker', '~> 0.21' # for markdown support in YARD
|
26
|
+
gem 'yard', ['>= 0.9.27', '< 0.10']
|
27
|
+
end
|
data/Gemfile.lock
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
nvd_feed_api (0.
|
4
|
+
nvd_feed_api (0.4.0)
|
5
5
|
archive-zip (~> 0.11)
|
6
|
-
nokogiri (~> 1.
|
6
|
+
nokogiri (~> 1.11)
|
7
7
|
oj (>= 3.7.8, < 4)
|
8
8
|
|
9
9
|
GEM
|
@@ -11,57 +11,54 @@ GEM
|
|
11
11
|
specs:
|
12
12
|
archive-zip (0.12.0)
|
13
13
|
io-like (~> 0.3.0)
|
14
|
-
ast (2.4.
|
15
|
-
commonmarker (0.
|
16
|
-
ruby-enum (~> 0.5)
|
17
|
-
concurrent-ruby (1.1.7)
|
18
|
-
github-markup (3.0.4)
|
19
|
-
i18n (1.8.5)
|
20
|
-
concurrent-ruby (~> 1.0)
|
14
|
+
ast (2.4.2)
|
15
|
+
commonmarker (0.23.2)
|
21
16
|
io-like (0.3.1)
|
22
|
-
mini_portile2 (2.
|
23
|
-
minitest (5.
|
24
|
-
nokogiri (1.
|
25
|
-
mini_portile2 (~> 2.
|
26
|
-
|
27
|
-
|
28
|
-
|
17
|
+
mini_portile2 (2.7.1)
|
18
|
+
minitest (5.15.0)
|
19
|
+
nokogiri (1.13.1)
|
20
|
+
mini_portile2 (~> 2.7.0)
|
21
|
+
racc (~> 1.4)
|
22
|
+
oj (3.13.10)
|
23
|
+
parallel (1.21.0)
|
24
|
+
parser (3.0.3.2)
|
29
25
|
ast (~> 2.4.1)
|
26
|
+
racc (1.6.0)
|
30
27
|
rainbow (3.0.0)
|
31
|
-
rake (13.0.
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
rubocop (0.92.0)
|
28
|
+
rake (13.0.6)
|
29
|
+
regexp_parser (2.2.0)
|
30
|
+
rexml (3.2.5)
|
31
|
+
rubocop (1.24.1)
|
36
32
|
parallel (~> 1.10)
|
37
|
-
parser (>=
|
33
|
+
parser (>= 3.0.0.0)
|
38
34
|
rainbow (>= 2.2.2, < 4.0)
|
39
|
-
regexp_parser (>= 1.
|
35
|
+
regexp_parser (>= 1.8, < 3.0)
|
40
36
|
rexml
|
41
|
-
rubocop-ast (>=
|
37
|
+
rubocop-ast (>= 1.15.1, < 2.0)
|
42
38
|
ruby-progressbar (~> 1.7)
|
43
|
-
unicode-display_width (>= 1.4.0, <
|
44
|
-
rubocop-ast (
|
45
|
-
parser (>=
|
46
|
-
ruby-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
39
|
+
unicode-display_width (>= 1.4.0, < 3.0)
|
40
|
+
rubocop-ast (1.15.1)
|
41
|
+
parser (>= 3.0.1.1)
|
42
|
+
ruby-progressbar (1.11.0)
|
43
|
+
unicode-display_width (2.1.0)
|
44
|
+
webrick (1.7.0)
|
45
|
+
yard (0.9.27)
|
46
|
+
webrick (~> 1.7.0)
|
51
47
|
|
52
48
|
PLATFORMS
|
53
49
|
ruby
|
54
50
|
|
55
51
|
DEPENDENCIES
|
52
|
+
archive-zip (~> 0.11)
|
56
53
|
bundler (~> 2.1)
|
57
54
|
commonmarker (~> 0.21)
|
58
|
-
|
59
|
-
|
55
|
+
minitest (~> 5.12)
|
56
|
+
nokogiri (~> 1.11)
|
60
57
|
nvd_feed_api!
|
58
|
+
oj (>= 3.7.8, < 4)
|
61
59
|
rake (~> 13.0)
|
62
|
-
|
63
|
-
|
64
|
-
yard (~> 0.9)
|
60
|
+
rubocop (~> 1.23)
|
61
|
+
yard (>= 0.9.27, < 0.10)
|
65
62
|
|
66
63
|
BUNDLED WITH
|
67
|
-
2.
|
64
|
+
2.3.6
|
data/lib/nvd_feed_api/feed.rb
CHANGED
@@ -13,7 +13,7 @@ class NVDFeedScraper
|
|
13
13
|
class Feed
|
14
14
|
class << self
|
15
15
|
# Get / set default feed storage location, where will be stored JSON feeds and archives by default.
|
16
|
-
# @return [String] default feed storage location. Default to
|
16
|
+
# @return [String] default feed storage location. Default to `/tmp/`.
|
17
17
|
# @example
|
18
18
|
# NVDFeedScraper::Feed.default_storage_location = '/srv/downloads/'
|
19
19
|
attr_accessor :default_storage_location
|
@@ -69,11 +69,11 @@ class NVDFeedScraper
|
|
69
69
|
# f.json_file # => "/tmp/nvdcve-1.0-2014.json"
|
70
70
|
attr_reader :json_file
|
71
71
|
|
72
|
-
# @return [String] the type of the feed, should always be
|
72
|
+
# @return [String] the type of the feed, should always be `CVE`.
|
73
73
|
# @note Return nil if not previously loaded by {#json_pull}.
|
74
74
|
attr_reader :data_type
|
75
75
|
|
76
|
-
# @return [String] the format of the feed, should always be
|
76
|
+
# @return [String] the format of the feed, should always be `MITRE`.
|
77
77
|
# @note Return nil if not previously loaded by {#json_pull}.
|
78
78
|
attr_reader :data_format
|
79
79
|
|
@@ -96,7 +96,7 @@ class NVDFeedScraper
|
|
96
96
|
# @param gz_url [String] see {#gz_url}.
|
97
97
|
# @param zip_url [String] see {#zip_url}.
|
98
98
|
def initialize(name, updated, meta_url, gz_url, zip_url)
|
99
|
-
#
|
99
|
+
# From meta file
|
100
100
|
@name = name
|
101
101
|
@updated = updated
|
102
102
|
@meta_url = meta_url
|
@@ -146,7 +146,7 @@ class NVDFeedScraper
|
|
146
146
|
# Download the JSON feed and fill the attribute.
|
147
147
|
# @param opts [Hash] see {#download_file}.
|
148
148
|
# @return [String] the path of the saved JSON file. Default use {Feed#default_storage_location}.
|
149
|
-
# @note Will
|
149
|
+
# @note Will download and save the zip of the JSON file, unzip and save it. This massively consume time.
|
150
150
|
# @see #json_file
|
151
151
|
def json_pull(opts = {})
|
152
152
|
opts[:destination_path] ||= Feed.default_storage_location
|
@@ -229,7 +229,8 @@ class NVDFeedScraper
|
|
229
229
|
raise 'no argument provided, 1 or more expected' if arg_cve.empty?
|
230
230
|
|
231
231
|
if arg_cve.length == 1
|
232
|
-
|
232
|
+
case arg_cve[0]
|
233
|
+
when String
|
233
234
|
raise "bad CVE name (#{arg_cve[0]})" unless /^CVE-[0-9]{4}-[0-9]{4,}$/i.match?(arg_cve[0])
|
234
235
|
|
235
236
|
doc = Oj::Doc.open(File.read(@json_file))
|
@@ -241,7 +242,7 @@ class NVDFeedScraper
|
|
241
242
|
end
|
242
243
|
end
|
243
244
|
doc.close
|
244
|
-
|
245
|
+
when Array
|
245
246
|
return_value = []
|
246
247
|
# Sorting CVE can allow us to parse quicker
|
247
248
|
# Upcase to be sure include? works
|
@@ -363,27 +364,23 @@ class NVDFeedScraper
|
|
363
364
|
uri = URI(file_url)
|
364
365
|
filename = uri.path.split('/').last
|
365
366
|
destination_file = destination_path + filename
|
366
|
-
|
367
|
-
if
|
368
|
-
|
369
|
-
|
370
|
-
skip_download = true if opts[:sha256].casecmp(computed_h.hexdigest).zero?
|
371
|
-
end
|
367
|
+
if !opts[:sha256].nil? && File.file?(destination_file)
|
368
|
+
# Verify hash to see if it is the latest
|
369
|
+
computed_h = Digest::SHA256.file(destination_file)
|
370
|
+
skip_download = true if opts[:sha256].casecmp(computed_h.hexdigest).zero?
|
372
371
|
end
|
373
372
|
unless skip_download
|
374
373
|
res = Net::HTTP.get_response(uri)
|
375
374
|
raise "#{file_url} ended with #{res.code} #{res.message}" unless res.is_a?(Net::HTTPSuccess)
|
376
375
|
|
377
|
-
File.
|
378
|
-
file.write(res.body)
|
379
|
-
end
|
376
|
+
File.binwrite(destination_file, res.body)
|
380
377
|
end
|
381
378
|
return destination_file
|
382
379
|
end
|
383
380
|
|
384
381
|
# Update the feed
|
385
382
|
# @param fresh_feed [Feed] the fresh feed from which the feed will be updated.
|
386
|
-
# @return [Boolean]
|
383
|
+
# @return [Boolean] `true` if the feed was updated, `false` if it wasn't.
|
387
384
|
# @note Is not intended to be used directly, use {NVDFeedScraper#update_feeds} instead.
|
388
385
|
def update!(fresh_feed)
|
389
386
|
return_value = false
|
data/lib/nvd_feed_api/meta.rb
CHANGED
@@ -76,17 +76,16 @@ class NVDFeedScraper
|
|
76
76
|
# Parse the meta file from the URL and set the attributes.
|
77
77
|
# @overload parse
|
78
78
|
# Parse the meta file from the URL and set the attributes.
|
79
|
-
# @return [Integer] Returns
|
79
|
+
# @return [Integer] Returns `0` when there is no error.
|
80
80
|
# @overload parse(url)
|
81
81
|
# Set the URL of the meta file of the feed and
|
82
82
|
# parse the meta file from the URL and set the attributes.
|
83
83
|
# @param url [String] see {Feed.meta_url}
|
84
|
-
# @return [Integer] Returns
|
84
|
+
# @return [Integer] Returns `0` when there is no error.
|
85
85
|
def parse(*arg)
|
86
|
-
if arg.
|
87
|
-
elsif arg.length == 1 # arg = url
|
86
|
+
if arg.length == 1 # arg = url
|
88
87
|
self.url = arg[0]
|
89
|
-
|
88
|
+
elsif arg.length > 1
|
90
89
|
raise 'Too much arguments'
|
91
90
|
end
|
92
91
|
|
@@ -96,7 +95,7 @@ class NVDFeedScraper
|
|
96
95
|
|
97
96
|
meta = Net::HTTP.get(uri)
|
98
97
|
|
99
|
-
meta =
|
98
|
+
meta = meta.split.to_h { |x| x.split(':', 2) }
|
100
99
|
|
101
100
|
raise 'no lastModifiedDate attribute found' unless meta['lastModifiedDate']
|
102
101
|
raise 'no valid size attribute found' unless /[0-9]+/.match?(meta['size'])
|
data/lib/nvd_feed_api/version.rb
CHANGED
data/lib/nvd_feed_api.rb
CHANGED
@@ -42,14 +42,15 @@ class NVDFeedScraper
|
|
42
42
|
tmp_feeds = {}
|
43
43
|
doc.css('#vuln-feed-table table.xml-feed-table tr[data-testid]').each do |tr|
|
44
44
|
num, type = tr.attr('data-testid')[13..].split('-')
|
45
|
-
|
45
|
+
case type
|
46
|
+
when 'meta'
|
46
47
|
tmp_feeds[num] = {}
|
47
48
|
tmp_feeds[num][:name] = tr.css('td')[0].text
|
48
49
|
tmp_feeds[num][:updated] = tr.css('td')[1].text
|
49
50
|
tmp_feeds[num][:meta] = BASE + tr.css('td')[2].css('> a').attr('href').value
|
50
|
-
|
51
|
+
when 'gz'
|
51
52
|
tmp_feeds[num][:gz] = BASE + tr.css('td > a').attr('href').value
|
52
|
-
|
53
|
+
when 'zip'
|
53
54
|
tmp_feeds[num][:zip] = BASE + tr.css('td > a').attr('href').value
|
54
55
|
@feeds.push(Feed.new(tmp_feeds[num][:name],
|
55
56
|
tmp_feeds[num][:updated],
|
@@ -90,12 +91,13 @@ class NVDFeedScraper
|
|
90
91
|
if arg_feeds.empty?
|
91
92
|
return_value = @feeds
|
92
93
|
elsif arg_feeds.length == 1
|
93
|
-
|
94
|
+
case arg_feeds[0]
|
95
|
+
when String
|
94
96
|
@feeds.each do |feed| # feed is an object
|
95
97
|
return_value = feed if arg_feeds.include?(feed.name)
|
96
98
|
end
|
97
99
|
# if nothing found return nil
|
98
|
-
|
100
|
+
when Array
|
99
101
|
raise 'one of the provided arguments is not a String' unless arg_feeds[0].all? { |x| x.is_a?(String) }
|
100
102
|
|
101
103
|
# Sorting CVE can allow us to parse quicker
|
@@ -164,7 +166,8 @@ class NVDFeedScraper
|
|
164
166
|
raise 'no argument provided, 1 or more expected' if arg_cve.empty?
|
165
167
|
|
166
168
|
if arg_cve.length == 1
|
167
|
-
|
169
|
+
case arg_cve[0]
|
170
|
+
when String
|
168
171
|
raise 'bad CVE name' unless /^CVE-[0-9]{4}-[0-9]{4,}$/i.match?(arg_cve[0])
|
169
172
|
|
170
173
|
year = /^CVE-([0-9]{4})-[0-9]{4,}$/i.match(arg_cve[0]).captures[0]
|
@@ -185,7 +188,7 @@ class NVDFeedScraper
|
|
185
188
|
f = feeds(matched_feed)
|
186
189
|
f.json_pull
|
187
190
|
return_value = f.cve(arg_cve[0])
|
188
|
-
|
191
|
+
when Array
|
189
192
|
raise 'one of the provided arguments is not a String' unless arg_cve[0].all? { |x| x.is_a?(String) }
|
190
193
|
raise 'bad CVE name' unless arg_cve[0].all? { |x| /^CVE-[0-9]{4}-[0-9]{4,}$/i.match?(x) }
|
191
194
|
|
@@ -216,9 +219,10 @@ class NVDFeedScraper
|
|
216
219
|
feeds_arr.each do |feed|
|
217
220
|
feed.json_pull
|
218
221
|
cves_obj = feed.cve(cves_to_find.select { |cve| cve.include?(feed.name) })
|
219
|
-
|
222
|
+
case cves_obj
|
223
|
+
when Hash
|
220
224
|
return_value.push(cves_obj)
|
221
|
-
|
225
|
+
when Array
|
222
226
|
return_value.push(*cves_obj)
|
223
227
|
else
|
224
228
|
raise 'cve() method of the feed instance returns wrong value'
|
@@ -238,16 +242,16 @@ class NVDFeedScraper
|
|
238
242
|
# @overload update_feeds(feed)
|
239
243
|
# One feed.
|
240
244
|
# @param feed [Feed] feed object to update.
|
241
|
-
# @return [Boolean]
|
245
|
+
# @return [Boolean] `true` if the feed was updated, `false` if it wasn't.
|
242
246
|
# @overload update_feeds(feed_arr)
|
243
247
|
# An array of feed.
|
244
248
|
# @param feed_arr [Array<Feed>] array of feed objects to update.
|
245
|
-
# @return [Array<Boolean>]
|
249
|
+
# @return [Array<Boolean>] `true` if the feed was updated, `false` if it wasn't.
|
246
250
|
# @overload update_feeds(feed, *)
|
247
251
|
# Multiple feeds.
|
248
252
|
# @param feed [Feed] feed object to update.
|
249
253
|
# @param * [Feed] As many feed objects as you want.
|
250
|
-
# @return [Array<Boolean>]
|
254
|
+
# @return [Array<Boolean>] `true` if the feed was updated, `false` if it wasn't.
|
251
255
|
# @example
|
252
256
|
# s = NVDFeedScraper.new
|
253
257
|
# s.scrap
|
@@ -259,11 +263,12 @@ class NVDFeedScraper
|
|
259
263
|
|
260
264
|
scrap
|
261
265
|
if arg_feed.length == 1
|
262
|
-
|
266
|
+
case arg_feed[0]
|
267
|
+
when Feed
|
263
268
|
new_feed = feeds(arg_feed[0].name)
|
264
269
|
# update attributes
|
265
270
|
return_value = arg_feed[0].update!(new_feed)
|
266
|
-
|
271
|
+
when Array
|
267
272
|
return_value = []
|
268
273
|
arg_feed[0].each do |f|
|
269
274
|
res = update_feeds(f)
|
data/nvd_feed_api.gemspec
CHANGED
@@ -1,12 +1,9 @@
|
|
1
|
-
|
2
|
-
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
|
-
require 'nvd_feed_api/version'
|
1
|
+
require_relative 'lib/nvd_feed_api/version'
|
4
2
|
|
5
3
|
Gem::Specification.new do |s|
|
6
4
|
s.name = 'nvd_feed_api'
|
7
5
|
s.version = NvdFeedApi::VERSION
|
8
6
|
s.platform = Gem::Platform::RUBY
|
9
|
-
s.date = '2020-10-03'
|
10
7
|
s.summary = 'API for NVD CVE feeds'
|
11
8
|
s.description = 'A simple API for NVD CVE feeds'
|
12
9
|
s.authors = ['Alexandre ZANNI']
|
@@ -20,27 +17,19 @@ Gem::Specification.new do |s|
|
|
20
17
|
s.require_paths = ['lib']
|
21
18
|
|
22
19
|
s.metadata = {
|
23
|
-
'yard.run'
|
24
|
-
'bug_tracker_uri'
|
25
|
-
'changelog_uri'
|
26
|
-
'documentation_uri'
|
27
|
-
'homepage_uri'
|
28
|
-
'source_code_uri'
|
29
|
-
'wiki_uri'
|
20
|
+
'yard.run' => 'yard',
|
21
|
+
'bug_tracker_uri' => 'https://gitlab.com/noraj/nvd_api/issues',
|
22
|
+
'changelog_uri' => 'https://noraj.gitlab.io/nvd_api/file.CHANGELOG.html',
|
23
|
+
'documentation_uri' => 'https://noraj.gitlab.io/nvd_api/',
|
24
|
+
'homepage_uri' => 'https://noraj.gitlab.io/nvd_api/',
|
25
|
+
'source_code_uri' => 'https://gitlab.com/noraj/nvd_api/tree/master',
|
26
|
+
'wiki_uri' => 'https://gitlab.com/noraj/nvd_api/wikis/home',
|
27
|
+
'rubygems_mfa_required' => 'true'
|
30
28
|
}
|
31
29
|
|
32
|
-
s.required_ruby_version = '
|
30
|
+
s.required_ruby_version = ['>= 2.7.0', '< 3.2']
|
33
31
|
|
34
32
|
s.add_dependency('archive-zip', '~> 0.11')
|
35
|
-
s.add_dependency('nokogiri', '~> 1.
|
33
|
+
s.add_dependency('nokogiri', '~> 1.11')
|
36
34
|
s.add_dependency('oj', '>= 3.7.8', '<4')
|
37
|
-
|
38
|
-
s.add_development_dependency('bundler', '~> 2.1')
|
39
|
-
s.add_development_dependency('commonmarker', '~> 0.21') # for GMF support in YARD
|
40
|
-
s.add_development_dependency('github-markup', '~> 3.0') # for GMF support in YARD
|
41
|
-
s.add_development_dependency('minitest', '~> 5.14')
|
42
|
-
s.add_development_dependency('rake', '~> 13.0')
|
43
|
-
s.add_development_dependency('redcarpet', '~> 3.5') # for GMF support in YARD
|
44
|
-
s.add_development_dependency('rubocop', '~> 0.92')
|
45
|
-
s.add_development_dependency('yard', '~> 0.9')
|
46
35
|
end
|
data/pages/CHANGELOG.md
CHANGED
@@ -1,4 +1,17 @@
|
|
1
|
-
# [
|
1
|
+
# [unreleased]
|
2
|
+
|
3
|
+
# [0.4.0] - 31 January 2021
|
4
|
+
|
5
|
+
- Dependencies:
|
6
|
+
- Update to yard [v0.9.27](https://github.com/lsegal/yard/releases/tag/v0.9.27)
|
7
|
+
- Move from Redcarpet to CommonMarker markdown provider
|
8
|
+
- Move doc syntax from Rdoc to markdown
|
9
|
+
- Move dev dependencies from gemspec to gemfile
|
10
|
+
- Chore:
|
11
|
+
- Add support for Ruby 3.1
|
12
|
+
- Update rubocop rules
|
13
|
+
|
14
|
+
# [0.3.1] - 13 October 2020
|
2
15
|
|
3
16
|
[0.3.1]: https://gitlab.com/noraj/nvd_api/tags/v0.3.1
|
4
17
|
|
@@ -6,6 +19,8 @@
|
|
6
19
|
- update dependencies
|
7
20
|
- update rubocop rules
|
8
21
|
|
22
|
+
# [0.3.0] - 22 January 2019
|
23
|
+
|
9
24
|
[0.3.0]: https://gitlab.com/noraj/nvd_api/tags/v0.3.0
|
10
25
|
|
11
26
|
- update dependencies: updated gemspec, ruby 2.6 support, fix gem doc flag, fix oj crash (seg fault)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nvd_feed_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexandre ZANNI
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-01-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: archive-zip
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '1.
|
33
|
+
version: '1.11'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '1.
|
40
|
+
version: '1.11'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: oj
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -58,118 +58,6 @@ dependencies:
|
|
58
58
|
- - "<"
|
59
59
|
- !ruby/object:Gem::Version
|
60
60
|
version: '4'
|
61
|
-
- !ruby/object:Gem::Dependency
|
62
|
-
name: bundler
|
63
|
-
requirement: !ruby/object:Gem::Requirement
|
64
|
-
requirements:
|
65
|
-
- - "~>"
|
66
|
-
- !ruby/object:Gem::Version
|
67
|
-
version: '2.1'
|
68
|
-
type: :development
|
69
|
-
prerelease: false
|
70
|
-
version_requirements: !ruby/object:Gem::Requirement
|
71
|
-
requirements:
|
72
|
-
- - "~>"
|
73
|
-
- !ruby/object:Gem::Version
|
74
|
-
version: '2.1'
|
75
|
-
- !ruby/object:Gem::Dependency
|
76
|
-
name: commonmarker
|
77
|
-
requirement: !ruby/object:Gem::Requirement
|
78
|
-
requirements:
|
79
|
-
- - "~>"
|
80
|
-
- !ruby/object:Gem::Version
|
81
|
-
version: '0.21'
|
82
|
-
type: :development
|
83
|
-
prerelease: false
|
84
|
-
version_requirements: !ruby/object:Gem::Requirement
|
85
|
-
requirements:
|
86
|
-
- - "~>"
|
87
|
-
- !ruby/object:Gem::Version
|
88
|
-
version: '0.21'
|
89
|
-
- !ruby/object:Gem::Dependency
|
90
|
-
name: github-markup
|
91
|
-
requirement: !ruby/object:Gem::Requirement
|
92
|
-
requirements:
|
93
|
-
- - "~>"
|
94
|
-
- !ruby/object:Gem::Version
|
95
|
-
version: '3.0'
|
96
|
-
type: :development
|
97
|
-
prerelease: false
|
98
|
-
version_requirements: !ruby/object:Gem::Requirement
|
99
|
-
requirements:
|
100
|
-
- - "~>"
|
101
|
-
- !ruby/object:Gem::Version
|
102
|
-
version: '3.0'
|
103
|
-
- !ruby/object:Gem::Dependency
|
104
|
-
name: minitest
|
105
|
-
requirement: !ruby/object:Gem::Requirement
|
106
|
-
requirements:
|
107
|
-
- - "~>"
|
108
|
-
- !ruby/object:Gem::Version
|
109
|
-
version: '5.14'
|
110
|
-
type: :development
|
111
|
-
prerelease: false
|
112
|
-
version_requirements: !ruby/object:Gem::Requirement
|
113
|
-
requirements:
|
114
|
-
- - "~>"
|
115
|
-
- !ruby/object:Gem::Version
|
116
|
-
version: '5.14'
|
117
|
-
- !ruby/object:Gem::Dependency
|
118
|
-
name: rake
|
119
|
-
requirement: !ruby/object:Gem::Requirement
|
120
|
-
requirements:
|
121
|
-
- - "~>"
|
122
|
-
- !ruby/object:Gem::Version
|
123
|
-
version: '13.0'
|
124
|
-
type: :development
|
125
|
-
prerelease: false
|
126
|
-
version_requirements: !ruby/object:Gem::Requirement
|
127
|
-
requirements:
|
128
|
-
- - "~>"
|
129
|
-
- !ruby/object:Gem::Version
|
130
|
-
version: '13.0'
|
131
|
-
- !ruby/object:Gem::Dependency
|
132
|
-
name: redcarpet
|
133
|
-
requirement: !ruby/object:Gem::Requirement
|
134
|
-
requirements:
|
135
|
-
- - "~>"
|
136
|
-
- !ruby/object:Gem::Version
|
137
|
-
version: '3.5'
|
138
|
-
type: :development
|
139
|
-
prerelease: false
|
140
|
-
version_requirements: !ruby/object:Gem::Requirement
|
141
|
-
requirements:
|
142
|
-
- - "~>"
|
143
|
-
- !ruby/object:Gem::Version
|
144
|
-
version: '3.5'
|
145
|
-
- !ruby/object:Gem::Dependency
|
146
|
-
name: rubocop
|
147
|
-
requirement: !ruby/object:Gem::Requirement
|
148
|
-
requirements:
|
149
|
-
- - "~>"
|
150
|
-
- !ruby/object:Gem::Version
|
151
|
-
version: '0.92'
|
152
|
-
type: :development
|
153
|
-
prerelease: false
|
154
|
-
version_requirements: !ruby/object:Gem::Requirement
|
155
|
-
requirements:
|
156
|
-
- - "~>"
|
157
|
-
- !ruby/object:Gem::Version
|
158
|
-
version: '0.92'
|
159
|
-
- !ruby/object:Gem::Dependency
|
160
|
-
name: yard
|
161
|
-
requirement: !ruby/object:Gem::Requirement
|
162
|
-
requirements:
|
163
|
-
- - "~>"
|
164
|
-
- !ruby/object:Gem::Version
|
165
|
-
version: '0.9'
|
166
|
-
type: :development
|
167
|
-
prerelease: false
|
168
|
-
version_requirements: !ruby/object:Gem::Requirement
|
169
|
-
requirements:
|
170
|
-
- - "~>"
|
171
|
-
- !ruby/object:Gem::Version
|
172
|
-
version: '0.9'
|
173
61
|
description: A simple API for NVD CVE feeds
|
174
62
|
email: alexandre.zanni@europe.com
|
175
63
|
executables:
|
@@ -179,6 +67,7 @@ executables:
|
|
179
67
|
extensions: []
|
180
68
|
extra_rdoc_files: []
|
181
69
|
files:
|
70
|
+
- ".github/FUNDING.yml"
|
182
71
|
- ".gitignore"
|
183
72
|
- ".gitlab-ci.yml"
|
184
73
|
- ".gitlab/CONTRIBUTING.md"
|
@@ -218,22 +107,26 @@ metadata:
|
|
218
107
|
homepage_uri: https://noraj.gitlab.io/nvd_api/
|
219
108
|
source_code_uri: https://gitlab.com/noraj/nvd_api/tree/master
|
220
109
|
wiki_uri: https://gitlab.com/noraj/nvd_api/wikis/home
|
110
|
+
rubygems_mfa_required: 'true'
|
221
111
|
post_install_message:
|
222
112
|
rdoc_options: []
|
223
113
|
require_paths:
|
224
114
|
- lib
|
225
115
|
required_ruby_version: !ruby/object:Gem::Requirement
|
226
116
|
requirements:
|
227
|
-
- - "
|
117
|
+
- - ">="
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
version: 2.7.0
|
120
|
+
- - "<"
|
228
121
|
- !ruby/object:Gem::Version
|
229
|
-
version: '2
|
122
|
+
version: '3.2'
|
230
123
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
231
124
|
requirements:
|
232
125
|
- - ">="
|
233
126
|
- !ruby/object:Gem::Version
|
234
127
|
version: '0'
|
235
128
|
requirements: []
|
236
|
-
rubygems_version: 3.
|
129
|
+
rubygems_version: 3.3.3
|
237
130
|
signing_key:
|
238
131
|
specification_version: 4
|
239
132
|
summary: API for NVD CVE feeds
|