nvd_feed_api 0.3.1 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|