nvd_feed_api 0.0.3 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: eede7e83299ed5178ac0ef1563ac49378b90bf6f
4
- data.tar.gz: 82f073efcb5f266a8d848e5e93a2e6969ecd01db
3
+ metadata.gz: 421862fc8896856c94ac947b15d78b2538a9c13c
4
+ data.tar.gz: 23daab198d07a5da168a8884d2476a73feb21ee7
5
5
  SHA512:
6
- metadata.gz: e398a51fa724e9028aea8e6966a5b8620d34b9b7a0a20311259e810d99103a04eb0977db8aa46ce8edc4d70d2ee4049903a212309ea570cff752ce01defc37b3
7
- data.tar.gz: 235093a028f0bb61bf18879cb6dd3fe42e4e8e45b451ba8de41c6e697edadfc73bf10665ecdd3705ecc8e0220eb6b78edafef92cf22d63058bedc16ad6f6ed19
6
+ metadata.gz: ddfcce9f3483fee3d46e70a7a9fcc839f22c15a1bbc9c8090df47bfda8de118d0f71ea21d639df8b54ea6efb0c19dfdae383e7b7c71bea026a009a1122fff888
7
+ data.tar.gz: b8f1755ce9de8c03da15699f4c17f57433d60a02b9b421a38ce420ba4188d59f79ec3cc4069600ee7ed99e63f2981994f511a74ffeebd13fcebc3b2118ba42ce
data/.rubocop.yml CHANGED
@@ -18,7 +18,7 @@ Metrics/ClassLength:
18
18
  Enabled: false
19
19
 
20
20
  Metrics/CyclomaticComplexity:
21
- Max: 15
21
+ Max: 20
22
22
 
23
23
  Metrics/LineLength:
24
24
  Enabled: false
data/lib/nvd_feed_api.rb CHANGED
@@ -483,6 +483,8 @@ class NVDFeedScraper
483
483
  break
484
484
  end
485
485
  end
486
+ # CVE-2002 feed (the 1st one) contains CVE from 1999 to 2002
487
+ matched_feed = 'CVE-2002' if matched_feed.nil? && ('1999'..'2001').to_a.include?(year)
486
488
  raise "bad CVE year in #{arg_cve}" if matched_feed.nil?
487
489
  f = feeds(matched_feed)
488
490
  f.json_pull
@@ -501,8 +503,17 @@ class NVDFeedScraper
501
503
  feed_names = available_feeds.to_set
502
504
  feed_names.delete('CVE-Modified')
503
505
  feed_names.delete('CVE-Recent')
506
+ # CVE-2002 feed (the 1st one) contains CVE from 1999 to 2002
507
+ virtual_feeds = ['CVE-1999', 'CVE-2000', 'CVE-2001']
508
+ # So virtually add those feed...
509
+ feed_names.merge(virtual_feeds)
504
510
  raise 'unexisting CVE year was provided in some CVE' unless feeds_to_match.subset?(feed_names)
505
511
  matched_feeds = feeds_to_match.intersection(feed_names)
512
+ # and now that the intersection is done remove those virtual feeds and add CVE-2002 instead if needed
513
+ unless matched_feeds.intersection(virtual_feeds.to_set).empty?
514
+ matched_feeds.subtract(virtual_feeds)
515
+ matched_feeds.add('CVE-2002')
516
+ end
506
517
  feeds_arr = feeds(matched_feeds.to_a)
507
518
  feeds_arr.each do |feed|
508
519
  feed.json_pull
@@ -1,3 +1,3 @@
1
1
  module NvdFeedApi
2
- VERSION = '0.0.3'.freeze
2
+ VERSION = '0.1.0'.freeze
3
3
  end
data/pages/CHANGELOG.md CHANGED
@@ -1,4 +1,11 @@
1
- # [0.0.3] - 6 January 2017
1
+ # [0.1.0] - 17 January 2018
2
+
3
+ [0.1.0]: https://gitlab.com/noraj/nvd_api/tags/v0.1.0
4
+
5
+ - add support for CVE from 1999 to 2001
6
+ - fix tests
7
+
8
+ # [0.0.3] - 6 January 2018
2
9
 
3
10
  [0.0.3]: https://gitlab.com/noraj/nvd_api/tags/v0.0.3
4
11
 
@@ -6,14 +13,14 @@
6
13
  - new badges on README
7
14
  - As rubydoc.info seems bug, use gitlab pages instead for hosting YARD doc
8
15
 
9
- # [0.0.2.pre] - 5 January 2017
16
+ # [0.0.2.pre] - 5 January 2018
10
17
 
11
18
  [0.0.2.pre]: https://gitlab.com/noraj/nvd_api/tags/v0.0.2.pre
12
19
 
13
20
  - Test a new version number to fix a bug with rubygems.org
14
21
  - Correct month name in the dates in the CHANGELOG
15
22
 
16
- # [0.0.1.rc2] - 4 January 2017
23
+ # [0.0.1.rc2] - 4 January 2018
17
24
 
18
25
  [0.0.1.rc2]: https://gitlab.com/noraj/nvd_api/tags/v0.0.1.rc2
19
26
 
@@ -21,7 +28,7 @@
21
28
  - Improve the README to be a good entrypoint.
22
29
  - Improve the FEATURES.
23
30
 
24
- # [0.0.1.rc1] - 4 January 2017
31
+ # [0.0.1.rc1] - 4 January 2018
25
32
 
26
33
  [0.0.1.rc1]: https://gitlab.com/noraj/nvd_api/tags/v0.0.1.rc1
27
34
 
data/pages/EXAMPLES.md CHANGED
@@ -12,10 +12,8 @@ s.scrap
12
12
  # Change the default feed storage location beacause default value is '/tmp/'.
13
13
  # '/tmp/' is mounted as tmpFS and is cleaned at every start.
14
14
  # This will considerably speed up your performance is you have to reboot.
15
- NVDFeedScraper::Feed.default_storage_location = "/home/shark/Dev/cve_feeds"
15
+ NVDFeedScraper::Feed.default_storage_location = "/home/user/Dev/cve_feeds"
16
16
  # Create a {Feed} object for all available feeds
17
- s.feeds(s.available_feeds).each do |f|
18
- # and for each one download the JSON file and fill the attributes.
19
- f.json_pull
20
- end
17
+ # and for each one download the JSON file and fill the attributes.
18
+ s.feeds(s.available_feeds).each(&:json_pull)
21
19
  ```
@@ -9,7 +9,7 @@ class NVDAPITest < Minitest::Test
9
9
  end
10
10
 
11
11
  def test_scraper_scrap
12
- assert_equal(@s.scrap, 0, 'scrap method return nothing')
12
+ assert_equal(0, @s.scrap, 'scrap method return nothing')
13
13
  end
14
14
 
15
15
  def test_scraper_feeds_noarg
@@ -51,27 +51,27 @@ class NVDAPITest < Minitest::Test
51
51
  refute_empty(@s.cve(['CVE-2014-0160', 'cve-2009-3555']), 'cve returns an empty array')
52
52
  # bad arg
53
53
  ## string but not a CVE ID
54
- assert_raises(RuntimeError) do
55
- err = @s.cve('e')
56
- assert_equal(err.message, 'bad CVE name')
54
+ err = assert_raises(RuntimeError) do
55
+ @s.cve('e')
57
56
  end
57
+ assert_equal('bad CVE name', err.message)
58
58
  ## correct CVE ID but bad year
59
- assert_raises(RuntimeError) do
60
- err = @s.cve('CVE-2001-31337')
61
- assert_equal(err.message, 'bad CVE year in ["CVE-2001-31337"]')
59
+ err = assert_raises(RuntimeError) do
60
+ @s.cve('CVE-1800-31337')
62
61
  end
62
+ assert_equal('bad CVE year in ["CVE-1800-31337"]', err.message)
63
63
  ## correct CVE ID and year but unexisting CVE
64
64
  assert_nil(@s.cve('CVE-2004-31337'))
65
65
  ## correct CVE ID and year but unexisting CVE with array arg
66
- assert_raises(RuntimeError) do
67
- err = @s.cve(['CVE-2004-31337', 'CVE-2005-31337'])
68
- assert_equal(err.message, 'CVE-2005-31337 are unexisting CVEs in this feed')
66
+ err = assert_raises(RuntimeError) do
67
+ @s.cve(['CVE-2004-31337', 'CVE-2005-31337'])
69
68
  end
69
+ assert_equal('CVE-2005-31337 are unexisting CVEs in this feed', err.message)
70
70
  ## wrong arg type
71
- assert_raises(RuntimeError) do
72
- err = @s.cve(1)
73
- assert_equal(err.message, 'the provided argument (1) is nor a String or an Array')
71
+ err = assert_raises(RuntimeError) do
72
+ @s.cve(1)
74
73
  end
74
+ assert_equal('the provided argument (1) is nor a String or an Array', err.message)
75
75
  end
76
76
 
77
77
  def test_scraper_update_feeds
@@ -87,10 +87,10 @@ class NVDAPITest < Minitest::Test
87
87
  refute_empty(@s.update_feeds([f2017, f_modified]), 'update_feeds returns an empty array')
88
88
  # bad arg
89
89
  ## wrong arg type
90
- assert_raises(RuntimeError) do
91
- err = @s.update_feeds(1)
92
- assert_equal(err.message, 'the provided argument 1 is not a Feed or an Array')
90
+ err = assert_raises(RuntimeError) do
91
+ @s.update_feeds(1)
93
92
  end
93
+ assert_equal(err.message, 'the provided argument 1 is not a Feed or an Array')
94
94
  ## empty array
95
95
  assert_empty(@s.update_feeds([]))
96
96
  end
@@ -102,7 +102,7 @@ class NVDAPITest < Minitest::Test
102
102
  assert_instance_of(String, default_val, "default_storage_location doesn't return a string")
103
103
  # check new value
104
104
  new_val = '/srv/downloads/'
105
- assert_equal(NVDFeedScraper::Feed.default_storage_location = new_val, new_val, 'the new value was not set properly')
105
+ assert_equal(new_val, NVDFeedScraper::Feed.default_storage_location = new_val, 'the new value was not set properly')
106
106
  # put the default value back / restore context
107
107
  NVDFeedScraper::Feed.default_storage_location = default_val
108
108
  end
@@ -116,7 +116,7 @@ class NVDAPITest < Minitest::Test
116
116
  # Test name
117
117
  assert_instance_of(String, f.name, "name doesn't return a string")
118
118
  refute_empty(f.name, 'name is empty')
119
- assert_equal(f.name, name, 'The name of the feed was modified')
119
+ assert_equal(name, f.name, 'The name of the feed was modified')
120
120
  # Test updated
121
121
  assert_instance_of(String, f.updated, "updated doesn't return a string")
122
122
  refute_empty(f.updated, 'updated is empty')
@@ -127,15 +127,15 @@ class NVDAPITest < Minitest::Test
127
127
  # Test gz_url
128
128
  assert_instance_of(String, f.gz_url, "gz_url doesn't return a string")
129
129
  refute_empty(f.gz_url, 'gz_url is empty')
130
- assert_equal(f.gz_url, gz_url, 'The gz_url of the feed was modified')
130
+ assert_equal(gz_url, f.gz_url, 'The gz_url of the feed was modified')
131
131
  # Test zip_url
132
132
  assert_instance_of(String, f.zip_url, "zip_url doesn't return a string")
133
133
  refute_empty(f.zip_url, 'zip_url is empty')
134
- assert_equal(f.zip_url, zip_url, 'The zip_url url of the feed was modified')
134
+ assert_equal(zip_url, f.zip_url, 'The zip_url url of the feed was modified')
135
135
  # Test meta_url
136
136
  assert_instance_of(String, f.meta_url, "meta_url doesn't return a string")
137
137
  refute_empty(f.meta_url, 'meta_url is empty')
138
- assert_equal(f.meta_url, meta_url, 'The meta_url url of the feed was modified')
138
+ assert_equal(meta_url, f.meta_url, 'The meta_url url of the feed was modified')
139
139
  end
140
140
 
141
141
  def test_feed_available_cves
@@ -149,31 +149,31 @@ class NVDAPITest < Minitest::Test
149
149
  f = @s.feeds('CVE-2012')
150
150
  f.json_pull
151
151
  # one arg
152
- assert_instance_of(Hash, @s.cve('CVE-2012-4969'), "cve doesn't return a hash")
152
+ assert_instance_of(Hash, f.cve('CVE-2012-4969'), "cve doesn't return a hash")
153
153
  # two args
154
- assert_instance_of(Array, @s.cve('CVE-2012-4969', 'cve-2012-1889'), "cve doesn't return an array")
155
- refute_empty(@s.cve('CVE-2012-4969', 'cve-2012-1889'), 'cve returns an empty array')
154
+ assert_instance_of(Array, f.cve('CVE-2012-4969', 'cve-2012-1889'), "cve doesn't return an array")
155
+ refute_empty(f.cve('CVE-2012-4969', 'cve-2012-1889'), 'cve returns an empty array')
156
156
  # array arg
157
- assert_instance_of(Array, @s.cve(['CVE-2012-4969', 'cve-2012-1889']), "cve doesn't return an array")
158
- refute_empty(@s.cve(['CVE-2012-4969', 'cve-2012-1889']), 'cve returns an empty array')
157
+ assert_instance_of(Array, f.cve(['CVE-2012-4969', 'cve-2012-1889']), "cve doesn't return an array")
158
+ refute_empty(f.cve(['CVE-2012-4969', 'cve-2012-1889']), 'cve returns an empty array')
159
159
  # bad arg
160
160
  ## string but not a CVE ID
161
- assert_raises(RuntimeError) do
162
- err = @s.cve('e')
163
- assert_equal(err.message, 'bad CVE name')
161
+ err = assert_raises(RuntimeError) do
162
+ f.cve('e')
164
163
  end
165
- ## correct CVE ID but bad year
166
- assert_nil(@s.cve('CVE-2004-31337'))
167
- ## correct CVE ID and but year not in the feed with array arg
168
- assert_raises(RuntimeError) do
169
- err = @s.cve(['CVE-2004-31337', 'CVE-2005-31337'])
170
- assert_equal(err.message, 'CVE-2004-31337, CVE-2005-31337 are unexisting CVEs in this feed')
164
+ assert_equal('bad CVE name (e)', err.message)
165
+ ## bad year
166
+ assert_nil(f.cve('CVE-2004-31337'))
167
+ ## bad year not in the feed with array arg
168
+ err = assert_raises(RuntimeError) do
169
+ f.cve(['CVE-2004-31337', 'CVE-2005-31337'])
171
170
  end
171
+ assert_equal('CVE-2004-31337, CVE-2005-31337 are unexisting CVEs in this feed', err.message)
172
172
  ## wrong arg type
173
- assert_raises(RuntimeError) do
174
- err = @s.cve(1)
175
- assert_equal(err.message, 'the provided argument (1) is nor a String or an Array')
173
+ err = assert_raises(RuntimeError) do
174
+ f.cve(1)
176
175
  end
176
+ assert_equal('the provided argument (1) is nor a String or an Array', err.message)
177
177
  end
178
178
 
179
179
  def test_feed_download_gz
@@ -208,19 +208,19 @@ class NVDAPITest < Minitest::Test
208
208
 
209
209
  def test_meta_parse_noarg
210
210
  m = NVDFeedScraper::Meta.new('https://static.nvd.nist.gov/feeds/json/cve/1.0/nvdcve-1.0-2015.meta')
211
- assert_equal(m.parse, 0, 'parse method return nothing')
211
+ assert_equal(0, m.parse, 'parse method return nothing')
212
212
  end
213
213
 
214
214
  def test_meta_parse_witharg
215
215
  m = NVDFeedScraper::Meta.new
216
216
  meta_url = 'https://static.nvd.nist.gov/feeds/json/cve/1.0/nvdcve-1.0-2015.meta'
217
- assert_equal(m.parse(meta_url), 0, 'parse method return nothing')
217
+ assert_equal(0, m.parse(meta_url), 'parse method return nothing')
218
218
  end
219
219
 
220
220
  def test_meta_url_setter
221
221
  m = NVDFeedScraper::Meta.new
222
222
  meta_url = 'https://static.nvd.nist.gov/feeds/json/cve/1.0/nvdcve-1.0-2015.meta'
223
- assert_equal(m.url = meta_url, meta_url, 'the meta URL is not set correctly')
223
+ assert_equal(meta_url, m.url = meta_url, 'the meta URL is not set correctly')
224
224
  end
225
225
 
226
226
  def test_meta_attributes
@@ -243,7 +243,7 @@ class NVDAPITest < Minitest::Test
243
243
  assert(m.size.match?(/[0-9]+/), 'Meta size is not an integer')
244
244
  # Test url
245
245
  assert_instance_of(String, m.url, "Meta url method doesn't return a string")
246
- assert_equal(m.url, meta_url, 'The Meta url was modified')
246
+ assert_equal(meta_url, m.url, 'The Meta url was modified')
247
247
  # Test zip_size
248
248
  assert_instance_of(String, m.zip_size, "Meta zip_size method doesn't return a string")
249
249
  assert(m.zip_size.match?(/[0-9]+/), 'Meta zip_size is not an integer')
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nvd_feed_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexandre ZANNI
@@ -223,7 +223,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
223
223
  version: '0'
224
224
  requirements: []
225
225
  rubyforge_project:
226
- rubygems_version: 2.6.13
226
+ rubygems_version: 2.6.14
227
227
  signing_key:
228
228
  specification_version: 4
229
229
  summary: API for NVD CVE feeds