Class: Nexpose::AssetGroup

Inherits:
AssetGroupSummary show all
Includes:
Sanitize
Defined in:
lib/nexpose/group.rb

Overview

Asset group configuration object containing Device details.

Instance Attribute Summary collapse

Attributes inherited from AssetGroupSummary

#dynamic, #risk_score

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Sanitize

#replace_entities

Methods inherited from AssetGroupSummary

#delete, #dynamic?

Constructor Details

#initialize(name, desc, id = -1,, risk = 0.0) ⇒ AssetGroup

Returns a new instance of AssetGroup.



78
79
80
81
82
# File 'lib/nexpose/group.rb', line 78

def initialize(name, desc, id = -1, risk = 0.0)
  @name, @description, @id, @risk_score = name, desc, id, risk
  @assets = []
  @tags = []
end

Instance Attribute Details

#assetsObject Also known as: devices

Array of devices associated with this asset group.



74
75
76
# File 'lib/nexpose/group.rb', line 74

def assets
  @assets
end

#descriptionObject

Returns the value of attribute description.



71
72
73
# File 'lib/nexpose/group.rb', line 71

def description
  @description
end

#idObject

Returns the value of attribute id.



71
72
73
# File 'lib/nexpose/group.rb', line 71

def id
  @id
end

#nameObject

Returns the value of attribute name.



71
72
73
# File 'lib/nexpose/group.rb', line 71

def name
  @name
end

#tagsObject

Returns the value of attribute tags.



71
72
73
# File 'lib/nexpose/group.rb', line 71

def tags
  @tags
end

Class Method Details

.load(connection, id) ⇒ AssetGroup

Load an existing configuration from a Nexpose instance.

Parameters:

  • connection (Connection)

    Connection to console where asset group is configured.

  • id (Fixnum)

    Asset group ID of an existing group.

Returns:

  • (AssetGroup)

    Asset group configuration loaded from a Nexpose console.



139
140
141
142
143
# File 'lib/nexpose/group.rb', line 139

def self.load(connection, id)
  xml = %(<AssetGroupConfigRequest session-id="#{connection.session_id}" group-id="#{id}"/>)
  r = APIRequest.execute(connection.url, xml)
  parse(r.res)
end

.parse(xml) ⇒ Object



145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
# File 'lib/nexpose/group.rb', line 145

def self.parse(xml)
  return nil unless xml
  group = REXML::XPath.first(xml, 'AssetGroupConfigResponse/AssetGroup')
  asset_group = new(group.attributes['name'],
                    group.attributes['description'],
                    group.attributes['id'].to_i,
                    group.attributes['riskscore'].to_f)
  group.elements.each('Devices/device') do |dev|
    asset_group.assets << Device.new(dev.attributes['id'].to_i,
                                     dev.attributes['address'],
                                     dev.attributes['site-id'].to_i,
                                     dev.attributes['riskfactor'].to_f,
                                     dev.attributes['riskscore'].to_f)
  end
  group.elements.each('Tags/Tag') do |tag|
    asset_group.tags << TagSummary.parse_xml(tag)
  end
  asset_group
end

Instance Method Details

#rescan_assets(connection) ⇒ Hash

Launch ad hoc scans against each group of assets per site.

Parameters:

  • connection (Connection)

    Connection to console where asset group is configured.

Returns:

  • (Hash)

    Hash of site ID to Scan launch information for each scan.



121
122
123
124
125
126
127
128
129
# File 'lib/nexpose/group.rb', line 121

def rescan_assets(connection)
  sites_ids = @assets.map { |d| d.site_id }.uniq
  scans = {}
  sites_ids.each do |site_id|
    to_scan = @assets.select { |d| d.site_id == site_id }
    scans[site_id] = connection.scan_devices(to_scan)
  end
  scans
end

#save(connection) ⇒ Object



84
85
86
87
88
89
90
# File 'lib/nexpose/group.rb', line 84

def save(connection)
  xml = "<AssetGroupSaveRequest session-id='#{connection.session_id}'>"
  xml << to_xml
  xml << '</AssetGroupSaveRequest>'
  res = connection.execute(xml)
  @id = res.attributes['group-id'].to_i if res.success and @id < 1
end

#to_xmlString

Get an XML representation of the group that is valid for a save request. Note that only name, description, and asset ID information is accepted by a save request.

Returns:

  • (String)

    XML representation of the asset group.



98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
# File 'lib/nexpose/group.rb', line 98

def to_xml
  xml = %(<AssetGroup id="#{@id}" name="#{replace_entities(@name)}")
  xml << %( description="#{replace_entities(@description)}") if @description
  xml << '>'
  xml << '<Devices>'
  @assets.each do |asset|
    xml << %(<device id="#{asset.id}"/>)
  end
  xml << '</Devices>'
  xml << '<Tags>'
  @tags.each do |tag|
    xml << tag.as_xml.to_s
  end
  xml << '</Tags>'
  xml << '</AssetGroup>'
end