nvd_feed_api 0.0.3 → 0.1.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 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