sonar-client 0.0.5 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/sonar/certificate.rb +1 -1
- data/lib/sonar/cli/cli.rb +10 -6
- data/lib/sonar/cli/rcfile.rb +4 -0
- data/lib/sonar/request.rb +1 -1
- data/lib/sonar/version.rb +1 -1
- data/spec/fixtures/sonar-stock.rc +3 -0
- data/spec/sonar/certificate_spec.rb +2 -2
- data/spec/sonar/cli_spec.rb +36 -1
- data/spec/sonar/search_spec.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bfc392531d73c07dc38bdd9c2064d64ced271455
|
4
|
+
data.tar.gz: c59580c7f121c73586310e04623839cf3e2a0e7a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a793b6cbe98628a1bf4414bdea5ec24c4f06adcf3d4b4a9066be491b241847b5adbcc0f2b37d8408bd1179cbe47b22e78f27315c99879d8e3422391edc717ccb
|
7
|
+
data.tar.gz: 8bb3e13a7914179f2a3ce8558419e782492bf84d9d8fe09e0cde218d034dfbc2d73399808ae4769140353331f48bba65c3b1e10908f3e6716a6ca07dd2cf9b6f
|
data/lib/sonar/certificate.rb
CHANGED
@@ -8,7 +8,7 @@ module Sonar
|
|
8
8
|
#
|
9
9
|
# @return [Hashie::Mash] with response of certificate
|
10
10
|
def get_certificate(options = {})
|
11
|
-
response =
|
11
|
+
response = get_endpoint("certificates/#{options[:sha1]}", options)
|
12
12
|
response if response
|
13
13
|
end
|
14
14
|
end
|
data/lib/sonar/cli/cli.rb
CHANGED
@@ -28,10 +28,13 @@ module Sonar
|
|
28
28
|
|
29
29
|
desc 'search [QUERY TYPE] [QUERY TERM]', 'Search anything from Sonars'
|
30
30
|
method_option 'record_limit', type: :numeric, aliases: '-n', desc: 'Maximum number of records to fetch'
|
31
|
+
method_option 'exact', type: :boolean, aliases: '-e', desc: 'Search for the query string exactly, do not including partial string matches'
|
32
|
+
|
31
33
|
def search(type, term)
|
32
34
|
@query = {}
|
33
35
|
@query[type.to_sym] = term
|
34
36
|
@query[:limit] = options['record_limit']
|
37
|
+
@query[:exact] = options['exact']
|
35
38
|
resp = @client.search(@query)
|
36
39
|
|
37
40
|
if resp.is_a?(Sonar::Request::RequestIterator)
|
@@ -56,19 +59,20 @@ module Sonar
|
|
56
59
|
|
57
60
|
private
|
58
61
|
|
59
|
-
def print_json(
|
62
|
+
def print_json(data, format)
|
60
63
|
case format
|
61
64
|
when 'pretty'
|
62
|
-
ap(
|
65
|
+
ap(data)
|
63
66
|
when 'lines'
|
64
|
-
if
|
65
|
-
|
67
|
+
if data.has_key?('collection')
|
68
|
+
data['collection'].each { |l| puts l.to_json }
|
66
69
|
else
|
67
|
-
puts 'Could not parse the response into lines.'
|
70
|
+
puts 'WARNING: Could not parse the response into lines, there was no collection.'
|
71
|
+
puts data.to_json
|
68
72
|
end
|
69
73
|
else
|
70
74
|
# TODO: use a faster JSON generator?
|
71
|
-
puts(
|
75
|
+
puts(data.to_json)
|
72
76
|
end
|
73
77
|
end
|
74
78
|
|
data/lib/sonar/cli/rcfile.rb
CHANGED
@@ -22,7 +22,11 @@ module Sonar
|
|
22
22
|
f.puts 'format: flat'
|
23
23
|
f.puts 'record_limit: 10000'
|
24
24
|
end
|
25
|
+
warn = "Please set your email and API token in sonar.rc"
|
26
|
+
puts "=" * warn.size
|
25
27
|
puts "Config file setup at: #{@path}"
|
28
|
+
puts warn
|
29
|
+
puts "=" * warn.size
|
26
30
|
end
|
27
31
|
|
28
32
|
def load_file
|
data/lib/sonar/request.rb
CHANGED
data/lib/sonar/version.rb
CHANGED
@@ -5,9 +5,9 @@ describe Sonar::Search do
|
|
5
5
|
let(:client) { Sonar::Client.new }
|
6
6
|
|
7
7
|
context "sha1 #get_certificate" do
|
8
|
-
it "should find the
|
8
|
+
it "should find the link to certificate by sha1" do
|
9
9
|
res = client.get_certificate(sha1: "1e80c24b97c928bb1db7d4d3c05475a6a40a1186")
|
10
|
-
expect(res.
|
10
|
+
expect(res._links.self.href).to match(/certificates/)
|
11
11
|
end
|
12
12
|
end
|
13
13
|
end
|
data/spec/sonar/cli_spec.rb
CHANGED
@@ -2,6 +2,16 @@
|
|
2
2
|
require 'spec_helper'
|
3
3
|
|
4
4
|
describe Sonar::CLI do
|
5
|
+
context 'with an invalid stock sonar.rc profile' do
|
6
|
+
before do
|
7
|
+
Sonar::RCFile.instance.path = "#{fixtures_path}/sonar-stock.rc"
|
8
|
+
end
|
9
|
+
it 'warns user of missing config values when trying to search' do
|
10
|
+
output = run_command('search rdns 8.8.8.8')
|
11
|
+
expect(output).to match(/Could not authenticate/)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
5
15
|
context "with a valid profile" do
|
6
16
|
before do
|
7
17
|
Sonar::RCFile.instance.path = "#{fixtures_path}/sonar.rc"
|
@@ -43,11 +53,36 @@ describe Sonar::CLI do
|
|
43
53
|
Sonar::Client.new.search(processed: '8.8.8.')
|
44
54
|
)
|
45
55
|
end
|
46
|
-
|
56
|
+
xit 'parses the nested value as a string' do
|
47
57
|
output = run_command('search processed 8.8.8.')
|
48
58
|
expect(JSON.parse(output)['collection'].first['value']['ip']).to eq('8.8.8.8')
|
49
59
|
end
|
50
60
|
end
|
61
|
+
describe 'searching with #exact --exact option' do
|
62
|
+
context 'client that returns fdns for rapid7 IP exact' do
|
63
|
+
before do
|
64
|
+
allow_any_instance_of(Sonar::Client).to receive(:search).and_return(
|
65
|
+
Sonar::Client.new.search(fdns: '208.118.227.20', exact: true)
|
66
|
+
)
|
67
|
+
end
|
68
|
+
it 'matches exactly with --exact' do
|
69
|
+
output = run_command('search fdns 208.118.227.20 --exact')
|
70
|
+
expect(JSON.parse(output)['collection'].size).to eq(1)
|
71
|
+
expect(JSON.parse(output)['collection'].first['name']).to eq('208.118.227.20')
|
72
|
+
end
|
73
|
+
end
|
74
|
+
context 'client that returns fdns for rapid7 IP' do
|
75
|
+
before do
|
76
|
+
allow_any_instance_of(Sonar::Client).to receive(:search).and_return(
|
77
|
+
Sonar::Client.new.search(fdns: '208.118.227.20')
|
78
|
+
)
|
79
|
+
end
|
80
|
+
it 'matches exactly without --exact' do
|
81
|
+
output = run_command('search fdns 208.118.227.20')
|
82
|
+
expect(JSON.parse(output)['collection'].size).to be > 1
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
51
86
|
end
|
52
87
|
|
53
88
|
def run_command(args)
|
data/spec/sonar/search_spec.rb
CHANGED
@@ -98,7 +98,7 @@ describe Sonar::Search do
|
|
98
98
|
let(:resp) { client.search(fdns: '208.118.227.10') }
|
99
99
|
|
100
100
|
it "finds fdnsip rapid7.com at 208.118.227.10" do
|
101
|
-
expect(resp['collection'].any? { |x| x['address']
|
101
|
+
expect(resp['collection'].any? { |x| x['address'] =~ 'rapid7' }).to be(true)
|
102
102
|
end
|
103
103
|
end
|
104
104
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sonar-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.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: 2015-
|
11
|
+
date: 2015-09-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday_middleware
|
@@ -247,6 +247,7 @@ files:
|
|
247
247
|
- lib/sonar/user.rb
|
248
248
|
- lib/sonar/version.rb
|
249
249
|
- sonar-client.gemspec
|
250
|
+
- spec/fixtures/sonar-stock.rc
|
250
251
|
- spec/fixtures/sonar.rc
|
251
252
|
- spec/sonar/certificate_spec.rb
|
252
253
|
- spec/sonar/cli_spec.rb
|
@@ -280,6 +281,7 @@ signing_key:
|
|
280
281
|
specification_version: 4
|
281
282
|
summary: API Wrapper for Sonar
|
282
283
|
test_files:
|
284
|
+
- spec/fixtures/sonar-stock.rc
|
283
285
|
- spec/fixtures/sonar.rc
|
284
286
|
- spec/sonar/certificate_spec.rb
|
285
287
|
- spec/sonar/cli_spec.rb
|