aboutsummaryrefslogtreecommitdiff
path: root/internal/cvss/v2vector.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/cvss/v2vector.go')
-rw-r--r--internal/cvss/v2vector.go62
1 files changed, 62 insertions, 0 deletions
diff --git a/internal/cvss/v2vector.go b/internal/cvss/v2vector.go
new file mode 100644
index 0000000..1cb318a
--- /dev/null
+++ b/internal/cvss/v2vector.go
@@ -0,0 +1,62 @@
+// CVSS vector parser.
+package cvss
+
+import (
+ "strings"
+)
+
+// CVSS 2.0 vector.
+type v2Vector []v2Metric
+
+// Convert vector to string.
+func (v v2Vector) String() string {
+ // convert to slice of metrics
+ metrics := []v2Metric(v)
+
+ // build vector
+ r := make([]string, len(metrics))
+ for i, m := range(metrics) {
+ r[i] = m.String()
+ }
+
+ // build and return string
+ return strings.Join(r, "/")
+}
+
+// Return CVSS version.
+func (v2Vector) Version() Version {
+ return V20
+}
+
+// Return metrics in this vector.
+func (v v2Vector) Metrics() []Metric {
+ // build result
+ r := make([]Metric, len(v))
+ for i, m := range(v) {
+ r[i] = m
+ }
+
+ // return result
+ return r
+}
+
+// Create CVSS 2.0 vector from string.
+func newV2Vector(s string) (Vector, error) {
+ strs := strings.Split(s, "/")
+ r := make([]v2Metric, len(strs))
+
+ // walk metric strings
+ for i, ms := range(strs) {
+ // convert string to vector
+ m, err := getV2MetricFromString(ms)
+ if err != nil {
+ return nil, err
+ }
+
+ // add to results
+ r[i] = m
+ }
+
+ // build and return vector
+ return v2Vector(r), nil
+}