# encoding: UTF-8

require 'vulnerability/output'

class Vulnerability
  include Vulnerability::Output

  attr_accessor :title, :references, :type, :fixed_in, :metasploit_modules

  #
  # @param [ String ] title The title of the vulnerability
  # @param [ String ] type  The type of the vulnerability
  # @param [ Array ] references References urls
  # @param [ Array ] metasploit_modules Metasploit modules for the vulnerability
	# @param [ String ] fixed_in  Vuln fixed in Version X
  #
  # @return [ Vulnerability ]
  def initialize(title, type, references, metasploit_modules = [], fixed_in = '')
    @title              = title
    @type               = type
    @references         = references
    @metasploit_modules = metasploit_modules
    @fixed_in						= fixed_in
  end

  # @param [ Vulnerability ] other
  #
  # @return [ Boolean ]
  # :nocov:
  def ==(other)
    title == other.title &&
        type == other.type &&
        references == other.references &&
        fixed_in == other.fixed_in &&
        metasploit_modules == other.metasploit_modules
  end
  # :nocov:

  # Create the Vulnerability from the xml_node
  #
  # @param [ Nokogiri::XML::Node ] xml_node
  #
  # @return [ Vulnerability ]
  def self.load_from_xml_node(xml_node)
    new(
      xml_node.search('title').text,
      xml_node.search('type').text,
      xml_node.search('reference').map(&:text),
      xml_node.search('metasploit').map(&:text),
      xml_node.search('fixed_in').text
    )
  end

end
