-
Notifications
You must be signed in to change notification settings - Fork 1
/
report.go
137 lines (130 loc) · 2.53 KB
/
report.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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
package main
import (
"html/template"
"io"
//"io/ioutil" // change to os as for go 1.16
//"os"
"time"
)
type (
ReportGenerator struct {
Template string
Report SmartCheckReport
}
SmartCheckReport struct {
GeneratedOn time.Time
Completed time.Time
Difference time.Duration
Registries []RegistryReport
}
RegistryReport struct {
Name string
Images []ImageReport
}
ImageReport struct {
Name string
Layers []LayerReport
}
LayerReport struct {
ID string
CreatedAt time.Time
CreatedBy string
Malware []MalwareReport
Package []PackageReport
Contents []ContentsReport
}
MalwareReport struct {
Filename string
Name string
URL string
}
PackageReport struct {
Name string
Version string
Vulnerabilities []VulnerabilityReport
}
VulnerabilityReport struct {
Name string
Link string
Severity string
}
ContentsReport struct {
Severity string
Rule string
Description string
Filename string
}
)
func NewReportGenerator(template string) *ReportGenerator {
return &ReportGenerator{
Template: template,
}
}
func (r *ReportGenerator) Generate(w io.Writer) error {
tmpl, err := template.New("report").Parse(r.Template)
if err != nil {
return err
}
return tmpl.Execute(w, &r.Report)
}
/*
func main() {
template, err := ioutil.ReadFile("./report_template.html")
if err != nil {
panic(err)
}
r := NewReportGenerator(string(template))
m := MalwareReport{
"eicar.com",
"EICAR_TEST_FILE",
"http://enc/eicar.com",
}
vr := VulnerabilityReport{
Name: "CVE-2020-123",
Link: "http://mitre.org",
Severity: "Hight",
}
pr := PackageReport{
Name: "nginx",
Version: "0.9",
Vulnerabilities: []VulnerabilityReport{vr},
}
cr := ContentsReport{
Severity: "Low",
Rule: "pwd_file",
Description: "very ver bad",
Filename: "/etc/some_file",
}
l := LayerReport{
ID: "IDIDIDIDI",
CreatedAt: time.Now(),
CreatedBy: "Some command",
Malware: []MalwareReport{m},
Package: []PackageReport{pr},
Contents: []ContentsReport{cr},
}
i := ImageReport{
Name: "image name",
Layers: []LayerReport{l},
}
rr := RegistryReport{
Name: "Registry name",
Images: []ImageReport{i},
}
scr := SmartCheckReport{
GeneratedOn: time.Now(),
Completed: time.Now(),
Registries: []RegistryReport{rr},
}
r.Report = scr
filename := "report.html"
f, err := os.Create(filename)
if err != nil {
panic(err)
}
err = r.Generate(f)
if err != nil {
panic(err)
}
}
*/