class Dradis::Plugins::Nipper::Importer
Constants
- SECURITY_SECTIONS
Public Instance Methods
import(params = {})
click to toggle source
# File lib/dradis/plugins/nipper/importer.rb, line 11 def import(params = {}) file_content = File.read(params[:file]) logger.info { 'Parsing Nipper output file...' } doc = Nokogiri::XML(file_content) logger.info { 'Done.' } if doc.xpath('//document[@nipperstudio]').empty? error = 'No reports were detected in the uploaded file (/report). '\ 'Ensure you uploaded a Nipper XML report.' logger.fatal { error } content_service.create_note text: error return false end doc.xpath('//document[@nipperstudio]').each do |root| logger.info { 'Processing report...' } process_node(root) root.xpath('./report/part[@ref="SECURITYAUDIT"]/section').each do |report| next if SECURITY_SECTIONS.include?(report.attr('ref')) process_issue(report) end logger.info { 'Report processed...' } end true end
Private Instance Methods
process_evidence(xml_evidence, issue)
click to toggle source
# File lib/dradis/plugins/nipper/importer.rb, line 47 def process_evidence(xml_evidence, issue) logger.info { 'Creating evidence...' } evidence_text = template_service.process_template(template: 'evidence', data: xml_evidence) content_service.create_evidence(issue: issue, node: @host_node, content: evidence_text) end
process_issue(xml_issue)
click to toggle source
# File lib/dradis/plugins/nipper/importer.rb, line 54 def process_issue(xml_issue) plugin_id = xml_issue.attr('ref') logger.info { "Creating issue: #{plugin_id}" } issue_text = template_service.process_template(template: 'issue', data: xml_issue) issue = content_service.create_issue(text: issue_text, id: plugin_id) xml_evidence = xml_issue.at_xpath('./issuedetails/devices') process_evidence(xml_evidence, issue) end
process_node(xml_root)
click to toggle source
# File lib/dradis/plugins/nipper/importer.rb, line 66 def process_node(xml_root) logger.info { 'Creating node...' } # Create host node host_xml = xml_root.at_xpath('./information/devices/device') @host_node = content_service.create_node( label: host_xml.attr('name'), type: :host ) # Set device properties @host_node.set_property(:device_name, host_xml.attr('name')) @host_node.set_property(:device_type, host_xml.attr('type')) @host_node.set_property(:os_version, host_xml.attr('osversion')) @host_node.save end