-
Notifications
You must be signed in to change notification settings - Fork 529
/
metadata.go
69 lines (62 loc) · 1.46 KB
/
metadata.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package vulnerability
import (
grypeDB "github.com/anchore/grype-db/pkg/db/v3"
)
type Metadata struct {
ID string
DataSource string
Namespace string
Severity string
URLs []string
Description string
Cvss []Cvss
}
type Cvss struct {
Version string
Vector string
Metrics CvssMetrics
VendorMetadata interface{}
}
type CvssMetrics struct {
BaseScore float64
ExploitabilityScore *float64
ImpactScore *float64
}
func NewMetadata(m *grypeDB.VulnerabilityMetadata) (*Metadata, error) {
if m == nil {
return nil, nil
}
return &Metadata{
ID: m.ID,
DataSource: m.DataSource,
Namespace: m.Namespace,
Severity: m.Severity,
URLs: m.URLs,
Description: m.Description,
Cvss: NewCvss(m.Cvss),
}, nil
}
func NewCvss(m []grypeDB.Cvss) []Cvss {
// nolint:prealloc
var cvss []Cvss
for _, score := range m {
cvss = append(cvss, Cvss{
Version: score.Version,
Vector: score.Vector,
Metrics: CvssMetrics{
BaseScore: score.Metrics.BaseScore,
ExploitabilityScore: score.Metrics.ExploitabilityScore,
ImpactScore: score.Metrics.ImpactScore,
},
VendorMetadata: score.VendorMetadata,
})
}
return cvss
}
func NewCvssMetrics(baseScore, exploitabilityScore, impactScore float64) CvssMetrics {
return CvssMetrics{
BaseScore: baseScore,
ExploitabilityScore: &exploitabilityScore,
ImpactScore: &impactScore,
}
}