class CVE::Vulnerability

Constants

SOFTWARE_EXTRACT_REGEXP

Attributes

affected_software[R]
date[R]
description[R]
identifier[R]
title[R]

Public Class Methods

new(data) click to toggle source
# File lib/cve_crawler/cve_vulnerability.rb, line 5
def initialize(data)
  unless data.instance_of?(Hash)
    raise 'CVE Vulnerability needs to be initialized with a hash'
  end

  if malformed?(data)
    raise 'CVE Vulnerability data is malformed'
  end

  @identifier = data[:identifier]
  @date = data[:date]
  @description = data[:description]
  @link = data[:link]
  @title = data[:title]
  @affected_software = extract_software_from_title(data[:title])
end

Public Instance Methods

affected_count() click to toggle source
# File lib/cve_crawler/cve_vulnerability.rb, line 39
def affected_count
  @affected_software.nil? ? 0 : @affected_software.count
end
equal?(cve_item, strict=false) click to toggle source
# File lib/cve_crawler/cve_vulnerability.rb, line 43
def equal?(cve_item, strict=false)
  return false unless cve_item.is_a?(Vulnerability)

  if strict
    return @identifier == cve_item.identifier && @link == cve_item.link && @date.utc.iso8601 == cve_item.date.utc.iso8601 &&
        @title == cve_item.title && @description == cve_item.description
  end

  @identifier == cve_item.identifier && @link == cve_item.link
end
extract_software_from_title(title) click to toggle source
# File lib/cve_crawler/cve_vulnerability.rb, line 29
def extract_software_from_title(title)
  software = []

  title.scan(SOFTWARE_EXTRACT_REGEXP) do |scan|
    software << scan[0]
  end

  software.count == 0 ? nil : software
end
inspect() click to toggle source
# File lib/cve_crawler/cve_vulnerability.rb, line 69
def inspect
  "#<CVE::Vulnerability id=#{@identifier} affected=#{affected_count}>"
end
malformed?(data) click to toggle source
# File lib/cve_crawler/cve_vulnerability.rb, line 24
def malformed?(data)
  !(data.has_key?(:identifier) && data.has_key?(:date) && data.has_key?(:description) &&
      data.has_key?(:link) && data.has_key?(:title))
end
to_hash() click to toggle source
# File lib/cve_crawler/cve_vulnerability.rb, line 58
def to_hash
  {
    :identifier => @identifier,
    :title => @title,
    :link => @link,
    :description => @description,
    :date => @date,
    :affected_software => @affected_software
  }
end
to_s() click to toggle source
# File lib/cve_crawler/cve_vulnerability.rb, line 54
def to_s
  "#{@title} - #{@link}"
end