sonar-client 0.1.4 → 0.1.6

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
- SHA1:
3
- metadata.gz: 4dc46841e0ddf4f091d927804c15b77b5ad95d33
4
- data.tar.gz: 50cfb040770c7b69ef437e09edc48adf1d08fa81
2
+ SHA256:
3
+ metadata.gz: e013916a1cf6c42fbd99d568ee88529cc7ac581b83aad80a4b62e4c2175aec7e
4
+ data.tar.gz: fb2e18d3b290f1dffb370448c603f3853fd380635ca79c5e8936e124f24fdcd5
5
5
  SHA512:
6
- metadata.gz: 27c4336fe464f3f988df579531b2795318a12b08055b8fa049cd32104a3a7d1de577480fcc3c96c93cb1739d223ff24f28ee7e7599b052393d9e98996424cffb
7
- data.tar.gz: 4f237e0a682fdaf8e90a9c8f63c630a4e4da90e0566550f0f1ff5659edcb99fc10be33c50f8a112d7c03ecde8ccb93230cfc93e8e0053c04e4cd5438ddeb2ca5
6
+ metadata.gz: 61c7694ca76d748ad6354f0010ab0891f28d4ed28999e4d57b32d15d5e816e0bf5fd57d311fac06937a19be937a1295016bdf44b9823faa748e51eeaf5b8f71f
7
+ data.tar.gz: 6dc07ee303279815e6b88f662be748292875d198f72759a828b4032ce012c27b9915869e89ba197b057261c5e7208db59075959fbef4b0db830cb891b6ad8142
@@ -2,9 +2,14 @@ language: ruby
2
2
  sudo: false
3
3
  cache: bundler
4
4
  rvm:
5
- - 2.2.2
6
- - jruby-9.1.5.0
5
+ - '2.4.5'
6
+ - '2.5.5'
7
+ - '2.6.5'
8
+ - '2.7.1'
9
+ - 'jruby-head'
7
10
  before_install:
11
+ - gem install bundler
12
+ - gem update bundler
8
13
  - "echo 'gem: --no-ri --no-rdoc' > ~/.gemrc"
9
14
  - rake --version
10
15
  before_script:
@@ -3,11 +3,10 @@
3
3
  require 'thor'
4
4
  require 'sonar/cli/rcfile'
5
5
  require 'sonar/search'
6
+ require 'sonar/request'
6
7
  require 'awesome_print'
7
8
  require 'table_print'
8
9
 
9
- include Sonar::Search
10
-
11
10
  module Sonar
12
11
  class CLI < Thor
13
12
  class_option 'format', type: :string, desc: 'Flat JSON (include empty collections), JSON lines of collection data (default), or pretty printed [flat/lines/pretty]'
@@ -35,10 +34,10 @@ module Sonar
35
34
  types = [type]
36
35
 
37
36
  if type == 'all'
38
- if term =~ IS_IP
39
- types = ip_search_type_names
37
+ if term =~ Search::IS_IP
38
+ types = @client.ip_search_type_names
40
39
  else
41
- types = domain_search_type_names
40
+ types = @client.domain_search_type_names
42
41
  end
43
42
  end
44
43
 
@@ -55,7 +54,7 @@ module Sonar
55
54
  desc 'types', 'List all Sonar query types'
56
55
  def types
57
56
  tp.set :io, $stdout
58
- tp QUERY_TYPES, :name, { description: { width: 100 } }, :input
57
+ tp Search::QUERY_TYPES, :name, { description: { width: 100 } }, :input
59
58
  end
60
59
 
61
60
  desc 'config', 'Sonar config file location'
@@ -83,6 +82,21 @@ module Sonar
83
82
  end
84
83
  end
85
84
 
85
+ def handle_search_response(resp)
86
+ errors = 0
87
+ if resp.is_a?(Sonar::Request::RequestIterator)
88
+ resp.each do |data|
89
+ errors += 1 if data.key?('errors') || data.key?('error')
90
+ print_json(cleanup_data(data), options['format'])
91
+ end
92
+ else
93
+ errors += 1 if resp.key?('errors') || resp.key?('error')
94
+ print_json(cleanup_data(resp), options['format'])
95
+ end
96
+
97
+ raise Search::SearchError.new("Encountered #{errors} errors while searching") if errors > 0
98
+ end
99
+
86
100
  # Clean up whitespace and parse JSON values in responses
87
101
  def cleanup_data(data)
88
102
  return data unless data.is_a?(Hash) && data.has_key?('collection')
@@ -48,21 +48,6 @@ module Sonar
48
48
  QUERY_TYPES.map { |type| type[:name] }
49
49
  end
50
50
 
51
- def handle_search_response(resp)
52
- errors = 0
53
- if resp.is_a?(Sonar::Request::RequestIterator)
54
- resp.each do |data|
55
- errors += 1 if data.key?('errors') || data.key?('error')
56
- print_json(cleanup_data(data), options['format'])
57
- end
58
- else
59
- errors += 1 if resp.key?('errors') || resp.key?('error')
60
- print_json(cleanup_data(resp), options['format'])
61
- end
62
-
63
- raise Search::SearchError.new("Encountered #{errors} errors while searching") if errors > 0
64
- end
65
-
66
51
  ##
67
52
  # Get search
68
53
  #
@@ -1,3 +1,3 @@
1
1
  module Sonar
2
- VERSION = "0.1.4"
2
+ VERSION = "0.1.6"
3
3
  end
@@ -18,8 +18,8 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_dependency 'faraday_middleware', '~> 0.9.0'
22
- spec.add_dependency 'hashie', '~> 2.0.3'
21
+ spec.add_dependency 'faraday_middleware'
22
+ spec.add_dependency 'hashie'
23
23
  spec.add_dependency 'multi_json'
24
24
  spec.add_dependency 'thor'
25
25
  spec.add_dependency 'awesome_print'
@@ -31,8 +31,8 @@ Gem::Specification.new do |spec|
31
31
  spec.add_development_dependency "simplecov"
32
32
  spec.add_development_dependency "simplecov-rcov"
33
33
  spec.add_development_dependency "yard"
34
- spec.add_development_dependency "vcr", '~> 2.8.0'
34
+ spec.add_development_dependency "vcr", '~> 4.0.0'
35
35
  spec.add_development_dependency "shoulda"
36
- spec.add_development_dependency "webmock", '~> 1.8.0'
36
+ spec.add_development_dependency "webmock", '~> 3.5.1'
37
37
  spec.add_development_dependency "api_matchers"
38
38
  end
@@ -58,27 +58,27 @@ describe Sonar::CLI do
58
58
  end
59
59
  end
60
60
  describe 'searching with #exact --exact option' do
61
- context 'client that returns fdns for rapid7 IP exact' do
61
+ context 'client that returns fdns for rapid7 exact' do
62
62
  before do
63
63
  allow_any_instance_of(Sonar::Client).to receive(:search).and_return(
64
- Sonar::Client.new.search(fdns: '208.118.227.20', exact: true)
64
+ Sonar::Client.new.search(fdns: 'rapid7.com', exact: true)
65
65
  )
66
66
  end
67
67
  it 'matches exactly with --exact' do
68
- output = run_command('search fdns 208.118.227.20 --exact')
68
+ output = run_command('search fdns rapid7.com --exact')
69
69
  expect(JSON.parse(output)['collection'].size).to be >= 1
70
- expect(JSON.parse(output)['collection'].any? { |c| c['name'] == '208.118.227.20' }).to be(true)
70
+ expect(JSON.parse(output)['collection'].map{ |x| x['name'] }.uniq).to eq ['rapid7.com']
71
71
  end
72
72
  end
73
73
  context 'client that returns fdns for rapid7 IP' do
74
74
  before do
75
75
  allow_any_instance_of(Sonar::Client).to receive(:search).and_return(
76
- Sonar::Client.new.search(fdns: '208.118.227.20')
76
+ Sonar::Client.new.search(fdns: 'rapid7.com')
77
77
  )
78
78
  end
79
- it 'matches exactly without --exact' do
80
- output = run_command('search fdns 208.118.227.20')
81
- expect(JSON.parse(output)['collection'].size).to be > 1
79
+ it 'matches many domains without --exact' do
80
+ output = run_command('search fdns rapid7.com')
81
+ expect(JSON.parse(output)['collection'].map{ |x| x['name'] }.uniq.size).to be > 1
82
82
  end
83
83
  end
84
84
  end
@@ -2,23 +2,26 @@
2
2
  require 'spec_helper'
3
3
 
4
4
  describe Sonar::Search do
5
+ let(:dummy_class) {
6
+ Class.new { extend Sonar::Search }
7
+ }
5
8
  let(:client) { Sonar::Client.new }
6
9
 
7
10
  describe "#ip_search_type_names" do
8
11
  it 'includes rdns' do
9
- expect(subject.ip_search_type_names).to include('rdns')
12
+ expect(dummy_class.ip_search_type_names).to include('rdns')
10
13
  end
11
14
  it 'does not include fdns' do
12
- expect(subject.ip_search_type_names).to_not include('fdns')
15
+ expect(dummy_class.ip_search_type_names).to_not include('fdns')
13
16
  end
14
17
  end
15
18
 
16
19
  describe "#domain_search_type_names" do
17
20
  it 'includes fdns' do
18
- expect(subject.domain_search_type_names).to include('fdns')
21
+ expect(dummy_class.domain_search_type_names).to include('fdns')
19
22
  end
20
23
  it 'does not include rdns' do
21
- expect(subject.domain_search_type_names).to_not include('rdns')
24
+ expect(dummy_class.domain_search_type_names).to_not include('rdns')
22
25
  end
23
26
  end
24
27
 
@@ -38,7 +41,7 @@ describe Sonar::Search do
38
41
  end
39
42
  it "should match when #exact is false" do
40
43
  resp = client.search(fdns: ".rapid7.com", exact: false)
41
- expect(resp["collection"].size).to be > 0
44
+ expect(resp["collection"].size).to be > 0
42
45
  end
43
46
  end
44
47
 
@@ -107,16 +110,16 @@ describe Sonar::Search do
107
110
  it "returns hashie response of search" do
108
111
  expect(resp.class).to eq(Hashie::Mash)
109
112
  end
110
- it "finds fdnsname 208.118.227.10 for rapid7.com" do
111
- expect(resp['collection'].any? { |x| x['address'] == '208.118.227.10' }).to be(true)
113
+ it "finds fdnsname multiple IP addresses for rapid7.com" do
114
+ expect(resp['collection'].select { |x| x['address'] }.size).to be >= 2
112
115
  end
113
116
  end
114
117
 
115
118
  context "fdnsip" do
116
119
  let(:resp) { client.search(fdns: '208.118.227.10') }
117
120
 
118
- it "finds fdnsip rapid7.com at 208.118.227.10" do
119
- expect(resp['collection'].any? { |x| x['address'].match('rapid7') }).to be(true)
121
+ it "finds fdnsip rapid7 domains at 208.118.227.10" do
122
+ expect(resp['collection'].any? { |x| x['address'].match('rapidseven') }).to be(true)
120
123
  end
121
124
  end
122
125
 
metadata CHANGED
@@ -1,43 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sonar-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paul Deardorff & HD Moore
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-08-10 00:00:00.000000000 Z
11
+ date: 2020-09-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday_middleware
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 0.9.0
19
+ version: '0'
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.9.0
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: hashie
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 2.0.3
33
+ version: '0'
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: 2.0.3
40
+ version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: multi_json
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -184,14 +184,14 @@ dependencies:
184
184
  requirements:
185
185
  - - "~>"
186
186
  - !ruby/object:Gem::Version
187
- version: 2.8.0
187
+ version: 4.0.0
188
188
  type: :development
189
189
  prerelease: false
190
190
  version_requirements: !ruby/object:Gem::Requirement
191
191
  requirements:
192
192
  - - "~>"
193
193
  - !ruby/object:Gem::Version
194
- version: 2.8.0
194
+ version: 4.0.0
195
195
  - !ruby/object:Gem::Dependency
196
196
  name: shoulda
197
197
  requirement: !ruby/object:Gem::Requirement
@@ -212,14 +212,14 @@ dependencies:
212
212
  requirements:
213
213
  - - "~>"
214
214
  - !ruby/object:Gem::Version
215
- version: 1.8.0
215
+ version: 3.5.1
216
216
  type: :development
217
217
  prerelease: false
218
218
  version_requirements: !ruby/object:Gem::Requirement
219
219
  requirements:
220
220
  - - "~>"
221
221
  - !ruby/object:Gem::Version
222
- version: 1.8.0
222
+ version: 3.5.1
223
223
  - !ruby/object:Gem::Dependency
224
224
  name: api_matchers
225
225
  requirement: !ruby/object:Gem::Requirement
@@ -294,7 +294,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
294
294
  version: '0'
295
295
  requirements: []
296
296
  rubyforge_project:
297
- rubygems_version: 2.4.8
297
+ rubygems_version: 2.7.9
298
298
  signing_key:
299
299
  specification_version: 4
300
300
  summary: API Wrapper for Sonar