nexpose 7.0.0 → 7.0.1
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 +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
|