NexposeRunner 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- YTNhMjI2Yjc3M2YxMzU4MDA1MzZiZTMzYWY0YWE2YjJiMWE2YjYyNg==
5
- data.tar.gz: !binary |-
6
- MTRiZGMzMjZmNzFlNDhhZWI4MTlkNGIxYmIyMzFhMzM5YjcwYTI2MA==
2
+ SHA1:
3
+ metadata.gz: 02276abd1b4120d897508fcb94c7feaa3fccf278
4
+ data.tar.gz: c46e6ce75664e562fd927c02001e5314413e2902
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- ZjE0OGE3M2U3YjAxMzg2NmFkNjMzODU0NzFlYjkyZGU4ZjNhMmQ0NjQ4ZDJj
10
- MTY1YjJhMTczOTg3YzhiMzI4Y2MzZDJkN2QwZjFjOGI5ZTA2YWY0MDk1ZDNk
11
- N2ZlNzYwMDVmZjA2NWU3ZDk2NjZhNWJlNTM3N2VjNDI0MjNkMmQ=
12
- data.tar.gz: !binary |-
13
- NWIzNzEyMmU1ZjM2NTQ2YTIwZGFjZjAwYTQ3YTA5M2ZlMGU1MzcxZWEwNWQ2
14
- MzEwZWM3MzExMGIyZWI3OTk4MjRkZWJiZDA4Mzg3Zjk1ZDY0MzYxZDk5OTA3
15
- ODM1ZGU2YmNmZGUzZjE0MjQ4MzViZTM5ZDg4MjNmYjcxMWVlMTQ=
6
+ metadata.gz: c1a363a68c45979d152092fb147b061947476f8043e4b5ea957d86933607ba51fe221bea9b674d45b9e8ed570fd856169fb42d1f2c69d091292286e8b3a714ab
7
+ data.tar.gz: 11dd648fab97053056db276678cdf6dcd407b91266a3352e055bd81a90589040ab6296b30390c2f23db6fcb35af84155e8061412536671e5a7a39b8d9a9bed25
@@ -1,4 +1,4 @@
1
1
  module NexposeRunner
2
- VERSION = '0.0.3'
2
+ VERSION = '0.0.4'
3
3
  end
4
4
 
@@ -6,9 +6,9 @@ require 'nexpose-runner/scan_run_description'
6
6
 
7
7
  module NexposeRunner
8
8
  module Scan
9
- def Scan.start(connection_url, username, password, port, site_name, ip_address, scan_template)
9
+ def Scan.start(connection_url, username, password, port, site_name, ip_addresses, scan_template)
10
10
 
11
- run_details = ScanRunDescription.new connection_url, username, password, port, site_name, ip_address, scan_template
11
+ run_details = ScanRunDescription.new connection_url, username, password, port, site_name, ip_addresses, scan_template
12
12
  run_details.verify
13
13
 
14
14
  nsc = get_new_nexpose_connection(run_details)
@@ -59,9 +59,11 @@ module NexposeRunner
59
59
  def self.create_site(run_details, nsc)
60
60
  puts "Creating a nexpose site named #{run_details.site_name}"
61
61
  site = Nexpose::Site.new run_details.site_name, run_details.scan_template
62
- site.add_ip run_details.ip_address
62
+ run_details.ip_addresses.each { |address|
63
+ site.add_ip address
64
+ }
63
65
  site.save nsc
64
- puts "Created site #{run_details.site_name} successfully with the following host #{run_details.ip_address}"
66
+ puts "Created site #{run_details.site_name} successfully with the following host(s) #{run_details.ip_addresses.join(', ')}"
65
67
  site
66
68
  end
67
69
 
@@ -1,15 +1,15 @@
1
1
  class ScanRunDescription
2
- attr_accessor :connection_url, :username, :password, :port, :site_name, :ip_address, :scan_template
2
+ attr_accessor :connection_url, :username, :password, :port, :site_name, :ip_addresses, :scan_template
3
3
  @@port_value = ''
4
+ @@ip_addresses = ''
4
5
 
5
-
6
- def initialize(connection_url, username, password, port, site_name, ip_address, scan_template)
6
+ def initialize(connection_url, username, password, port, site_name, ip_addresses, scan_template)
7
7
  self.connection_url = connection_url
8
8
  self.username = username
9
9
  self.password = password
10
10
  @@port_value = port
11
11
  self.site_name = site_name
12
- self.ip_address = ip_address
12
+ self.ip_addresses = ip_addresses
13
13
  self.scan_template = scan_template
14
14
  end
15
15
 
@@ -18,7 +18,7 @@ class ScanRunDescription
18
18
  raise StandardError, CONSTANTS::REQUIRED_USERNAME_MESSAGE if username.nil? || username.empty?
19
19
  raise StandardError, CONSTANTS::REQUIRED_PASSWORD_MESSAGE if password.nil? || password.empty?
20
20
  raise StandardError, CONSTANTS::REQUIRED_SITE_NAME_MESSAGE if site_name.nil? || site_name.empty?
21
- raise StandardError, CONSTANTS::REQUIRED_IP_ADDRESS_MESSAGE if ip_address.nil? || ip_address.empty?
21
+ raise StandardError, CONSTANTS::REQUIRED_IP_ADDRESS_MESSAGE if ip_addresses.length == 0
22
22
  raise StandardError, CONSTANTS::REQUIRED_SCAN_TEMPLATE_MESSAGE if scan_template.nil? || scan_template.empty?
23
23
  end
24
24
 
@@ -30,7 +30,15 @@ class ScanRunDescription
30
30
  get_value(@@port_value, CONSTANTS::DEFAULT_PORT)
31
31
  end
32
32
 
33
+ def ip_addresses=(value)
34
+ @@ip_addresses = value.split(',')
35
+ end
36
+
37
+ def ip_addresses
38
+ @@ip_addresses
39
+ end
40
+
33
41
  def get_value(value_to_check, default)
34
42
  (value_to_check.nil? || value_to_check.empty?) ? default : value_to_check
35
43
  end
36
- end
44
+ end
data/spec/scan_spec.rb CHANGED
@@ -13,7 +13,7 @@ describe 'nexpose-runner' do
13
13
  @expected_password = 'password'
14
14
  @expected_port = '3781'
15
15
  @expected_site_name = 'my_cool_software_build-28'
16
- @expected_ip = '10.5.0.15'
16
+ @expected_ips = '10.5.0.15,10.5.0.20,10.5.0.35'
17
17
  @expected_scan_template = 'full-audit-widget-corp'
18
18
  @mock_scan_id = '12'
19
19
  @mock_site_id = '1'
@@ -52,37 +52,36 @@ describe 'nexpose-runner' do
52
52
  expect(@mock_nexpose_client).to receive(:login)
53
53
  .and_return(true)
54
54
 
55
- NexposeRunner::Scan.start(@expected_connection, @expected_username, @expected_password, @expected_port, @expected_site_name, @expected_ip, @expected_scan_template)
55
+ NexposeRunner::Scan.start(@expected_connection, @expected_username, @expected_password, @expected_port, @expected_site_name, @expected_ips, @expected_scan_template)
56
56
  end
57
57
 
58
58
  it 'should throw an error if no connection url is passed' do
59
- expect { NexposeRunner::Scan.start('', @expected_username, @expected_password, @expected_port, @expected_site_name, @expected_ip, @expected_scan_template) }.to raise_error(StandardError, 'OOPS! Looks like you forgot to give me the URL/IP address to your Nexpose Server')
60
- expect { NexposeRunner::Scan.start(nil, @expected_port, @expected_username, @expected_password, @expected_site_name, @expected_ip, @expected_scan_template) }.to raise_error(StandardError, 'OOPS! Looks like you forgot to give me the URL/IP address to your Nexpose Server')
59
+ expect { NexposeRunner::Scan.start('', @expected_username, @expected_password, @expected_port, @expected_site_name, @expected_ips, @expected_scan_template) }.to raise_error(StandardError, 'OOPS! Looks like you forgot to give me the URL/IP address to your Nexpose Server')
60
+ expect { NexposeRunner::Scan.start(nil, @expected_port, @expected_username, @expected_password, @expected_site_name, @expected_ips, @expected_scan_template) }.to raise_error(StandardError, 'OOPS! Looks like you forgot to give me the URL/IP address to your Nexpose Server')
61
61
  end
62
62
 
63
63
  it 'should throw an error if no username is passed' do
64
- expect { NexposeRunner::Scan.start(@expected_connection, '', @expected_password, @expected_port, @expected_site_name, @expected_ip, @expected_scan_template) }.to raise_error(StandardError, 'OOPS! Looks like you forgot to give me a username to login to Nexpose with')
65
- expect { NexposeRunner::Scan.start(@expected_connection, nil, @expected_password, @expected_port, @expected_site_name, @expected_ip, @expected_scan_template) }.to raise_error(StandardError, 'OOPS! Looks like you forgot to give me a username to login to Nexpose with')
64
+ expect { NexposeRunner::Scan.start(@expected_connection, '', @expected_password, @expected_port, @expected_site_name, @expected_ips, @expected_scan_template) }.to raise_error(StandardError, 'OOPS! Looks like you forgot to give me a username to login to Nexpose with')
65
+ expect { NexposeRunner::Scan.start(@expected_connection, nil, @expected_password, @expected_port, @expected_site_name, @expected_ips, @expected_scan_template) }.to raise_error(StandardError, 'OOPS! Looks like you forgot to give me a username to login to Nexpose with')
66
66
  end
67
67
 
68
68
  it 'should throw an error if no password is passed' do
69
- expect { NexposeRunner::Scan.start(@expected_connection, @expected_username, '', @expected_port, @expected_site_name, @expected_ip, @expected_scan_template) }.to raise_error(StandardError, 'OOPS! Looks like you forgot to give me a password to login to Nexpose with')
70
- expect { NexposeRunner::Scan.start(@expected_connection, @expected_username, nil, @expected_port, @expected_site_name, @expected_ip, @expected_scan_template) }.to raise_error(StandardError, 'OOPS! Looks like you forgot to give me a password to login to Nexpose with')
69
+ expect { NexposeRunner::Scan.start(@expected_connection, @expected_username, '', @expected_port, @expected_site_name, @expected_ips, @expected_scan_template) }.to raise_error(StandardError, 'OOPS! Looks like you forgot to give me a password to login to Nexpose with')
70
+ expect { NexposeRunner::Scan.start(@expected_connection, @expected_username, nil, @expected_port, @expected_site_name, @expected_ips, @expected_scan_template) }.to raise_error(StandardError, 'OOPS! Looks like you forgot to give me a password to login to Nexpose with')
71
71
  end
72
72
 
73
73
  it 'should throw an error if no site name is passed' do
74
- expect { NexposeRunner::Scan.start(@expected_connection, @expected_username, @expected_password, @expected_port, '', @expected_ip, @expected_scan_template) }.to raise_error(StandardError, 'OOPS! Looks like you forgot to give me a Nexpose Site Name')
75
- expect { NexposeRunner::Scan.start(@expected_connection, @expected_username, @expected_password, @expected_port, nil, @expected_ip, @expected_scan_template) }.to raise_error(StandardError, 'OOPS! Looks like you forgot to give me a Nexpose Site Name')
74
+ expect { NexposeRunner::Scan.start(@expected_connection, @expected_username, @expected_password, @expected_port, '', @expected_ips, @expected_scan_template) }.to raise_error(StandardError, 'OOPS! Looks like you forgot to give me a Nexpose Site Name')
75
+ expect { NexposeRunner::Scan.start(@expected_connection, @expected_username, @expected_password, @expected_port, nil, @expected_ips, @expected_scan_template) }.to raise_error(StandardError, 'OOPS! Looks like you forgot to give me a Nexpose Site Name')
76
76
  end
77
77
 
78
78
  it 'should throw an error if no ip address is passed' do
79
79
  expect { NexposeRunner::Scan.start(@expected_connection, @expected_username, @expected_password, @expected_port, @expected_site_name, '', @expected_scan_template) }.to raise_error(StandardError, 'OOPS! Looks like you forgot to give me an IP Address to scan')
80
- expect { NexposeRunner::Scan.start(@expected_connection, @expected_username, @expected_password, @expected_port, @expected_site_name, nil, @expected_scan_template) }.to raise_error(StandardError, 'OOPS! Looks like you forgot to give me an IP Address to scan')
81
80
  end
82
81
 
83
82
  it 'should throw an error if no scan template is passed' do
84
- expect { NexposeRunner::Scan.start(@expected_connection, @expected_username, @expected_password, @expected_port, @expected_site_name, @expected_ip, '') }.to raise_error(StandardError, 'OOPS! Looks like you forgot to give me a Scan Template to use')
85
- expect { NexposeRunner::Scan.start(@expected_connection, @expected_username, @expected_password, @expected_port, @expected_site_name, @expected_ip, nil) }.to raise_error(StandardError, 'OOPS! Looks like you forgot to give me a Scan Template to use')
83
+ expect { NexposeRunner::Scan.start(@expected_connection, @expected_username, @expected_password, @expected_port, @expected_site_name, @expected_ips, '') }.to raise_error(StandardError, 'OOPS! Looks like you forgot to give me a Scan Template to use')
84
+ expect { NexposeRunner::Scan.start(@expected_connection, @expected_username, @expected_password, @expected_port, @expected_site_name, @expected_ips, nil) }.to raise_error(StandardError, 'OOPS! Looks like you forgot to give me a Scan Template to use')
86
85
  end
87
86
 
88
87
  it 'should use 3780 as default if port is empty string' do
@@ -90,7 +89,7 @@ describe 'nexpose-runner' do
90
89
  .with(@expected_connection, @expected_username, @expected_password, '3780')
91
90
  .and_return(@mock_nexpose_client)
92
91
 
93
- NexposeRunner::Scan.start(@expected_connection, @expected_username, @expected_password, '', @expected_site_name, @expected_ip, @expected_scan_template)
92
+ NexposeRunner::Scan.start(@expected_connection, @expected_username, @expected_password, '', @expected_site_name, @expected_ips, @expected_scan_template)
94
93
  end
95
94
 
96
95
  it 'should create a new Nexpose site with the supplied site name and scan template' do
@@ -98,21 +97,21 @@ describe 'nexpose-runner' do
98
97
  .with(@expected_site_name, @expected_scan_template)
99
98
  .and_return(@mock_nexpose_site)
100
99
 
101
- NexposeRunner::Scan.start(@expected_connection, @expected_username, @expected_password, @expected_port, @expected_site_name, @expected_ip, @expected_scan_template)
100
+ NexposeRunner::Scan.start(@expected_connection, @expected_username, @expected_password, @expected_port, @expected_site_name, @expected_ips, @expected_scan_template)
102
101
  end
103
102
 
104
103
  it 'should add the supplied ip address to the newly created site' do
105
- expect(@mock_nexpose_site).to receive(:add_ip)
106
- .with(@expected_ip)
107
-
108
- NexposeRunner::Scan.start(@expected_connection, @expected_username, @expected_password, @expected_port, @expected_site_name, @expected_ip, @expected_scan_template)
104
+ @expected_ips.split(',').each { |ip|
105
+ expect(@mock_nexpose_site).to receive(:add_ip).with(ip)
106
+ }
107
+ NexposeRunner::Scan.start(@expected_connection, @expected_username, @expected_password, @expected_port, @expected_site_name, @expected_ips, @expected_scan_template)
109
108
  end
110
109
 
111
110
  it 'should save the new site configuration' do
112
111
  expect(@mock_nexpose_site).to receive(:save)
113
112
  .with(@mock_nexpose_client)
114
113
 
115
- NexposeRunner::Scan.start(@expected_connection, @expected_username, @expected_password, @expected_port, @expected_site_name, @expected_ip, @expected_scan_template)
114
+ NexposeRunner::Scan.start(@expected_connection, @expected_username, @expected_password, @expected_port, @expected_site_name, @expected_ips, @expected_scan_template)
116
115
  end
117
116
 
118
117
  it 'should initiate a scan' do
@@ -120,14 +119,14 @@ describe 'nexpose-runner' do
120
119
  .with(@mock_nexpose_client)
121
120
  .and_return(@mock_scan)
122
121
 
123
- NexposeRunner::Scan.start(@expected_connection, @expected_username, @expected_password, @expected_port, @expected_site_name, @expected_ip, @expected_scan_template)
122
+ NexposeRunner::Scan.start(@expected_connection, @expected_username, @expected_password, @expected_port, @expected_site_name, @expected_ips, @expected_scan_template)
124
123
  end
125
124
 
126
125
  describe 'wait for the Nexpose Scan to complete' do
127
126
  it 'should call to check the status of the scan' do
128
127
  expect(@mock_nexpose_client).to receive(:scan_status).with(@mock_scan_id)
129
128
 
130
- NexposeRunner::Scan.start(@expected_connection, @expected_username, @expected_password, @expected_port, @expected_site_name, @expected_ip, @expected_scan_template)
129
+ NexposeRunner::Scan.start(@expected_connection, @expected_username, @expected_password, @expected_port, @expected_site_name, @expected_ips, @expected_scan_template)
131
130
  end
132
131
 
133
132
  it 'should call to check the status until it is not running' do
@@ -143,7 +142,7 @@ describe 'nexpose-runner' do
143
142
  .once
144
143
  .ordered
145
144
 
146
- NexposeRunner::Scan.start(@expected_connection, @expected_username, @expected_password, @expected_port, @expected_site_name, @expected_ip, @expected_scan_template)
145
+ NexposeRunner::Scan.start(@expected_connection, @expected_username, @expected_password, @expected_port, @expected_site_name, @expected_ips, @expected_scan_template)
147
146
  end
148
147
 
149
148
  it 'should sleep for 3 seconds if the status is still running' do
@@ -161,7 +160,7 @@ describe 'nexpose-runner' do
161
160
 
162
161
  expect(NexposeRunner::Scan).to receive(:sleep).with(3).exactly(4).times
163
162
 
164
- NexposeRunner::Scan.start(@expected_connection, @expected_username, @expected_password, @expected_port, @expected_site_name, @expected_ip, @expected_scan_template)
163
+ NexposeRunner::Scan.start(@expected_connection, @expected_username, @expected_password, @expected_port, @expected_site_name, @expected_ips, @expected_scan_template)
165
164
  end
166
165
  end
167
166
 
@@ -175,14 +174,14 @@ describe 'nexpose-runner' do
175
174
  expect_report_to_be_called_with(CONSTANTS::SOFTWARE_REPORT_NAME, CONSTANTS::SOFTWARE_REPORT_QUERY, @mock_software_report)
176
175
  expect_report_to_be_called_with(CONSTANTS::POLICY_REPORT_NAME, CONSTANTS::POLICY_REPORT_QUERY, @mock_policy_report)
177
176
 
178
- expect { NexposeRunner::Scan.start(@expected_connection, @expected_username, @expected_password, @expected_port, @expected_site_name, @expected_ip, @expected_scan_template) }.to raise_error(StandardError, CONSTANTS::VULNERABILITY_FOUND_MESSAGE)
177
+ expect { NexposeRunner::Scan.start(@expected_connection, @expected_username, @expected_password, @expected_port, @expected_site_name, @expected_ips, @expected_scan_template) }.to raise_error(StandardError, CONSTANTS::VULNERABILITY_FOUND_MESSAGE)
179
178
  end
180
179
  end
181
180
 
182
181
  it 'should throw exception if vulnerability exists' do
183
182
  expect_report_to_be_called_with(CONSTANTS::VULNERABILITY_REPORT_NAME, CONSTANTS::VULNERABILITY_REPORT_QUERY, @mock_vuln_report)
184
183
 
185
- expect { NexposeRunner::Scan.start(@expected_connection, @expected_username, @expected_password, @expected_port, @expected_site_name, @expected_ip, @expected_scan_template) }.to raise_error(StandardError, CONSTANTS::VULNERABILITY_FOUND_MESSAGE)
184
+ expect { NexposeRunner::Scan.start(@expected_connection, @expected_username, @expected_password, @expected_port, @expected_site_name, @expected_ips, @expected_scan_template) }.to raise_error(StandardError, CONSTANTS::VULNERABILITY_FOUND_MESSAGE)
186
185
  end
187
186
  end
188
187
  end
@@ -230,9 +229,9 @@ def get_mock_nexpose_site
230
229
  allow(mock_nexpose_site).to receive(:id)
231
230
  .and_return(@mock_site_id)
232
231
 
233
-
234
- allow(mock_nexpose_site).to receive(:add_ip)
235
- .with(@expected_ip)
232
+ @expected_ips.split(',').each { |ip|
233
+ allow(mock_nexpose_site).to receive(:add_ip).with(ip)
234
+ }
236
235
 
237
236
  allow(mock_nexpose_site).to receive(:save)
238
237
  .with(@mock_nexpose_client)
@@ -276,4 +275,4 @@ def get_mock_scan
276
275
  mock_scan = double(Nexpose::Scan)
277
276
  allow(mock_scan).to receive(:id).and_return(@mock_scan_id)
278
277
  mock_scan
279
- end
278
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: NexposeRunner
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nathan Gibson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-29 00:00:00.000000000 Z
11
+ date: 2015-01-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nexpose
@@ -28,28 +28,28 @@ dependencies:
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '1.6'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ~>
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '1.6'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ! '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ! '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
@@ -74,9 +74,9 @@ executables:
74
74
  extensions: []
75
75
  extra_rdoc_files: []
76
76
  files:
77
- - .gitignore
78
- - .rspec
79
- - .travis.yml
77
+ - ".gitignore"
78
+ - ".rspec"
79
+ - ".travis.yml"
80
80
  - Gemfile
81
81
  - LICENSE.txt
82
82
  - NexposeRunner.gemspec
@@ -100,12 +100,12 @@ require_paths:
100
100
  - lib
101
101
  required_ruby_version: !ruby/object:Gem::Requirement
102
102
  requirements:
103
- - - ! '>='
103
+ - - ">="
104
104
  - !ruby/object:Gem::Version
105
105
  version: '0'
106
106
  required_rubygems_version: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - ! '>='
108
+ - - ">="
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
111
  requirements: []