nexpose 7.0.0 → 7.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +2 -3
- data/Gemfile.lock +1 -1
- data/lib/nexpose/ajax.rb +12 -16
- data/lib/nexpose/alert.rb +20 -21
- data/lib/nexpose/api.rb +3 -3
- data/lib/nexpose/asset.rb +23 -23
- data/lib/nexpose/blackout.rb +6 -14
- data/lib/nexpose/common.rb +87 -92
- data/lib/nexpose/connection.rb +8 -10
- data/lib/nexpose/console.rb +9 -9
- data/lib/nexpose/dag.rb +2 -2
- data/lib/nexpose/data_table.rb +8 -12
- data/lib/nexpose/device.rb +35 -34
- data/lib/nexpose/discovery.rb +69 -69
- data/lib/nexpose/discovery/filter.rb +7 -8
- data/lib/nexpose/engine.rb +22 -21
- data/lib/nexpose/error.rb +7 -5
- data/lib/nexpose/external.rb +21 -16
- data/lib/nexpose/filter.rb +51 -52
- data/lib/nexpose/global_blackout.rb +6 -7
- data/lib/nexpose/global_settings.rb +2 -3
- data/lib/nexpose/group.rb +25 -19
- data/lib/nexpose/json_serializer.rb +4 -14
- data/lib/nexpose/maint.rb +8 -9
- data/lib/nexpose/manage.rb +2 -2
- data/lib/nexpose/multi_tenant_user.rb +42 -42
- data/lib/nexpose/password_policy.rb +14 -14
- data/lib/nexpose/pool.rb +6 -5
- data/lib/nexpose/report.rb +30 -34
- data/lib/nexpose/report_template.rb +17 -18
- data/lib/nexpose/role.rb +64 -55
- data/lib/nexpose/scan.rb +77 -60
- data/lib/nexpose/scan_template.rb +17 -17
- data/lib/nexpose/scheduled_backup.rb +8 -8
- data/lib/nexpose/scheduled_maintenance.rb +9 -9
- data/lib/nexpose/shared_credential.rb +30 -33
- data/lib/nexpose/shared_secret.rb +5 -5
- data/lib/nexpose/silo.rb +68 -66
- data/lib/nexpose/silo_profile.rb +47 -50
- data/lib/nexpose/site.rb +101 -123
- data/lib/nexpose/site_credentials.rb +15 -17
- data/lib/nexpose/tag.rb +73 -80
- data/lib/nexpose/ticket.rb +45 -42
- data/lib/nexpose/user.rb +45 -45
- data/lib/nexpose/util.rb +1 -1
- data/lib/nexpose/version.rb +1 -1
- data/lib/nexpose/vuln.rb +45 -43
- data/lib/nexpose/vuln_def.rb +7 -7
- data/lib/nexpose/vuln_exception.rb +35 -36
- data/lib/nexpose/wait.rb +32 -28
- data/lib/nexpose/web_credentials.rb +34 -36
- metadata +2 -2
@@ -5,14 +5,14 @@ module Nexpose
|
|
5
5
|
attr_reader :ttl
|
6
6
|
|
7
7
|
def initialize(console, time_to_live)
|
8
|
-
uri
|
8
|
+
uri = "/data/admin/global/shared-secret?time-to-live=#{time_to_live}"
|
9
9
|
json = JSON.parse(AJAX.put(console, uri))
|
10
10
|
self.from_json(json)
|
11
11
|
end
|
12
12
|
|
13
13
|
def from_json(json)
|
14
14
|
@key_string = json['keyString']
|
15
|
-
@ttl
|
15
|
+
@ttl = json['timeToLiveInSeconds']
|
16
16
|
end
|
17
17
|
|
18
18
|
def delete(console)
|
@@ -22,10 +22,10 @@ module Nexpose
|
|
22
22
|
|
23
23
|
def ==(other)
|
24
24
|
return false unless self.class == other.class
|
25
|
-
return false unless key_string.
|
26
|
-
|
25
|
+
return false unless key_string.downcase == other.key_string.downcase
|
27
26
|
true
|
28
27
|
end
|
29
|
-
|
28
|
+
alias eql? ==
|
30
29
|
end
|
30
|
+
|
31
31
|
end
|
data/lib/nexpose/silo.rb
CHANGED
@@ -18,14 +18,14 @@ module Nexpose
|
|
18
18
|
arr
|
19
19
|
end
|
20
20
|
|
21
|
-
|
21
|
+
alias silos list_silos
|
22
22
|
|
23
23
|
# Delete the specified silo
|
24
24
|
#
|
25
25
|
# @return Whether or not the delete request succeeded.
|
26
26
|
#
|
27
27
|
def delete_silo(silo_id)
|
28
|
-
r = execute(make_xml('SiloDeleteRequest', {'silo-id' => silo_id}), '1.2')
|
28
|
+
r = execute(make_xml('SiloDeleteRequest', { 'silo-id' => silo_id }), '1.2')
|
29
29
|
r.success
|
30
30
|
end
|
31
31
|
end
|
@@ -39,13 +39,13 @@ module Nexpose
|
|
39
39
|
attr_accessor :max_users
|
40
40
|
attr_accessor :max_hosted_assets
|
41
41
|
|
42
|
-
#Optional fields
|
42
|
+
# Optional fields
|
43
43
|
attr_accessor :description
|
44
44
|
attr_accessor :merchant
|
45
45
|
attr_accessor :organization
|
46
46
|
|
47
47
|
def initialize(&block)
|
48
|
-
instance_eval
|
48
|
+
instance_eval(&block) if block_given?
|
49
49
|
end
|
50
50
|
|
51
51
|
# Copy an existing configuration from a Nexpose instance.
|
@@ -56,8 +56,8 @@ module Nexpose
|
|
56
56
|
# @return [Silo] Silo configuration loaded from a Nexpose console.
|
57
57
|
#
|
58
58
|
def self.copy(connection, id)
|
59
|
-
silo
|
60
|
-
silo.id
|
59
|
+
silo = load(connection, id)
|
60
|
+
silo.id = nil
|
61
61
|
silo.name = nil
|
62
62
|
silo
|
63
63
|
end
|
@@ -69,7 +69,7 @@ module Nexpose
|
|
69
69
|
# @return [Silo] Silo configuration loaded from a Nexpose console.
|
70
70
|
#
|
71
71
|
def self.load(connection, id)
|
72
|
-
r = connection.execute(connection.make_xml('SiloConfigRequest', {'silo-id' => id}), '1.2')
|
72
|
+
r = connection.execute(connection.make_xml('SiloConfigRequest', { 'silo-id' => id }), '1.2')
|
73
73
|
|
74
74
|
if r.success
|
75
75
|
r.res.elements.each('SiloConfigResponse/SiloConfig') do |config|
|
@@ -80,12 +80,10 @@ module Nexpose
|
|
80
80
|
end
|
81
81
|
|
82
82
|
def save(connection)
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
create(connection)
|
88
|
-
end
|
83
|
+
update(connection)
|
84
|
+
rescue APIError => error
|
85
|
+
raise error unless error.message =~ /A silo .* does not exist./
|
86
|
+
create(connection)
|
89
87
|
end
|
90
88
|
|
91
89
|
# Updates this silo on a Nexpose console.
|
@@ -118,7 +116,8 @@ module Nexpose
|
|
118
116
|
|
119
117
|
def as_xml
|
120
118
|
xml = REXML::Element.new('SiloConfig')
|
121
|
-
xml.add_attributes({'description' => @description, 'name' => @name, 'id' => @id, 'silo-profile-id' => @profile_id,
|
119
|
+
xml.add_attributes({ 'description' => @description, 'name' => @name, 'id' => @id, 'silo-profile-id' => @profile_id,
|
120
|
+
'max-assets' => @max_assets, 'max-users' => @max_users, 'max-hosted-assets' => @max_hosted_assets })
|
122
121
|
xml.add(@merchant.as_xml) if @merchant
|
123
122
|
xml.add(@organization.as_xml) if @organization
|
124
123
|
xml
|
@@ -130,13 +129,13 @@ module Nexpose
|
|
130
129
|
|
131
130
|
def self.parse(xml)
|
132
131
|
new do |silo|
|
133
|
-
silo.id
|
134
|
-
silo.profile_id
|
135
|
-
silo.name
|
136
|
-
silo.max_assets
|
137
|
-
silo.max_users
|
132
|
+
silo.id = xml.attributes['id']
|
133
|
+
silo.profile_id = xml.attributes['silo-profile-id']
|
134
|
+
silo.name = xml.attributes['name']
|
135
|
+
silo.max_assets = xml.attributes['max-assets'].to_i
|
136
|
+
silo.max_users = xml.attributes['max-users'].to_i
|
138
137
|
silo.max_hosted_assets = xml.attributes['max-hosted-assets'].to_i
|
139
|
-
silo.description
|
138
|
+
silo.description = xml.attributes['description']
|
140
139
|
|
141
140
|
xml.elements.each('Merchant') do |merchant|
|
142
141
|
silo.merchant = Merchant.parse(merchant)
|
@@ -156,25 +155,24 @@ module Nexpose
|
|
156
155
|
attr_accessor :zip
|
157
156
|
attr_accessor :country
|
158
157
|
|
159
|
-
|
160
158
|
def initialize(&block)
|
161
|
-
instance_eval
|
159
|
+
instance_eval(&block) if block_given?
|
162
160
|
end
|
163
161
|
|
164
162
|
def self.parse(xml)
|
165
163
|
new do |address|
|
166
|
-
address.line1
|
167
|
-
address.line2
|
168
|
-
address.city
|
169
|
-
address.state
|
170
|
-
address.zip
|
164
|
+
address.line1 = xml.attributes['line1']
|
165
|
+
address.line2 = xml.attributes['line2']
|
166
|
+
address.city = xml.attributes['city']
|
167
|
+
address.state = xml.attributes['state']
|
168
|
+
address.zip = xml.attributes['zip']
|
171
169
|
address.country = xml.attributes['country']
|
172
170
|
end
|
173
171
|
end
|
174
172
|
|
175
173
|
def as_xml
|
176
174
|
xml = REXML::Element.new('Address')
|
177
|
-
xml.add_attributes({'city' => @city, 'country' => @country, 'line1' => @line1, 'line2' => @line2, 'state' => @state, 'zip' => @zip})
|
175
|
+
xml.add_attributes({ 'city' => @city, 'country' => @country, 'line1' => @line1, 'line2' => @line2, 'state' => @state, 'zip' => @zip })
|
178
176
|
xml
|
179
177
|
end
|
180
178
|
end
|
@@ -190,28 +188,29 @@ module Nexpose
|
|
190
188
|
attr_accessor :url
|
191
189
|
|
192
190
|
def initialize(&block)
|
193
|
-
instance_eval
|
191
|
+
instance_eval(&block) if block_given?
|
194
192
|
end
|
195
193
|
|
196
194
|
def as_xml
|
197
195
|
xml = REXML::Element.new('Organization')
|
198
|
-
xml.add_attributes({'company' => @company, 'email-address' => @email, 'first-name' => @first_name,
|
196
|
+
xml.add_attributes({ 'company' => @company, 'email-address' => @email, 'first-name' => @first_name,
|
197
|
+
'last-name' => @last_name, 'phone-number' => @phone, 'title' => @title, 'url' => @url })
|
199
198
|
xml.add(@address.as_xml)
|
200
199
|
xml
|
201
200
|
end
|
202
201
|
|
203
202
|
def self.parse(xml)
|
204
203
|
new do |organization|
|
205
|
-
organization.company
|
204
|
+
organization.company = xml.attributes['company']
|
206
205
|
organization.first_name = xml.attributes['first-name']
|
207
|
-
organization.last_name
|
208
|
-
organization.phone
|
206
|
+
organization.last_name = xml.attributes['last-name']
|
207
|
+
organization.phone = xml.attributes['phone-number']
|
209
208
|
xml.elements.each('Address') do |address|
|
210
209
|
organization.address = Address.parse(address)
|
211
210
|
end
|
212
211
|
organization.email = xml.attributes['email']
|
213
212
|
organization.title = xml.attributes['title']
|
214
|
-
organization.url
|
213
|
+
organization.url = xml.attributes['url']
|
215
214
|
end
|
216
215
|
end
|
217
216
|
end
|
@@ -233,32 +232,32 @@ module Nexpose
|
|
233
232
|
attr_accessor :qsa
|
234
233
|
|
235
234
|
def initialize(&block)
|
236
|
-
instance_eval
|
237
|
-
@dbas
|
235
|
+
instance_eval(&block) if block_given?
|
236
|
+
@dbas = Array(@dbas)
|
238
237
|
@industries = Array(@industries)
|
239
|
-
@qsa
|
238
|
+
@qsa = Array(@qsa)
|
240
239
|
end
|
241
240
|
|
242
241
|
def self.parse(xml)
|
243
242
|
new do |merchant|
|
244
243
|
merchant.acquirer_relationship = xml.attributes['acquirer-relationship'].to_s.chomp.eql?('true')
|
245
|
-
merchant.agent_relationship
|
246
|
-
merchant.ecommerce
|
247
|
-
merchant.grocery
|
248
|
-
merchant.mail_order
|
249
|
-
merchant.payment_application
|
250
|
-
merchant.payment_version
|
251
|
-
merchant.petroleum
|
252
|
-
merchant.retail
|
253
|
-
merchant.telecommunication
|
254
|
-
merchant.travel
|
255
|
-
merchant.company
|
256
|
-
merchant.first_name
|
257
|
-
merchant.last_name
|
258
|
-
merchant.phone
|
259
|
-
merchant.email
|
260
|
-
merchant.title
|
261
|
-
merchant.url
|
244
|
+
merchant.agent_relationship = xml.attributes['agent-relationship'].to_s.chomp.eql?('true')
|
245
|
+
merchant.ecommerce = xml.attributes['ecommerce'].to_s.chomp.eql?('true')
|
246
|
+
merchant.grocery = xml.attributes['grocery'].to_s.chomp.eql?('true')
|
247
|
+
merchant.mail_order = xml.attributes['mail-order'].to_s.chomp.eql?('true')
|
248
|
+
merchant.payment_application = xml.attributes['payment-application']
|
249
|
+
merchant.payment_version = xml.attributes['payment-version']
|
250
|
+
merchant.petroleum = xml.attributes['petroleum'].to_s.chomp.eql?('true')
|
251
|
+
merchant.retail = xml.attributes['retail'].to_s.chomp.eql?('true')
|
252
|
+
merchant.telecommunication = xml.attributes['telecommunication'].to_s.chomp.eql?('true')
|
253
|
+
merchant.travel = xml.attributes['travel'].to_s.chomp.eql?('true')
|
254
|
+
merchant.company = xml.attributes['company']
|
255
|
+
merchant.first_name = xml.attributes['first-name']
|
256
|
+
merchant.last_name = xml.attributes['last-name']
|
257
|
+
merchant.phone = xml.attributes['phone-number']
|
258
|
+
merchant.email = xml.attributes['email']
|
259
|
+
merchant.title = xml.attributes['title']
|
260
|
+
merchant.url = xml.attributes['url']
|
262
261
|
|
263
262
|
xml.elements.each('Address') do |address|
|
264
263
|
merchant.address = Address.parse(address)
|
@@ -284,20 +283,22 @@ module Nexpose
|
|
284
283
|
def as_xml
|
285
284
|
xml = super
|
286
285
|
xml.name = 'Merchant'
|
287
|
-
xml.add_attributes({'acquirer-relationship' => @acquirer_relationship, 'agent-relationship' => @agent_relationship,
|
288
|
-
|
286
|
+
xml.add_attributes({ 'acquirer-relationship' => @acquirer_relationship, 'agent-relationship' => @agent_relationship,
|
287
|
+
'ecommerce' => @ecommerce, 'grocery' => @grocery, 'mail-order' => @mail_order })
|
288
|
+
xml.add_attributes({ 'payment-application' => @payment_application, 'payment-version' => @payment_version,
|
289
|
+
'petroleum' => @petroleum, 'retail' => @retail, 'telecommunication' => @telecommunication, 'travel' => @travel })
|
289
290
|
|
290
291
|
unless dbas.empty?
|
291
292
|
dbas = REXML::Element.new('DBAs')
|
292
293
|
@dbas.each do |dba|
|
293
|
-
dbas.add_element('DBA', {'name' => dba})
|
294
|
+
dbas.add_element('DBA', { 'name' => dba })
|
294
295
|
end
|
295
296
|
end
|
296
297
|
|
297
298
|
unless @industries.empty?
|
298
299
|
industries = REXML::Element.new('OtherIndustries')
|
299
300
|
@industries.each do |industry|
|
300
|
-
industries.add_element('Industry', {'name' => industry})
|
301
|
+
industries.add_element('Industry', { 'name' => industry })
|
301
302
|
end
|
302
303
|
end
|
303
304
|
|
@@ -331,23 +332,24 @@ module Nexpose
|
|
331
332
|
attr_reader :max_users
|
332
333
|
|
333
334
|
def initialize(&block)
|
334
|
-
instance_eval
|
335
|
+
instance_eval(&block) if block_given?
|
335
336
|
end
|
336
337
|
|
337
338
|
def self.parse(xml)
|
338
339
|
new do
|
339
|
-
@id
|
340
|
-
@name
|
340
|
+
@id = xml.attributes['id']
|
341
|
+
@name = xml.attributes['name']
|
341
342
|
@description = xml.attributes['description']
|
342
|
-
@profile_id
|
343
|
+
@profile_id = xml.attributes['silo-profile-id']
|
343
344
|
xml.elements.each('LicenseSummary') do |license|
|
344
|
-
@assets
|
345
|
-
@max_assets
|
345
|
+
@assets = license.attributes['assets']
|
346
|
+
@max_assets = license.attributes['max-assets']
|
346
347
|
@max_hosted_assets = license.attributes['max-hosted-assets']
|
347
|
-
@users
|
348
|
-
@max_users
|
348
|
+
@users = license.attributes['users']
|
349
|
+
@max_users = license.attributes['max-users']
|
349
350
|
end
|
350
351
|
end
|
351
352
|
end
|
352
353
|
end
|
354
|
+
|
353
355
|
end
|
data/lib/nexpose/silo_profile.rb
CHANGED
@@ -18,14 +18,14 @@ module Nexpose
|
|
18
18
|
arr
|
19
19
|
end
|
20
20
|
|
21
|
-
|
21
|
+
alias silo_profiles list_silo_profiles
|
22
22
|
|
23
23
|
# Delete the specified silo profile
|
24
24
|
#
|
25
25
|
# @return Whether or not the delete request succeeded.
|
26
26
|
#
|
27
27
|
def delete_silo_profile(silo_profile_id)
|
28
|
-
r = execute(make_xml('SiloProfileDeleteRequest', {'silo-profile-id' => silo_profile_id}), '1.2')
|
28
|
+
r = execute(make_xml('SiloProfileDeleteRequest', { 'silo-profile-id' => silo_profile_id }), '1.2')
|
29
29
|
r.success
|
30
30
|
end
|
31
31
|
end
|
@@ -46,24 +46,24 @@ module Nexpose
|
|
46
46
|
attr_accessor :restricted_report_sections
|
47
47
|
|
48
48
|
def initialize(&block)
|
49
|
-
instance_eval
|
50
|
-
@global_report_templates
|
51
|
-
@global_scan_engines
|
52
|
-
@global_scan_templates
|
53
|
-
@licensed_modules
|
54
|
-
@restricted_report_formats
|
49
|
+
instance_eval(&block) if block_given?
|
50
|
+
@global_report_templates = Array(@global_report_templates)
|
51
|
+
@global_scan_engines = Array(@global_scan_engines)
|
52
|
+
@global_scan_templates = Array(@global_scan_templates)
|
53
|
+
@licensed_modules = Array(@licensed_modules)
|
54
|
+
@restricted_report_formats = Array(@restricted_report_formats)
|
55
55
|
@restricted_report_sections = Array(@restricted_report_sections)
|
56
56
|
end
|
57
57
|
|
58
58
|
def self.copy(connection, id)
|
59
|
-
profile
|
60
|
-
profile.id
|
59
|
+
profile = load(connection, id)
|
60
|
+
profile.id = nil
|
61
61
|
profile.name = nil
|
62
62
|
profile
|
63
63
|
end
|
64
64
|
|
65
65
|
def self.load(connection, id)
|
66
|
-
r = connection.execute(connection.make_xml('SiloProfileConfigRequest', {'silo-profile-id' => id}), '1.2')
|
66
|
+
r = connection.execute(connection.make_xml('SiloProfileConfigRequest', { 'silo-profile-id' => id }), '1.2')
|
67
67
|
|
68
68
|
if r.success
|
69
69
|
r.res.elements.each('SiloProfileConfigResponse/SiloProfileConfig') do |config|
|
@@ -75,13 +75,13 @@ module Nexpose
|
|
75
75
|
|
76
76
|
def self.parse(xml)
|
77
77
|
new do |profile|
|
78
|
-
profile.id
|
79
|
-
profile.name
|
80
|
-
profile.description
|
81
|
-
profile.all_licensed_modules
|
82
|
-
profile.all_global_engines
|
78
|
+
profile.id = xml.attributes['id']
|
79
|
+
profile.name = xml.attributes['name']
|
80
|
+
profile.description = xml.attributes['description']
|
81
|
+
profile.all_licensed_modules = xml.attributes['all-licensed-modules'].to_s.chomp.eql?('true')
|
82
|
+
profile.all_global_engines = xml.attributes['all-global-engines'].to_s.chomp.eql?('true')
|
83
83
|
profile.all_global_report_templates = xml.attributes['all-global-report-templates'].to_s.chomp.eql?('true')
|
84
|
-
profile.all_global_scan_templates
|
84
|
+
profile.all_global_scan_templates = xml.attributes['all-global-scan-templates'].to_s.chomp.eql?('true')
|
85
85
|
|
86
86
|
profile.global_report_templates = []
|
87
87
|
xml.elements.each('GlobalReportTemplates/GlobalReportTemplate') { |template| profile.global_report_templates << template.attributes['name'] }
|
@@ -104,12 +104,10 @@ module Nexpose
|
|
104
104
|
end
|
105
105
|
|
106
106
|
def save(connection)
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
create(connection)
|
112
|
-
end
|
107
|
+
update(connection)
|
108
|
+
rescue APIError => error
|
109
|
+
raise error unless error.message =~ /silo profile(\S*|.*?)does not exist/i
|
110
|
+
create(connection)
|
113
111
|
end
|
114
112
|
|
115
113
|
# Updates an existing silo profile on a Nexpose console.
|
@@ -142,53 +140,53 @@ module Nexpose
|
|
142
140
|
|
143
141
|
def as_xml
|
144
142
|
xml = REXML::Element.new('SiloProfileConfig')
|
145
|
-
xml.add_attributes({'id' => @id,
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
143
|
+
xml.add_attributes({ 'id' => @id,
|
144
|
+
'name' => @name,
|
145
|
+
'description' => @description,
|
146
|
+
'all-licensed-modules' => @all_licensed_modules,
|
147
|
+
'all-global-engines' => @all_global_engines,
|
148
|
+
'all-global-report-templates' => @all_global_report_templates,
|
149
|
+
'all-global-scan-templates' => @all_global_scan_templates })
|
152
150
|
|
153
151
|
unless @global_report_templates.empty?
|
154
152
|
templates = xml.add_element('GlobalReportTemplates')
|
155
153
|
@global_report_templates.each do |template|
|
156
|
-
templates.add_element('GlobalReportTemplate', {'name' => template})
|
154
|
+
templates.add_element('GlobalReportTemplate', { 'name' => template })
|
157
155
|
end
|
158
156
|
end
|
159
157
|
|
160
158
|
unless @global_scan_engines.empty?
|
161
159
|
engines = xml.add_element('GlobalScanEngines')
|
162
160
|
@global_scan_engines.each do |engine|
|
163
|
-
engines.add_element('GlobalScanEngine', {'name' => engine})
|
161
|
+
engines.add_element('GlobalScanEngine', { 'name' => engine })
|
164
162
|
end
|
165
163
|
end
|
166
164
|
|
167
165
|
unless @global_scan_templates.empty?
|
168
166
|
templates = xml.add_element('GlobalScanTemplates')
|
169
167
|
@global_scan_templates.each do |template|
|
170
|
-
templates.add_element('GlobalScanTemplate', {'name' => template})
|
168
|
+
templates.add_element('GlobalScanTemplate', { 'name' => template })
|
171
169
|
end
|
172
170
|
end
|
173
171
|
|
174
172
|
unless @licensed_modules.empty?
|
175
173
|
licensed_modules = xml.add_element('LicensedModules')
|
176
174
|
@licensed_modules.each do |licensed_module|
|
177
|
-
licensed_modules.add_element('LicensedModule', {'name' => licensed_module})
|
175
|
+
licensed_modules.add_element('LicensedModule', { 'name' => licensed_module })
|
178
176
|
end
|
179
177
|
end
|
180
178
|
|
181
179
|
unless @restricted_report_formats.empty?
|
182
180
|
formats = xml.add_element('RestrictedReportFormats')
|
183
181
|
@restricted_report_formats.each do |format|
|
184
|
-
formats.add_element('RestrictedReportFormat', {'name' => format})
|
182
|
+
formats.add_element('RestrictedReportFormat', { 'name' => format })
|
185
183
|
end
|
186
184
|
end
|
187
185
|
|
188
186
|
unless @restricted_report_sections.empty?
|
189
187
|
sections = xml.add_element('RestrictedReportSections')
|
190
188
|
@restricted_report_sections.each do |section|
|
191
|
-
sections.add_element('RestrictedReportSection', {'name' => section})
|
189
|
+
sections.add_element('RestrictedReportSection', { 'name' => section })
|
192
190
|
end
|
193
191
|
end
|
194
192
|
|
@@ -214,26 +212,25 @@ module Nexpose
|
|
214
212
|
attr_reader :all_global_report_templates
|
215
213
|
attr_reader :all_global_scan_templates
|
216
214
|
|
217
|
-
|
218
215
|
def initialize(&block)
|
219
|
-
instance_eval
|
216
|
+
instance_eval(&block) if block_given?
|
220
217
|
end
|
221
218
|
|
222
219
|
def self.parse(xml)
|
223
220
|
new do
|
224
|
-
@id
|
225
|
-
@name
|
226
|
-
@description
|
227
|
-
@global_report_template_count
|
228
|
-
@global_scan_engine_count
|
229
|
-
@global_scan_template_count
|
230
|
-
@licensed_module_count
|
221
|
+
@id = xml.attributes['id']
|
222
|
+
@name = xml.attributes['name']
|
223
|
+
@description = xml.attributes['description']
|
224
|
+
@global_report_template_count = xml.attributes['global-report-template-count']
|
225
|
+
@global_scan_engine_count = xml.attributes['global-scan-engine-count']
|
226
|
+
@global_scan_template_count = xml.attributes['global-scan-template-count']
|
227
|
+
@licensed_module_count = xml.attributes['licensed-module-count']
|
231
228
|
@restricted_report_section_count = xml.attributes['restricted-report-section-count']
|
232
|
-
@all_licensed_modules
|
233
|
-
@all_global_engines
|
234
|
-
@all_global_report_templates
|
235
|
-
@all_global_scan_templates
|
229
|
+
@all_licensed_modules = xml.attributes['all-licensed-modules']
|
230
|
+
@all_global_engines = xml.attributes['all-global-engines']
|
231
|
+
@all_global_report_templates = xml.attributes['all-global-report-templates']
|
232
|
+
@all_global_scan_templates = xml.attributes['all-global-scan-templates']
|
236
233
|
end
|
237
234
|
end
|
238
235
|
end
|
239
|
-
end
|
236
|
+
end
|