sonar-client 0.1.4 → 0.1.6

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
- 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