Class: CvssSuite::Cvss

Inherits:
Object
  • Object
show all
Defined in:
lib/cvss_suite/cvss.rb

Overview

This class represents any CVSS vector. Do not instantiate this class!

Direct Known Subclasses

Cvss2, Cvss3, Cvss31, InvalidCvss

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(vector) ⇒ Cvss

Creates a new CVSS vector by a vector.

Raises an exception if it is called on Cvss class.



28
29
30
31
32
33
34
35
# File 'lib/cvss_suite/cvss.rb', line 28

def initialize(vector)
  raise CvssSuite::Errors::InvalidParentClass, 'Do not instantiate this class!' if instance_of? Cvss

  @vector = vector
  @properties = []
  extract_metrics
  init_metrics
end

Instance Attribute Details

#baseObject (readonly)

Metric of a CVSS vector.



18
19
20
# File 'lib/cvss_suite/cvss.rb', line 18

def base
  @base
end

#environmentalObject (readonly)

Metric of a CVSS vector.



18
19
20
# File 'lib/cvss_suite/cvss.rb', line 18

def environmental
  @environmental
end

#temporalObject (readonly)

Metric of a CVSS vector.



18
19
20
# File 'lib/cvss_suite/cvss.rb', line 18

def temporal
  @temporal
end

#vectorObject (readonly)

Returns the vector itself.



22
23
24
# File 'lib/cvss_suite/cvss.rb', line 22

def vector
  @vector
end

Instance Method Details

#overall_scoreObject

Returns the Overall Score of the CVSS vector.



75
76
77
78
79
80
81
# File 'lib/cvss_suite/cvss.rb', line 75

def overall_score
  check_validity
  return temporal_score if @temporal.valid? && !@environmental.valid?
  return environmental_score if @environmental.valid?

  base_score
end

#severityObject

Returns the severity of the CVSS vector.



53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/cvss_suite/cvss.rb', line 53

def severity
  check_validity

  score = overall_score

  if score <= 0.0
    'None'
  elsif (0.1..3.9).cover? score
    'Low'
  elsif (4.0..6.9).cover? score
    'Medium'
  elsif (7.0..8.9).cover? score
    'High'
  elsif (9.0..10.0).cover? score
    'Critical'
  else
    'None'
  end
end

#valid?Boolean

Returns if CVSS vector is valid.

Returns:

  • (Boolean)


39
40
41
42
43
44
45
46
47
48
49
# File 'lib/cvss_suite/cvss.rb', line 39

def valid?
  if @amount_of_properties >= required_amount_of_properties
    base = @base.valid?
    temporal = @base.valid? && @temporal.valid?
    environmental = @base.valid? && @environmental.valid?
    full = @base.valid? && @temporal.valid? && @environmental.valid?
    base || temporal || environmental || full
  else
    false
  end
end