nvd_feed_api 0.2.1.yank → 0.3.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 +5 -5
- data/.gitignore +1 -1
- data/.gitlab-ci.yml +18 -11
- data/.rubocop.yml +3 -0
- data/Gemfile.lock +64 -0
- data/lib/nvd_feed_api.rb +11 -1
- data/lib/nvd_feed_api/feed.rb +13 -0
- data/lib/nvd_feed_api/meta.rb +1 -0
- data/lib/nvd_feed_api/version.rb +1 -1
- data/nvd_feed_api.gemspec +9 -9
- data/pages/CHANGELOG.md +11 -1
- data/test/test_nvd_feed_api.rb +1 -1
- metadata +30 -24
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: a5b514ce502cdd7ed0c110fc51e834735f0431d18724ce805a7d43ab6c48573b
|
|
4
|
+
data.tar.gz: 2ad857a72403943feee5a60f3a7ac8e8f642eb96e4ebb5956d2cdaeb3d635a46
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 830a36b97968d09491bd7827393e261aff2ec6fc410167cfcada0848e86809979c01a7c7c9bbfcfa6cf86b0a357279b26cb45719ceefde01f2e2456d2c03f272
|
|
7
|
+
data.tar.gz: dab48f73efd733dd71c94ad619289727c625526b6099b09906203ed19b776aa2d97b21868cf1b10a4bba095f6d4a26a06da7c23cacc4f6776eb2cc5486f9d5c7
|
data/.gitignore
CHANGED
data/.gitlab-ci.yml
CHANGED
|
@@ -1,40 +1,47 @@
|
|
|
1
1
|
# Official language image. Look for the different tagged releases at:
|
|
2
2
|
# https://hub.docker.com/r/library/ruby/tags/
|
|
3
3
|
|
|
4
|
+
# Caching: https://docs.gitlab.com/ee/ci/caching/#caching-ruby-dependencies
|
|
4
5
|
cache:
|
|
6
|
+
key: ${CI_COMMIT_REF_SLUG}
|
|
5
7
|
paths:
|
|
6
8
|
- vendor/ruby # cache gems in between builds
|
|
7
9
|
|
|
8
10
|
before_script:
|
|
9
11
|
- ruby -v # Print out ruby version for debugging
|
|
10
|
-
- gem install bundler
|
|
12
|
+
- gem install bundler --no-document # Bundler is not installed with the image
|
|
11
13
|
# install nproc (coreutils) for bundle -j
|
|
12
14
|
# install git for building the gemspec
|
|
13
15
|
# install make, gcc for building gem native extension (commonmarker)
|
|
14
16
|
# libc-dev for musl-dev dependency (stdlib.h) needed by gcc
|
|
15
17
|
- apk --no-cache add coreutils git make gcc libc-dev
|
|
16
18
|
- bundle install -j $(nproc) --path vendor # Install dependencies into ./vendor/ruby
|
|
17
|
-
- rake install # install the gem
|
|
19
|
+
- bundle exec rake install # install the gem
|
|
18
20
|
|
|
19
|
-
|
|
21
|
+
# Anchors: https://docs.gitlab.com/ee/ci/yaml/README.html#anchors
|
|
22
|
+
.test_template: &job_definition
|
|
20
23
|
stage: test
|
|
21
|
-
image: ruby:2.4-alpine
|
|
22
24
|
script:
|
|
23
|
-
|
|
24
|
-
|
|
25
|
+
- bundle exec rubocop
|
|
26
|
+
- bundle exec rake test
|
|
27
|
+
|
|
28
|
+
test:2.4:
|
|
29
|
+
<<: *job_definition
|
|
30
|
+
image: ruby:2.4-alpine
|
|
25
31
|
|
|
26
32
|
test:2.5:
|
|
27
|
-
|
|
33
|
+
<<: *job_definition
|
|
28
34
|
image: ruby:2.5-alpine
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
35
|
+
|
|
36
|
+
test:2.6:
|
|
37
|
+
<<: *job_definition
|
|
38
|
+
image: ruby:2.6-alpine
|
|
32
39
|
|
|
33
40
|
pages:
|
|
34
41
|
stage: deploy
|
|
35
42
|
image: ruby:2.4-alpine
|
|
36
43
|
script:
|
|
37
|
-
- yard doc
|
|
44
|
+
- bundle exec yard doc
|
|
38
45
|
- mkdir public
|
|
39
46
|
- mv doc/* public/
|
|
40
47
|
artifacts:
|
data/.rubocop.yml
CHANGED
data/Gemfile.lock
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
PATH
|
|
2
|
+
remote: .
|
|
3
|
+
specs:
|
|
4
|
+
nvd_feed_api (0.3.0)
|
|
5
|
+
archive-zip (~> 0.11)
|
|
6
|
+
nokogiri (~> 1.10)
|
|
7
|
+
oj (>= 3.7.8, < 4)
|
|
8
|
+
|
|
9
|
+
GEM
|
|
10
|
+
remote: https://rubygems.org/
|
|
11
|
+
specs:
|
|
12
|
+
archive-zip (0.11.0)
|
|
13
|
+
io-like (~> 0.3.0)
|
|
14
|
+
ast (2.4.0)
|
|
15
|
+
commonmarker (0.18.2)
|
|
16
|
+
ruby-enum (~> 0.5)
|
|
17
|
+
concurrent-ruby (1.1.4)
|
|
18
|
+
github-markup (3.0.2)
|
|
19
|
+
i18n (1.5.3)
|
|
20
|
+
concurrent-ruby (~> 1.0)
|
|
21
|
+
io-like (0.3.0)
|
|
22
|
+
jaro_winkler (1.5.2)
|
|
23
|
+
mini_portile2 (2.4.0)
|
|
24
|
+
minitest (5.11.3)
|
|
25
|
+
nokogiri (1.10.1)
|
|
26
|
+
mini_portile2 (~> 2.4.0)
|
|
27
|
+
oj (3.7.8)
|
|
28
|
+
parallel (1.13.0)
|
|
29
|
+
parser (2.6.0.0)
|
|
30
|
+
ast (~> 2.4.0)
|
|
31
|
+
powerpack (0.1.2)
|
|
32
|
+
rainbow (3.0.0)
|
|
33
|
+
rake (12.3.2)
|
|
34
|
+
redcarpet (3.4.0)
|
|
35
|
+
rubocop (0.63.0)
|
|
36
|
+
jaro_winkler (~> 1.5.1)
|
|
37
|
+
parallel (~> 1.10)
|
|
38
|
+
parser (>= 2.5, != 2.5.1.1)
|
|
39
|
+
powerpack (~> 0.1)
|
|
40
|
+
rainbow (>= 2.2.2, < 4.0)
|
|
41
|
+
ruby-progressbar (~> 1.7)
|
|
42
|
+
unicode-display_width (~> 1.4.0)
|
|
43
|
+
ruby-enum (0.7.2)
|
|
44
|
+
i18n
|
|
45
|
+
ruby-progressbar (1.10.0)
|
|
46
|
+
unicode-display_width (1.4.1)
|
|
47
|
+
yard (0.9.16)
|
|
48
|
+
|
|
49
|
+
PLATFORMS
|
|
50
|
+
ruby
|
|
51
|
+
|
|
52
|
+
DEPENDENCIES
|
|
53
|
+
bundler (~> 2.0)
|
|
54
|
+
commonmarker (~> 0.18)
|
|
55
|
+
github-markup (~> 3.0)
|
|
56
|
+
minitest (~> 5.11)
|
|
57
|
+
nvd_feed_api!
|
|
58
|
+
rake (~> 12.3)
|
|
59
|
+
redcarpet (~> 3.4)
|
|
60
|
+
rubocop (~> 0.63)
|
|
61
|
+
yard (~> 0.9)
|
|
62
|
+
|
|
63
|
+
BUNDLED WITH
|
|
64
|
+
2.0.1
|
data/lib/nvd_feed_api.rb
CHANGED
|
@@ -31,7 +31,7 @@ class NVDFeedScraper
|
|
|
31
31
|
|
|
32
32
|
# Scrap / parse the website to get the feeds and fill the {#feeds} attribute.
|
|
33
33
|
# @note {#scrap} need to be called only once but can be called again to update if the NVD feed page changed.
|
|
34
|
-
# @return [Integer]
|
|
34
|
+
# @return [Integer] Number of scrapped feeds.
|
|
35
35
|
def scrap
|
|
36
36
|
uri = URI(@url)
|
|
37
37
|
html = Net::HTTP.get(uri)
|
|
@@ -46,6 +46,7 @@ class NVDFeedScraper
|
|
|
46
46
|
zip = tr.css('+ tr + tr > td > a').attr('href').value
|
|
47
47
|
@feeds.push(Feed.new(name, updated, meta, gz, zip))
|
|
48
48
|
end
|
|
49
|
+
return @feeds.size
|
|
49
50
|
end
|
|
50
51
|
|
|
51
52
|
# Return feeds. Can only be called after {#scrap}.
|
|
@@ -72,6 +73,7 @@ class NVDFeedScraper
|
|
|
72
73
|
# @see https://nvd.nist.gov/vuln/data-feeds
|
|
73
74
|
def feeds(*arg_feeds)
|
|
74
75
|
raise 'call scrap method before using feeds method' if @feeds.nil?
|
|
76
|
+
|
|
75
77
|
return_value = nil
|
|
76
78
|
if arg_feeds.empty?
|
|
77
79
|
return_value = @feeds
|
|
@@ -83,6 +85,7 @@ class NVDFeedScraper
|
|
|
83
85
|
# if nothing found return nil
|
|
84
86
|
elsif arg_feeds[0].is_a?(Array)
|
|
85
87
|
raise 'one of the provided arguments is not a String' unless arg_feeds[0].all? { |x| x.is_a?(String) }
|
|
88
|
+
|
|
86
89
|
# Sorting CVE can allow us to parse quicker
|
|
87
90
|
# Upcase to be sure include? works
|
|
88
91
|
# Does not use map(&:upcase) to preserve CVE-Recent and CVE-Modified
|
|
@@ -114,6 +117,7 @@ class NVDFeedScraper
|
|
|
114
117
|
# scraper.available_feeds => ["CVE-Modified", "CVE-Recent", "CVE-2017", "CVE-2016", "CVE-2015", "CVE-2014", "CVE-2013", "CVE-2012", "CVE-2011", "CVE-2010", "CVE-2009", "CVE-2008", "CVE-2007", "CVE-2006", "CVE-2005", "CVE-2004", "CVE-2003", "CVE-2002"]
|
|
115
118
|
def available_feeds
|
|
116
119
|
raise 'call scrap method before using available_feeds method' if @feeds.nil?
|
|
120
|
+
|
|
117
121
|
feed_names = []
|
|
118
122
|
@feeds.each do |feed| # feed is an objet
|
|
119
123
|
feed_names.push(feed.name)
|
|
@@ -146,9 +150,11 @@ class NVDFeedScraper
|
|
|
146
150
|
def cve(*arg_cve)
|
|
147
151
|
return_value = nil
|
|
148
152
|
raise 'no argument provided, 1 or more expected' if arg_cve.empty?
|
|
153
|
+
|
|
149
154
|
if arg_cve.length == 1
|
|
150
155
|
if arg_cve[0].is_a?(String)
|
|
151
156
|
raise 'bad CVE name' unless /^CVE-[0-9]{4}-[0-9]{4,}$/i.match?(arg_cve[0])
|
|
157
|
+
|
|
152
158
|
year = /^CVE-([0-9]{4})-[0-9]{4,}$/i.match(arg_cve[0]).captures[0]
|
|
153
159
|
matched_feed = nil
|
|
154
160
|
feed_names = available_feeds
|
|
@@ -163,12 +169,14 @@ class NVDFeedScraper
|
|
|
163
169
|
# CVE-2002 feed (the 1st one) contains CVE from 1999 to 2002
|
|
164
170
|
matched_feed = 'CVE-2002' if matched_feed.nil? && ('1999'..'2001').to_a.include?(year)
|
|
165
171
|
raise "bad CVE year in #{arg_cve}" if matched_feed.nil?
|
|
172
|
+
|
|
166
173
|
f = feeds(matched_feed)
|
|
167
174
|
f.json_pull
|
|
168
175
|
return_value = f.cve(arg_cve[0])
|
|
169
176
|
elsif arg_cve[0].is_a?(Array)
|
|
170
177
|
raise 'one of the provided arguments is not a String' unless arg_cve[0].all? { |x| x.is_a?(String) }
|
|
171
178
|
raise 'bad CVE name' unless arg_cve[0].all? { |x| /^CVE-[0-9]{4}-[0-9]{4,}$/i.match?(x) }
|
|
179
|
+
|
|
172
180
|
return_value = []
|
|
173
181
|
# Sorting CVE can allow us to parse quicker
|
|
174
182
|
# Upcase to be sure include? works
|
|
@@ -185,6 +193,7 @@ class NVDFeedScraper
|
|
|
185
193
|
# So virtually add those feed...
|
|
186
194
|
feed_names.merge(virtual_feeds)
|
|
187
195
|
raise 'unexisting CVE year was provided in some CVE' unless feeds_to_match.subset?(feed_names)
|
|
196
|
+
|
|
188
197
|
matched_feeds = feeds_to_match.intersection(feed_names)
|
|
189
198
|
# and now that the intersection is done remove those virtual feeds and add CVE-2002 instead if needed
|
|
190
199
|
unless matched_feeds.intersection(virtual_feeds.to_set).empty?
|
|
@@ -235,6 +244,7 @@ class NVDFeedScraper
|
|
|
235
244
|
def update_feeds(*arg_feed)
|
|
236
245
|
return_value = false
|
|
237
246
|
raise 'no argument provided, 1 or more expected' if arg_feed.empty?
|
|
247
|
+
|
|
238
248
|
scrap
|
|
239
249
|
if arg_feed.length == 1
|
|
240
250
|
if arg_feed[0].is_a?(Feed)
|
data/lib/nvd_feed_api/feed.rb
CHANGED
|
@@ -184,6 +184,7 @@ class NVDFeedScraper
|
|
|
184
184
|
# Verify hash integrity
|
|
185
185
|
computed_h = Digest::SHA256.file(@json_file)
|
|
186
186
|
raise "File corruption: #{@json_file}" unless meta.sha256.casecmp(computed_h.hexdigest).zero?
|
|
187
|
+
|
|
187
188
|
# update data
|
|
188
189
|
doc = Oj::Doc.open(File.read(@json_file))
|
|
189
190
|
@data_type = doc.fetch('/CVE_data_type')
|
|
@@ -223,11 +224,14 @@ class NVDFeedScraper
|
|
|
223
224
|
def cve(*arg_cve)
|
|
224
225
|
raise 'json_file is nil, it needs to be populated with json_pull' if @json_file.nil?
|
|
225
226
|
raise "json_file (#{@json_file}) doesn't exist" unless File.file?(@json_file)
|
|
227
|
+
|
|
226
228
|
return_value = nil
|
|
227
229
|
raise 'no argument provided, 1 or more expected' if arg_cve.empty?
|
|
230
|
+
|
|
228
231
|
if arg_cve.length == 1
|
|
229
232
|
if arg_cve[0].is_a?(String)
|
|
230
233
|
raise "bad CVE name (#{arg_cve[0]})" unless /^CVE-[0-9]{4}-[0-9]{4,}$/i.match?(arg_cve[0])
|
|
234
|
+
|
|
231
235
|
doc = Oj::Doc.open(File.read(@json_file))
|
|
232
236
|
# Quicker than doc.fetch('/CVE_Items').size
|
|
233
237
|
(1..@data_number_of_cves).each do |i|
|
|
@@ -244,6 +248,7 @@ class NVDFeedScraper
|
|
|
244
248
|
cves_to_find = arg_cve[0].map(&:upcase).sort
|
|
245
249
|
raise 'one of the provided arguments is not a String' unless cves_to_find.all? { |x| x.is_a?(String) }
|
|
246
250
|
raise 'bad CVE name' unless cves_to_find.all? { |x| /^CVE-[0-9]{4}-[0-9]{4,}$/i.match?(x) }
|
|
251
|
+
|
|
247
252
|
doc = Oj::Doc.open(File.read(@json_file))
|
|
248
253
|
# Quicker than doc.fetch('/CVE_Items').size
|
|
249
254
|
(1..@data_number_of_cves).each do |i|
|
|
@@ -273,6 +278,7 @@ class NVDFeedScraper
|
|
|
273
278
|
def available_cves
|
|
274
279
|
raise 'json_file is nil, it needs to be populated with json_pull' if @json_file.nil?
|
|
275
280
|
raise "json_file (#{@json_file}) doesn't exist" unless File.file?(@json_file)
|
|
281
|
+
|
|
276
282
|
doc = Oj::Doc.open(File.read(@json_file))
|
|
277
283
|
# Quicker than doc.fetch('/CVE_Items').size
|
|
278
284
|
cve_names = []
|
|
@@ -290,6 +296,7 @@ class NVDFeedScraper
|
|
|
290
296
|
# 'CVE-2007'
|
|
291
297
|
def name=(arg_name)
|
|
292
298
|
raise "name (#{arg_name}) is not a string" unless arg_name.is_a?(String)
|
|
299
|
+
|
|
293
300
|
@name = arg_name
|
|
294
301
|
end
|
|
295
302
|
|
|
@@ -299,6 +306,7 @@ class NVDFeedScraper
|
|
|
299
306
|
# '10/19/2017 3:27:02 AM -04:00'
|
|
300
307
|
def updated=(arg_updated)
|
|
301
308
|
raise "updated date (#{arg_updated}) is not a string" unless arg_updated.is_a?(String)
|
|
309
|
+
|
|
302
310
|
@updated = arg_updated
|
|
303
311
|
end
|
|
304
312
|
|
|
@@ -308,6 +316,7 @@ class NVDFeedScraper
|
|
|
308
316
|
# 'https://static.nvd.nist.gov/feeds/json/cve/1.0/nvdcve-1.0-2007.meta'
|
|
309
317
|
def meta_url=(arg_meta_url)
|
|
310
318
|
raise "meta_url (#{arg_meta_url}) is not a string" unless arg_meta_url.is_a?(String)
|
|
319
|
+
|
|
311
320
|
@meta_url = arg_meta_url
|
|
312
321
|
end
|
|
313
322
|
|
|
@@ -317,6 +326,7 @@ class NVDFeedScraper
|
|
|
317
326
|
# 'https://static.nvd.nist.gov/feeds/json/cve/1.0/nvdcve-1.0-2007.json.gz'
|
|
318
327
|
def gz_url=(arg_gz_url)
|
|
319
328
|
raise "gz_url (#{arg_gz_url}) is not a string" unless arg_gz_url.is_a?(String)
|
|
329
|
+
|
|
320
330
|
@gz_url = arg_gz_url
|
|
321
331
|
end
|
|
322
332
|
|
|
@@ -326,6 +336,7 @@ class NVDFeedScraper
|
|
|
326
336
|
# 'https://static.nvd.nist.gov/feeds/json/cve/1.0/nvdcve-1.0-2007.json.zip'
|
|
327
337
|
def zip_url=(arg_zip_url)
|
|
328
338
|
raise "zip_url (#{arg_zip_url}) is not a string" unless arg_zip_url.is_a?(String)
|
|
339
|
+
|
|
329
340
|
@zip_url = arg_zip_url
|
|
330
341
|
end
|
|
331
342
|
|
|
@@ -362,6 +373,7 @@ class NVDFeedScraper
|
|
|
362
373
|
unless skip_download
|
|
363
374
|
res = Net::HTTP.get_response(uri)
|
|
364
375
|
raise "#{file_url} ended with #{res.code} #{res.message}" unless res.is_a?(Net::HTTPSuccess)
|
|
376
|
+
|
|
365
377
|
File.open(destination_file, 'wb') do |file|
|
|
366
378
|
file.write(res.body)
|
|
367
379
|
end
|
|
@@ -376,6 +388,7 @@ class NVDFeedScraper
|
|
|
376
388
|
def update!(fresh_feed)
|
|
377
389
|
return_value = false
|
|
378
390
|
raise "#{fresh_feed} is not a Feed" unless fresh_feed.is_a?(Feed)
|
|
391
|
+
|
|
379
392
|
# update attributes
|
|
380
393
|
if updated != fresh_feed.updated
|
|
381
394
|
self.name = fresh_feed.name
|
data/lib/nvd_feed_api/meta.rb
CHANGED
data/lib/nvd_feed_api/version.rb
CHANGED
data/nvd_feed_api.gemspec
CHANGED
|
@@ -6,7 +6,7 @@ Gem::Specification.new do |s|
|
|
|
6
6
|
s.name = 'nvd_feed_api'
|
|
7
7
|
s.version = NvdFeedApi::VERSION
|
|
8
8
|
s.platform = Gem::Platform::RUBY
|
|
9
|
-
s.date = '2018-
|
|
9
|
+
s.date = '2018-01-06'
|
|
10
10
|
s.summary = 'API for NVD CVE feeds'
|
|
11
11
|
s.description = 'A simple API for NVD CVE feeds'
|
|
12
12
|
s.authors = ['Alexandre ZANNI']
|
|
@@ -31,16 +31,16 @@ Gem::Specification.new do |s|
|
|
|
31
31
|
|
|
32
32
|
s.required_ruby_version = '~> 2.4'
|
|
33
33
|
|
|
34
|
-
s.add_dependency('archive-zip', '~> 0.
|
|
35
|
-
s.add_dependency('nokogiri', '~> 1.
|
|
36
|
-
s.add_dependency('oj', '
|
|
34
|
+
s.add_dependency('archive-zip', '~> 0.11')
|
|
35
|
+
s.add_dependency('nokogiri', '~> 1.10')
|
|
36
|
+
s.add_dependency('oj', '>= 3.7.8', '<4')
|
|
37
37
|
|
|
38
|
-
s.add_development_dependency('bundler', '~>
|
|
39
|
-
s.add_development_dependency('commonmarker', '~> 0.
|
|
40
|
-
s.add_development_dependency('github-markup', '~>
|
|
41
|
-
s.add_development_dependency('minitest', '~> 5.
|
|
38
|
+
s.add_development_dependency('bundler', '~> 2.0')
|
|
39
|
+
s.add_development_dependency('commonmarker', '~> 0.18') # 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.11')
|
|
42
42
|
s.add_development_dependency('rake', '~> 12.3')
|
|
43
43
|
s.add_development_dependency('redcarpet', '~> 3.4') # for GMF support in YARD
|
|
44
|
-
s.add_development_dependency('rubocop', '~> 0.
|
|
44
|
+
s.add_development_dependency('rubocop', '~> 0.63')
|
|
45
45
|
s.add_development_dependency('yard', '~> 0.9')
|
|
46
46
|
end
|
data/pages/CHANGELOG.md
CHANGED
|
@@ -1,8 +1,18 @@
|
|
|
1
|
+
# [0.3.0] - 22 January 2019
|
|
2
|
+
|
|
3
|
+
[0.3.0]: https://gitlab.com/noraj/nvd_api/tags/v0.3.0
|
|
4
|
+
|
|
5
|
+
- update dependencies: updated gemspec, ruby 2.6 support, fix gem doc flag, fix oj crash (seg fault)
|
|
6
|
+
- Gemfile.lock: now Gemfile.lock is not ignored anymore
|
|
7
|
+
- gitlab-ci: add ruby 2.6 test, add caching key, and anchors for better reuse, always use bundle
|
|
8
|
+
- NVDFeedScraper `scrap` method: change return value
|
|
9
|
+
- rubocop: fix lint
|
|
10
|
+
|
|
1
11
|
# [0.2.1] - 2 May 2018
|
|
2
12
|
|
|
3
13
|
[0.2.1]: https://gitlab.com/noraj/nvd_api/tags/v0.2.1
|
|
4
14
|
|
|
5
|
-
- Gitlab-CI: test
|
|
15
|
+
- Gitlab-CI: test with ruby 2.4.x and 2.5.x
|
|
6
16
|
- style: fix Style/ExpandPathArguments cop
|
|
7
17
|
- security: fix Security/Open cop, protect from pipe command injection
|
|
8
18
|
- test: fix NVD URL after NVD changed it
|
data/test/test_nvd_feed_api.rb
CHANGED
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.3.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: 2018-
|
|
11
|
+
date: 2018-01-06 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: archive-zip
|
|
@@ -16,98 +16,104 @@ dependencies:
|
|
|
16
16
|
requirements:
|
|
17
17
|
- - "~>"
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: '0.
|
|
19
|
+
version: '0.11'
|
|
20
20
|
type: :runtime
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
24
|
- - "~>"
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: '0.
|
|
26
|
+
version: '0.11'
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: nokogiri
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
30
30
|
requirements:
|
|
31
31
|
- - "~>"
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: '1.
|
|
33
|
+
version: '1.10'
|
|
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.10'
|
|
41
41
|
- !ruby/object:Gem::Dependency
|
|
42
42
|
name: oj
|
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
|
44
44
|
requirements:
|
|
45
|
-
- - "
|
|
45
|
+
- - ">="
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: 3.7.8
|
|
48
|
+
- - "<"
|
|
46
49
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: '
|
|
50
|
+
version: '4'
|
|
48
51
|
type: :runtime
|
|
49
52
|
prerelease: false
|
|
50
53
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
54
|
requirements:
|
|
52
|
-
- - "
|
|
55
|
+
- - ">="
|
|
56
|
+
- !ruby/object:Gem::Version
|
|
57
|
+
version: 3.7.8
|
|
58
|
+
- - "<"
|
|
53
59
|
- !ruby/object:Gem::Version
|
|
54
|
-
version: '
|
|
60
|
+
version: '4'
|
|
55
61
|
- !ruby/object:Gem::Dependency
|
|
56
62
|
name: bundler
|
|
57
63
|
requirement: !ruby/object:Gem::Requirement
|
|
58
64
|
requirements:
|
|
59
65
|
- - "~>"
|
|
60
66
|
- !ruby/object:Gem::Version
|
|
61
|
-
version: '
|
|
67
|
+
version: '2.0'
|
|
62
68
|
type: :development
|
|
63
69
|
prerelease: false
|
|
64
70
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
71
|
requirements:
|
|
66
72
|
- - "~>"
|
|
67
73
|
- !ruby/object:Gem::Version
|
|
68
|
-
version: '
|
|
74
|
+
version: '2.0'
|
|
69
75
|
- !ruby/object:Gem::Dependency
|
|
70
76
|
name: commonmarker
|
|
71
77
|
requirement: !ruby/object:Gem::Requirement
|
|
72
78
|
requirements:
|
|
73
79
|
- - "~>"
|
|
74
80
|
- !ruby/object:Gem::Version
|
|
75
|
-
version: '0.
|
|
81
|
+
version: '0.18'
|
|
76
82
|
type: :development
|
|
77
83
|
prerelease: false
|
|
78
84
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
85
|
requirements:
|
|
80
86
|
- - "~>"
|
|
81
87
|
- !ruby/object:Gem::Version
|
|
82
|
-
version: '0.
|
|
88
|
+
version: '0.18'
|
|
83
89
|
- !ruby/object:Gem::Dependency
|
|
84
90
|
name: github-markup
|
|
85
91
|
requirement: !ruby/object:Gem::Requirement
|
|
86
92
|
requirements:
|
|
87
93
|
- - "~>"
|
|
88
94
|
- !ruby/object:Gem::Version
|
|
89
|
-
version: '
|
|
95
|
+
version: '3.0'
|
|
90
96
|
type: :development
|
|
91
97
|
prerelease: false
|
|
92
98
|
version_requirements: !ruby/object:Gem::Requirement
|
|
93
99
|
requirements:
|
|
94
100
|
- - "~>"
|
|
95
101
|
- !ruby/object:Gem::Version
|
|
96
|
-
version: '
|
|
102
|
+
version: '3.0'
|
|
97
103
|
- !ruby/object:Gem::Dependency
|
|
98
104
|
name: minitest
|
|
99
105
|
requirement: !ruby/object:Gem::Requirement
|
|
100
106
|
requirements:
|
|
101
107
|
- - "~>"
|
|
102
108
|
- !ruby/object:Gem::Version
|
|
103
|
-
version: '5.
|
|
109
|
+
version: '5.11'
|
|
104
110
|
type: :development
|
|
105
111
|
prerelease: false
|
|
106
112
|
version_requirements: !ruby/object:Gem::Requirement
|
|
107
113
|
requirements:
|
|
108
114
|
- - "~>"
|
|
109
115
|
- !ruby/object:Gem::Version
|
|
110
|
-
version: '5.
|
|
116
|
+
version: '5.11'
|
|
111
117
|
- !ruby/object:Gem::Dependency
|
|
112
118
|
name: rake
|
|
113
119
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -142,14 +148,14 @@ dependencies:
|
|
|
142
148
|
requirements:
|
|
143
149
|
- - "~>"
|
|
144
150
|
- !ruby/object:Gem::Version
|
|
145
|
-
version: '0.
|
|
151
|
+
version: '0.63'
|
|
146
152
|
type: :development
|
|
147
153
|
prerelease: false
|
|
148
154
|
version_requirements: !ruby/object:Gem::Requirement
|
|
149
155
|
requirements:
|
|
150
156
|
- - "~>"
|
|
151
157
|
- !ruby/object:Gem::Version
|
|
152
|
-
version: '0.
|
|
158
|
+
version: '0.63'
|
|
153
159
|
- !ruby/object:Gem::Dependency
|
|
154
160
|
name: yard
|
|
155
161
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -182,6 +188,7 @@ files:
|
|
|
182
188
|
- ".rubocop.yml"
|
|
183
189
|
- ".yardopts"
|
|
184
190
|
- Gemfile
|
|
191
|
+
- Gemfile.lock
|
|
185
192
|
- LICENSE.txt
|
|
186
193
|
- README.md
|
|
187
194
|
- Rakefile
|
|
@@ -220,12 +227,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
220
227
|
version: '2.4'
|
|
221
228
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
222
229
|
requirements:
|
|
223
|
-
- - "
|
|
230
|
+
- - ">="
|
|
224
231
|
- !ruby/object:Gem::Version
|
|
225
|
-
version:
|
|
232
|
+
version: '0'
|
|
226
233
|
requirements: []
|
|
227
|
-
|
|
228
|
-
rubygems_version: 2.6.14
|
|
234
|
+
rubygems_version: 3.0.1
|
|
229
235
|
signing_key:
|
|
230
236
|
specification_version: 4
|
|
231
237
|
summary: API for NVD CVE feeds
|