nexpose 7.0.0 → 7.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +2 -3
  3. data/Gemfile.lock +1 -1
  4. data/lib/nexpose/ajax.rb +12 -16
  5. data/lib/nexpose/alert.rb +20 -21
  6. data/lib/nexpose/api.rb +3 -3
  7. data/lib/nexpose/asset.rb +23 -23
  8. data/lib/nexpose/blackout.rb +6 -14
  9. data/lib/nexpose/common.rb +87 -92
  10. data/lib/nexpose/connection.rb +8 -10
  11. data/lib/nexpose/console.rb +9 -9
  12. data/lib/nexpose/dag.rb +2 -2
  13. data/lib/nexpose/data_table.rb +8 -12
  14. data/lib/nexpose/device.rb +35 -34
  15. data/lib/nexpose/discovery.rb +69 -69
  16. data/lib/nexpose/discovery/filter.rb +7 -8
  17. data/lib/nexpose/engine.rb +22 -21
  18. data/lib/nexpose/error.rb +7 -5
  19. data/lib/nexpose/external.rb +21 -16
  20. data/lib/nexpose/filter.rb +51 -52
  21. data/lib/nexpose/global_blackout.rb +6 -7
  22. data/lib/nexpose/global_settings.rb +2 -3
  23. data/lib/nexpose/group.rb +25 -19
  24. data/lib/nexpose/json_serializer.rb +4 -14
  25. data/lib/nexpose/maint.rb +8 -9
  26. data/lib/nexpose/manage.rb +2 -2
  27. data/lib/nexpose/multi_tenant_user.rb +42 -42
  28. data/lib/nexpose/password_policy.rb +14 -14
  29. data/lib/nexpose/pool.rb +6 -5
  30. data/lib/nexpose/report.rb +30 -34
  31. data/lib/nexpose/report_template.rb +17 -18
  32. data/lib/nexpose/role.rb +64 -55
  33. data/lib/nexpose/scan.rb +77 -60
  34. data/lib/nexpose/scan_template.rb +17 -17
  35. data/lib/nexpose/scheduled_backup.rb +8 -8
  36. data/lib/nexpose/scheduled_maintenance.rb +9 -9
  37. data/lib/nexpose/shared_credential.rb +30 -33
  38. data/lib/nexpose/shared_secret.rb +5 -5
  39. data/lib/nexpose/silo.rb +68 -66
  40. data/lib/nexpose/silo_profile.rb +47 -50
  41. data/lib/nexpose/site.rb +101 -123
  42. data/lib/nexpose/site_credentials.rb +15 -17
  43. data/lib/nexpose/tag.rb +73 -80
  44. data/lib/nexpose/ticket.rb +45 -42
  45. data/lib/nexpose/user.rb +45 -45
  46. data/lib/nexpose/util.rb +1 -1
  47. data/lib/nexpose/version.rb +1 -1
  48. data/lib/nexpose/vuln.rb +45 -43
  49. data/lib/nexpose/vuln_def.rb +7 -7
  50. data/lib/nexpose/vuln_exception.rb +35 -36
  51. data/lib/nexpose/wait.rb +32 -28
  52. data/lib/nexpose/web_credentials.rb +34 -36
  53. metadata +2 -2
@@ -97,17 +97,15 @@ module Nexpose
97
97
 
98
98
  # Establish a new connection and Session ID
99
99
  def login
100
- begin
101
- login_hash = { 'sync-id' => 0, 'password' => @password, 'user-id' => @username, 'token' => @token }
102
- login_hash['silo-id'] = @silo_id if @silo_id
103
- r = execute(make_xml('LoginRequest', login_hash))
104
- if r.success
105
- @session_id = r.sid
106
- true
107
- end
108
- rescue APIError
109
- raise AuthenticationFailed.new(r)
100
+ login_hash = { 'sync-id' => 0, 'password' => @password, 'user-id' => @username, 'token' => @token }
101
+ login_hash['silo-id'] = @silo_id if @silo_id
102
+ r = execute(make_xml('LoginRequest', login_hash))
103
+ if r.success
104
+ @session_id = r.sid
105
+ true
110
106
  end
107
+ rescue APIError
108
+ raise AuthenticationFailed.new(r)
111
109
  end
112
110
 
113
111
  # Logout of the current connection
@@ -1,3 +1,4 @@
1
+ # here uh what
1
2
  module Nexpose
2
3
 
3
4
  # Nexpose console configuration class.
@@ -32,13 +33,12 @@ module Nexpose
32
33
  #
33
34
  def initialize(xml)
34
35
  @xml = xml
35
-
36
- nsc = REXML::XPath.first(@xml, 'NeXposeSecurityConsole')
37
- @scan_threads_limit = nsc.attributes['scanThreadsLimit'].to_i
36
+ nsc = REXML::XPath.first(@xml, 'NeXposeSecurityConsole')
37
+ @scan_threads_limit = nsc.attributes['scanThreadsLimit'].to_i
38
38
  @incremental_scan_results = nsc.attributes['realtimeIntegration'] == '1'
39
39
 
40
- web_server = REXML::XPath.first(nsc, 'WebServer')
41
- @session_timeout = web_server.attributes['sessionTimeout'].to_i
40
+ web_server = REXML::XPath.first(nsc, 'WebServer')
41
+ @session_timeout = web_server.attributes['sessionTimeout'].to_i
42
42
  end
43
43
 
44
44
  # Load existing Nexpose security console configuration.
@@ -56,15 +56,15 @@ module Nexpose
56
56
  # @return [Boolean] true if configuration successfully saved.
57
57
  #
58
58
  def save(connection)
59
- nsc = REXML::XPath.first(@xml, 'NeXposeSecurityConsole')
60
- nsc.attributes['scanThreadsLimit'] = @scan_threads_limit.to_i
59
+ nsc = REXML::XPath.first(@xml, 'NeXposeSecurityConsole')
60
+ nsc.attributes['scanThreadsLimit'] = @scan_threads_limit.to_i
61
61
  nsc.attributes['realtimeIntegration'] = @incremental_scan_results ? '1' : '0'
62
62
 
63
- web_server = REXML::XPath.first(nsc, 'WebServer')
63
+ web_server = REXML::XPath.first(nsc, 'WebServer')
64
64
  web_server.attributes['sessionTimeout'] = @session_timeout.to_i
65
65
 
66
66
  response = REXML::Document.new(Nexpose::AJAX.post(connection, '/data/admin/config/nsc', @xml))
67
- saved = REXML::XPath.first(response, 'SaveConfig')
67
+ saved = REXML::XPath.first(response, 'SaveConfig')
68
68
  saved.attributes['success'] == '1'
69
69
  end
70
70
  end
@@ -32,8 +32,8 @@ module Nexpose
32
32
  admins = nsc.users.select { |u| u.is_admin }.map { |u| u.id }
33
33
  @users.reject! { |id| admins.member? id }
34
34
  params = @id ? { 'entityid' => @id, 'mode' => 'edit' } : { 'entityid' => false, 'mode' => false }
35
- uri = AJAX.parameterize_uri('/data/assetGroup/saveAssetGroup', params)
36
- data = JSON.parse(AJAX.post(nsc, uri, _to_entity_details, AJAX::CONTENT_TYPE::JSON))
35
+ uri = AJAX.parameterize_uri('/data/assetGroup/saveAssetGroup', params)
36
+ data = JSON.parse(AJAX.post(nsc, uri, _to_entity_details, AJAX::CONTENT_TYPE::JSON))
37
37
  data['response'] == 'success.'
38
38
  end
39
39
 
@@ -32,30 +32,26 @@ module Nexpose
32
32
  # 'siteID' => site_id })
33
33
  #
34
34
  def _get_json_table(console, address, parameters = {}, page_size = 500, records = nil, post = true)
35
- parameters['dir'] = 'DESC'
35
+ parameters['dir'] = 'DESC'
36
36
  parameters['startIndex'] = -1
37
- parameters['results'] = -1
38
-
37
+ parameters['results'] = -1
39
38
  if post
40
39
  request = lambda { |p| AJAX.form_post(console, address, p) }
41
40
  else
42
41
  request = lambda { |p| AJAX.get(console, address.dup, AJAX::CONTENT_TYPE::JSON, p) }
43
42
  end
44
43
 
45
- response = request.(parameters)
46
- data = JSON.parse(response)
47
-
44
+ response = request.call(parameters)
45
+ data = JSON.parse(response)
48
46
  # Don't attept to grab more records than there are.
49
47
  total = data['totalRecords']
50
- return [] if total == 0
48
+ return [] if total.zero?
51
49
  total = records.nil? ? total : [records, total].min
52
-
53
- rows = []
50
+ rows = []
54
51
  parameters['results'] = page_size
55
52
  while rows.length < total
56
53
  parameters['startIndex'] = rows.length
57
-
58
- data = JSON.parse(request.(parameters))
54
+ data = JSON.parse(request.call(parameters))
59
55
  rows.concat data['records']
60
56
  end
61
57
  rows
@@ -80,7 +76,7 @@ module Nexpose
80
76
  response = REXML::Document.new(response)
81
77
 
82
78
  headers = _dyn_headers(response)
83
- rows = _dyn_rows(response)
79
+ rows = _dyn_rows(response)
84
80
  rows.map { |row| Hash[headers.zip(row)] }
85
81
  end
86
82
 
@@ -18,16 +18,18 @@ module Nexpose
18
18
  r = execute(make_xml('SiteDeviceListingRequest', { 'site-id' => site_id }))
19
19
  if r.success
20
20
  device = REXML::XPath.first(r.res, "SiteDeviceListingResponse/SiteDevices/device[@address='#{address}']")
21
- return Device.new(device.attributes['id'].to_i,
22
- device.attributes['address'],
23
- device.parent.attributes['site-id'],
24
- device.attributes['riskfactor'].to_f,
25
- device.attributes['riskscore'].to_f) if device
21
+ if device
22
+ return Device.new(device.attributes['id'].to_i,
23
+ device.attributes['address'],
24
+ device.parent.attributes['site-id'],
25
+ device.attributes['riskfactor'].to_f,
26
+ device.attributes['riskscore'].to_f)
27
+ end
26
28
  end
27
29
  nil
28
30
  end
29
31
 
30
- alias_method :find_asset_by_address, :find_device_by_address
32
+ alias find_asset_by_address find_device_by_address
31
33
 
32
34
  # Retrieve a list of all of the assets in a site.
33
35
  #
@@ -57,10 +59,10 @@ module Nexpose
57
59
  devices
58
60
  end
59
61
 
60
- alias_method :devices, :list_site_devices
61
- alias_method :list_devices, :list_site_devices
62
- alias_method :assets, :list_site_devices
63
- alias_method :list_assets, :list_site_devices
62
+ alias devices list_site_devices
63
+ alias list_devices list_site_devices
64
+ alias assets list_site_devices
65
+ alias list_assets list_site_devices
64
66
 
65
67
  # Get a list of all assets currently associated with a group.
66
68
  #
@@ -89,9 +91,9 @@ module Nexpose
89
91
  json.map { |vuln| VulnFinding.new(vuln) }
90
92
  end
91
93
 
92
- alias_method :list_asset_vulns, :list_device_vulns
93
- alias_method :asset_vulns, :list_device_vulns
94
- alias_method :device_vulns, :list_device_vulns
94
+ alias list_asset_vulns list_device_vulns
95
+ alias asset_vulns list_device_vulns
96
+ alias device_vulns list_device_vulns
95
97
 
96
98
  # Retrieve a list of assets which completed in a given scan. If called
97
99
  # during a scan, this method returns currently completed assets. A
@@ -129,7 +131,7 @@ module Nexpose
129
131
  r.success
130
132
  end
131
133
 
132
- alias_method :delete_asset, :delete_device
134
+ alias delete_asset delete_device
133
135
 
134
136
  # Retrieve the scan history for an asset.
135
137
  # Note: This is not optimized for querying many assets.
@@ -174,11 +176,11 @@ module Nexpose
174
176
  attr_reader :site_id
175
177
 
176
178
  def initialize(id, address, site_id, risk_factor = 1.0, risk_score = 0.0)
177
- @id = id.to_i
178
- @address = address
179
- @site_id = site_id.to_i
179
+ @id = id.to_i
180
+ @address = address
181
+ @site_id = site_id.to_i
180
182
  @risk_factor = risk_factor.to_f
181
- @risk_score = risk_score.to_f
183
+ @risk_score = risk_score.to_f
182
184
  end
183
185
  end
184
186
 
@@ -220,13 +222,13 @@ module Nexpose
220
222
  # object.
221
223
  def self.parse_json(json)
222
224
  new do
223
- @id = json['assetID'].to_i
224
- @ip = json['ipAddress']
225
+ @id = json['assetID'].to_i
226
+ @ip = json['ipAddress']
225
227
  @host_name = json['hostName']
226
- @os = json['operatingSystem']
227
- @vulns = json['vulnerabilityCount']
228
- @status = json['scanStatusTranslation'].downcase.to_sym
229
- @duration = json['duration']
228
+ @os = json['operatingSystem']
229
+ @vulns = json['vulnerabilityCount']
230
+ @status = json['scanStatusTranslation'].downcase.to_sym
231
+ @duration = json['duration']
230
232
  end
231
233
  end
232
234
  end
@@ -236,7 +238,6 @@ module Nexpose
236
238
  class IncompleteAsset < CompletedAsset
237
239
  end
238
240
 
239
-
240
241
  # Summary object of a scan for a particular asset.
241
242
  #
242
243
  class AssetScan
@@ -268,15 +269,15 @@ module Nexpose
268
269
 
269
270
  def self.parse_json(json)
270
271
  new do
271
- @asset_id = json['assetID'].to_i
272
- @scan_id = json['scanID'].to_i
273
- @site_id = json['siteID'].to_i
274
- @ip = json['ipAddress']
275
- @host_name = json['hostname']
276
- @os = json['operatingSystem']
277
- @vulns = json['vulnCount']
278
- @end_time = Time.at(json['completed'].to_i / 1000)
279
- @site_name = json['siteName']
272
+ @asset_id = json['assetID'].to_i
273
+ @scan_id = json['scanID'].to_i
274
+ @site_id = json['siteID'].to_i
275
+ @ip = json['ipAddress']
276
+ @host_name = json['hostname']
277
+ @os = json['operatingSystem']
278
+ @vulns = json['vulnCount']
279
+ @end_time = Time.at(json['completed'].to_i / 1000)
280
+ @site_name = json['siteName']
280
281
  @engine_name = json['scanEngineName']
281
282
  end
282
283
  end
@@ -6,22 +6,22 @@ module Nexpose
6
6
  # discovery of assets, including whether or not connections are active.
7
7
  #
8
8
  def list_discovery_connections
9
- xml = make_xml('DiscoveryConnectionListingRequest')
10
- response = execute(xml, '1.2')
9
+ xml = make_xml('DiscoveryConnectionListingRequest')
10
+ response = execute(xml, '1.2')
11
11
  connections = []
12
12
  response.res.elements.each('DiscoveryConnectionListingResponse/DiscoveryConnectionSummary') do |conn|
13
13
  connections << DiscoveryConnection.parse(conn)
14
14
  end
15
15
  connections
16
16
  end
17
- alias_method :discovery_connections, :list_discovery_connections
17
+ alias discovery_connections list_discovery_connections
18
18
 
19
19
  # Delete an existing connection to a target used for dynamic discovery of assets.
20
20
  #
21
21
  # @param [Fixnum] id ID of an existing discovery connection.
22
22
  #
23
23
  def delete_discovery_connection(id)
24
- xml = make_xml('DiscoveryConnectionDeleteRequest', { 'id' => id })
24
+ xml = make_xml('DiscoveryConnectionDeleteRequest', { 'id' => id })
25
25
  response = execute(xml, '1.2')
26
26
  response.success
27
27
  end
@@ -32,22 +32,22 @@ module Nexpose
32
32
 
33
33
  module CollectionMethod
34
34
  DIRECTORY_WATCHER = 'DIRECTORY_WATCHER'
35
- SYSLOG = 'SYSLOG'
35
+ SYSLOG = 'SYSLOG'
36
36
  end
37
37
 
38
38
  module EventSource
39
39
  INFOBLOX_TRINZIC = 'INFOBLOX_TRINZIC'
40
- MICROSOFT_DHCP = 'MICROSOFT_DHCP'
40
+ MICROSOFT_DHCP = 'MICROSOFT_DHCP'
41
41
  end
42
42
 
43
43
  module Protocol
44
- HTTP = 'HTTP'
45
- HTTPS = 'HTTPS'
46
- LDAP = 'LDAP'
47
- LDAPS = 'LDAPS'
44
+ HTTP = 'HTTP'
45
+ HTTPS = 'HTTPS'
46
+ LDAP = 'LDAP'
47
+ LDAPS = 'LDAPS'
48
48
  SERVICE_PROXY = 'SERVICE_PROXY'
49
- TCP = 'TCP'
50
- UDP = 'UDP'
49
+ TCP = 'TCP'
50
+ UDP = 'UDP'
51
51
  end
52
52
 
53
53
  module Type
@@ -56,51 +56,37 @@ module Nexpose
56
56
  ACTIVESYNC = 'ACTIVESYNC'
57
57
  ACTIVESYNC_POWERSHELL = 'ACTIVESYNC_POWERSHELL'
58
58
  ACTIVESYNC_OFFICE365 = 'ACTIVESYNC_OFFICE365'
59
- DHCP_SERVICE = 'DHCP_SERVICE'
59
+ DHCP_SERVICE = 'DHCP_SERVICE'
60
60
  end
61
61
 
62
62
  # A unique identifier for this connection.
63
63
  attr_accessor :id
64
-
65
64
  # A unique name for this connection.
66
65
  attr_accessor :name
67
-
68
66
  # Type of discovery connection
69
67
  attr_accessor :type
70
-
71
68
  # The IP address or fully qualified domain name of the server.
72
69
  attr_accessor :address
73
-
74
70
  # The engine ID to use for this connection.
75
71
  attr_accessor :engine_id
76
-
77
72
  # A user name that can be used to log into the server.
78
73
  attr_accessor :user
79
-
80
74
  # The password to use when connecting with the defined user.
81
75
  attr_accessor :password
82
-
83
76
  # The protocol used for connecting to the server. One of DiscoveryConnection::Protocol
84
77
  attr_accessor :protocol
85
-
86
78
  # The port used for connecting to the server. A valid port from 1 to 65535.
87
79
  attr_accessor :port
88
-
89
80
  # The hostname of the exchange server to connect for exchange powershell connections
90
81
  attr_accessor :exchange_hostname
91
-
92
82
  # The exchange username to connect for exchange powershell connections
93
83
  attr_accessor :exchange_username
94
-
95
84
  # The exchange password to connect for exchange powershell connections
96
85
  attr_accessor :exchange_password
97
-
98
86
  # The collection method (e.g. for DHCP discovery connections)
99
87
  attr_accessor :collection_method
100
-
101
88
  # The event source (e.g. for DHCP discovery connections)
102
89
  attr_accessor :event_source
103
-
104
90
  # Whether or not the connection is active.
105
91
  # Discovery is only possible when the connection is active.
106
92
  attr_accessor :status
@@ -114,10 +100,13 @@ module Nexpose
114
100
  # @param [String] password Password for credentials on this connection.
115
101
  #
116
102
  def initialize(name = nil, address = nil, user = nil, password = nil)
117
- @name, @address, @user, @password = name, address, user, password
118
- @type = nil # for backwards compatibilitly, at some point should set this to Type::VSPHERE
119
- @id = -1
120
- @port = 443
103
+ @name = name
104
+ @address = address
105
+ @user = user
106
+ @password = password
107
+ @type = nil # For backwards compatibilitly, at some point should set this to Type::VSPHERE
108
+ @id = -1
109
+ @port = 443
121
110
  @protocol = Protocol::HTTPS
122
111
  end
123
112
 
@@ -155,7 +144,6 @@ module Nexpose
155
144
  #
156
145
  def save(nsc)
157
146
  @id == -1 ? create(nsc) : update(nsc)
158
-
159
147
  @id
160
148
  end
161
149
 
@@ -181,7 +169,7 @@ module Nexpose
181
169
  # @param [Connection] nsc Connection to a console.
182
170
  #
183
171
  def connect(nsc)
184
- xml = nsc.make_xml('DiscoveryConnectionConnectRequest', { 'id' => id })
172
+ xml = nsc.make_xml('DiscoveryConnectionConnectRequest', { 'id' => id })
185
173
  response = nsc.execute(xml, '1.2')
186
174
  response.success
187
175
  end
@@ -221,10 +209,10 @@ module Nexpose
221
209
  conn = new(xml.attributes['name'],
222
210
  xml.attributes['address'],
223
211
  xml.attributes['user-name'])
224
- conn.id = xml.attributes['id'].to_i
225
- conn.protocol = xml.attributes['protocol']
226
- conn.port = xml.attributes['port'].to_i
227
- conn.status = xml.attributes['connection-status']
212
+ conn.id = xml.attributes['id'].to_i
213
+ conn.protocol = xml.attributes['protocol']
214
+ conn.port = xml.attributes['port'].to_i
215
+ conn.status = xml.attributes['connection-status']
228
216
  conn.engine_id = xml.attributes['engine-id'].to_i
229
217
  conn
230
218
  end
@@ -234,10 +222,11 @@ module Nexpose
234
222
  end
235
223
 
236
224
  def to_h
237
- { id: id,
225
+ {
226
+ id: id,
238
227
  name: name,
239
228
  type: type
240
- # TODO Add remaining instance fields, once it is introduced in resource object
229
+ # TODO: Add remaining instance fields, once it is introduced in resource object
241
230
  }
242
231
  end
243
232
 
@@ -246,10 +235,8 @@ module Nexpose
246
235
  end
247
236
 
248
237
  def eql?(other)
249
- id.eql?(other.id) &&
250
- name.eql?(other.name) &&
251
- type.eql?(other.type)
252
- # TODO Add remaining instance fields, once it is introduced in resource object
238
+ id.eql?(other.id) && name.eql?(other.name) && type.eql?(other.type)
239
+ # TODO: Add remaining instance fields, once it is introduced in resource object
253
240
  end
254
241
 
255
242
  # Override of filter criterion to account for proper JSON naming.
@@ -306,7 +293,7 @@ module Nexpose
306
293
  attr_accessor :status
307
294
 
308
295
  def initialize(&block)
309
- instance_eval &block if block_given?
296
+ instance_eval(&block) if block_given?
310
297
  end
311
298
 
312
299
  def on?
@@ -315,14 +302,14 @@ module Nexpose
315
302
 
316
303
  def self.parse(json)
317
304
  new do |asset|
318
- asset.ip = json['IPAddress']
319
- asset.os = json['OSName']
320
- asset.name = json['assetDiscoveryName']
321
- asset.cluster = json['cluster']
305
+ asset.ip = json['IPAddress']
306
+ asset.os = json['OSName']
307
+ asset.name = json['assetDiscoveryName']
308
+ asset.cluster = json['cluster']
322
309
  asset.datacenter = json['datacenter']
323
- asset.host = json['host']
324
- asset.status = json['powerStatus']
325
- asset.pool = json['resourcePool']
310
+ asset.host = json['host']
311
+ asset.status = json['powerStatus']
312
+ asset.pool = json['resourcePool']
326
313
  end
327
314
  end
328
315
  end
@@ -338,13 +325,17 @@ module Nexpose
338
325
  # @param [String] password Password for credentials on this connection.
339
326
  #
340
327
  def initialize(name, protocol, address, user, password = nil)
341
- @name, @protocol, @address, @user, @password = name, protocol, address, user, password
342
- @type = Type::ACTIVESYNC
343
- @id = -1
344
- @port = 443 # port not used for mobile connection
328
+ @name = name
329
+ @protocol = protocol
330
+ @address = address
331
+ @user = user
332
+ @password = password
333
+ @type = Type::ACTIVESYNC
334
+ @id = -1
335
+ @port = 443 # port not used for mobile connection
345
336
  end
346
337
  end
347
-
338
+
348
339
  class MobilePowershellDiscoveryConnection < DiscoveryConnection
349
340
  # Create a new Mobile Powershell discovery connection.
350
341
  #
@@ -358,12 +349,17 @@ module Nexpose
358
349
  # @param [String] exchange_password Exchange password for exchange credentials on this connection.
359
350
  #
360
351
  def initialize(name, address, user, password, exchange_hostname, exchange_username, exchange_password)
361
- @name, @address, @user, @password = name, address, user, password
362
- @protocol = Protocol::HTTPS
363
- @exchange_hostname, @exchange_username, @exchange_password = exchange_hostname, exchange_username, exchange_password
364
- @type = Type::ACTIVESYNC_POWERSHELL
365
- @id = -1
366
- @port = 443 # port not used for mobile connection
352
+ @name = name
353
+ @address = address
354
+ @user = user
355
+ @password = password
356
+ @protocol = Protocol::HTTPS
357
+ @exchange_hostname = exchange_hostname
358
+ @exchange_username = exchange_username
359
+ @exchange_password = exchange_password
360
+ @type = Type::ACTIVESYNC_POWERSHELL
361
+ @id = -1
362
+ @port = 443 # Port not used for mobile connection
367
363
  end
368
364
  end
369
365
 
@@ -379,13 +375,17 @@ module Nexpose
379
375
  # @param [String] exchange_password Exchange password for exchange credentials on this connection.
380
376
  #
381
377
  def initialize(name, address, user, password, exchange_username, exchange_password)
382
- @name, @address, @user, @password = name, address, user, password
383
- @protocol = Protocol::HTTPS
384
- @exchange_hostname = '' # nexpose will set to office365 server
385
- @exchange_username, @exchange_password = exchange_username, exchange_password
386
- @type = Type::ACTIVESYNC_OFFICE365
387
- @id = -1
388
- @port = 443 # port not used for mobile connection
378
+ @name = name
379
+ @address = address
380
+ @user = user
381
+ @password = password
382
+ @protocol = Protocol::HTTPS
383
+ @exchange_hostname = '' # Nexpose will set to office365 server
384
+ @exchange_username = exchange_username
385
+ @exchange_password = exchange_password
386
+ @type = Type::ACTIVESYNC_OFFICE365
387
+ @id = -1
388
+ @port = 443 # Port not used for mobile connection
389
389
  end
390
390
  end
391
391
  end