-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathvuln.go
94 lines (83 loc) · 1.93 KB
/
vuln.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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
package vulndb
type Reference struct {
Url string `json:"url"`
Title string `json:"title"`
}
type VulnFix struct {
Guidance MultiLine `json:"guidance"`
Effort int `json:"effort"`
}
type Vuln struct {
Id int `json:"id"`
Title string `json:"title"`
Description MultiLine `json:"description"`
Severity string `json:"severity"`
Tags []string `json:"tags,omitempty"`
References []Reference `json:"references"`
Wasc []string `json:"wasc,omitempty"`
Cwe []string `json:"cwe,omitempty"`
OwaspTop10 map[string][]int `json:"owasp_top_10,omitempty"`
Fix VulnFix `json:"fix"`
// filename is taken from file name
Filename string
}
type VulnList []*Vuln
// Len is part of sort.Interface.
func (s VulnList) Len() int {
return len(s)
}
// Swap is part of sort.Interface.
func (s VulnList) Swap(i, j int) {
s[i], s[j] = s[j], s[i]
}
// Less is part of sort.Interface. It is implemented by comparing Id
func (s VulnList) Less(i, j int) bool {
return s[i].Id < s[j].Id
}
// Get all vulnerabilites filtered by tag
func (s VulnList) FilterByTag(tag string) VulnList {
if s == nil {
return nil
}
vulns := VulnList{}
if tag != "" {
for _, vuln := range s {
if vuln.Tags != nil {
for _, vulnTag := range vuln.Tags {
if vulnTag == tag {
vulns = append(vulns, vuln)
break
}
}
}
}
}
return vulns
}
// Get all vulnerabilites filtered by severity
func (s VulnList) FilterBySeverity(severity string) VulnList {
if s == nil {
return nil
}
vulns := VulnList{}
if severity != "" {
for _, vuln := range s {
if vuln.Severity == severity {
vulns = append(vulns, vuln)
}
}
}
return vulns
}
// Get vulnerability by id
func (s VulnList) GetById(id int) *Vuln {
if s == nil {
return nil
}
for _, vuln := range s {
if vuln.Id == id {
return vuln
}
}
return nil
}