Module: CvssSuite
- Defined in:
- lib/cvss_suite.rb,
lib/cvss_suite/cvss.rb,
lib/cvss_suite/errors.rb,
lib/cvss_suite/version.rb,
lib/cvss_suite/cvss2/cvss2.rb,
lib/cvss_suite/cvss3/cvss3.rb,
lib/cvss_suite/cvss_metric.rb,
lib/cvss_suite/invalid_cvss.rb,
lib/cvss_suite/cvss31/cvss31.rb,
lib/cvss_suite/cvss40/cvss40.rb,
lib/cvss_suite/cvss_property.rb,
lib/cvss_suite/cvss2/cvss2_base.rb,
lib/cvss_suite/cvss3/cvss3_base.rb,
lib/cvss_suite/cvss_40_and_later.rb,
lib/cvss_suite/cvss31/cvss31_base.rb,
lib/cvss_suite/cvss40/cvss40_base.rb,
lib/cvss_suite/cvss_31_and_before.rb,
lib/cvss_suite/cvss2/cvss2_temporal.rb,
lib/cvss_suite/cvss3/cvss3_temporal.rb,
lib/cvss_suite/cvss40/cvss40_all_up.rb,
lib/cvss_suite/cvss40/cvss40_threat.rb,
lib/cvss_suite/helpers/cvss3_helper.rb,
lib/cvss_suite/helpers/cvss31_helper.rb,
lib/cvss_suite/cvss31/cvss31_temporal.rb,
lib/cvss_suite/cvss2/cvss2_environmental.rb,
lib/cvss_suite/cvss3/cvss3_environmental.rb,
lib/cvss_suite/cvss40/cvss40_calc_helper.rb,
lib/cvss_suite/cvss40/cvss40_supplemental.rb,
lib/cvss_suite/cvss31/cvss31_environmental.rb,
lib/cvss_suite/cvss40/cvss40_environmental.rb,
lib/cvss_suite/cvss40/cvss40_constants_levels.rb,
lib/cvss_suite/cvss40/cvss40_constants_max_composed.rb,
lib/cvss_suite/cvss40/cvss40_constants_max_severity.rb,
lib/cvss_suite/cvss40/cvss40_environmental_security.rb,
lib/cvss_suite/cvss40/cvss40_constants_macro_vector_lookup.rb
Overview
CVSS-Suite, a Ruby gem to manage the CVSS vector
This work is licensed under the terms of the MIT license. See the LICENSE.md file in the top-level directory.
Defined Under Namespace
Modules: Cvss31Helper, Cvss3Helper, Cvss40Constants, Errors Classes: Cvss, Cvss2, Cvss2Base, Cvss2Environmental, Cvss2Temporal, Cvss3, Cvss31, Cvss31AndBefore, Cvss31Base, Cvss31Environmental, Cvss31Temporal, Cvss3Base, Cvss3Environmental, Cvss3Temporal, Cvss40, Cvss40AllUp, Cvss40AndLater, Cvss40Base, Cvss40CalcHelper, Cvss40Environmental, Cvss40EnvironmentalSecurity, Cvss40Supplemental, Cvss40Threat, CvssMetric, CvssProperty, InvalidCvss
Constant Summary collapse
- CVSS_VECTOR_BEGINNINGS =
[ { string: 'AV:', version: 2 }, { string: '(AV:', version: 2 }, { string: 'CVSS:3.0/', version: 3.0 }, { string: 'CVSS:3.1/', version: 3.1 }, { string: 'CVSS:4.0/', version: 4.0 } ].freeze
- VERSION =
'4.1.2'.freeze
Class Method Summary collapse
-
.new(vector) ⇒ Object
Returns a CVSS class by a
vector. - .prepare_cvss2_vector(vector) ⇒ Object
- .prepare_vector(vector) ⇒ Object
- .version ⇒ Object
Class Method Details
.new(vector) ⇒ Object
Returns a CVSS class by a vector.
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/cvss_suite.rb', line 27 def self.new(vector) return InvalidCvss.new unless vector.is_a? String @vector_string = if vector.frozen? vector.dup else vector end case version when 2 Cvss2.new(prepare_vector(@vector_string)) when 3.0 Cvss3.new(prepare_vector(@vector_string)) when 3.1 Cvss31.new(prepare_vector(@vector_string)) when 4.0 Cvss40.new(prepare_vector(@vector_string)) else InvalidCvss.new end end |
.prepare_cvss2_vector(vector) ⇒ Object
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/cvss_suite.rb', line 73 def self.prepare_cvss2_vector(vector) start_of_vector = vector.index('AV') if start_of_vector.nil? '' elsif start_of_vector == 1 match_array = vector.scan(/\((?>[^)(]+|\g<0>)*\)/) if match_array.length == 1 && match_array[0] == vector vector.slice!(0) vector.slice!(vector.length - 1) vector else '' end else vector[start_of_vector..] end end |
.prepare_vector(vector) ⇒ Object
58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/cvss_suite.rb', line 58 def self.prepare_vector(vector) vector = vector.clone return prepare_cvss2_vector(vector) if version == 2 version_string = CVSS_VECTOR_BEGINNINGS.detect { |v| v[:version] == version } [:string] start_of_vector = vector.index(version_string) if start_of_vector.nil? '' else vector[version_string.length..] end end |
.version ⇒ Object
52 53 54 55 56 |
# File 'lib/cvss_suite.rb', line 52 def self.version CVSS_VECTOR_BEGINNINGS.each do |beginning| return beginning[:version] if @vector_string.start_with? beginning[:string] end end |