-
Notifications
You must be signed in to change notification settings - Fork 197
/
html.go
64 lines (53 loc) · 1.82 KB
/
html.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
package report
import (
"context"
"errors"
"fmt"
"io"
"github.com/aquasecurity/starboard/pkg/configauditreport"
"github.com/aquasecurity/starboard/pkg/vulnerabilityreport"
"github.com/aquasecurity/starboard/pkg/apis/aquasecurity/v1alpha1"
"github.com/aquasecurity/starboard/pkg/kube"
"github.com/aquasecurity/starboard/pkg/report/templates"
)
type htmlReporter struct {
vulnerabilityReportsReader vulnerabilityreport.ReadWriter
configAuditReportsReader configauditreport.ReadWriter
}
func NewHTMLReporter(configAuditReportsReader configauditreport.ReadWriter, vulnerabilityReportsReader vulnerabilityreport.ReadWriter) Reporter {
return &htmlReporter{
vulnerabilityReportsReader: vulnerabilityReportsReader,
configAuditReportsReader: configAuditReportsReader,
}
}
func (h *htmlReporter) GenerateReport(workload kube.Object, writer io.Writer) error {
ctx := context.Background()
configAuditReport, err := h.configAuditReportsReader.FindByOwner(ctx, workload)
if err != nil {
return err
}
vulnerabilityReports, err := h.vulnerabilityReportsReader.FindByOwner(ctx, workload)
if err != nil {
return err
}
vulnsReports := map[string]v1alpha1.VulnerabilityScanResult{}
for _, vulnerabilityReport := range vulnerabilityReports {
containerName, ok := vulnerabilityReport.Labels[kube.LabelContainerName]
if !ok {
continue
}
vulnsReports[containerName] = vulnerabilityReport.Report
}
// if no reports whatsoever
if configAuditReport == nil && len(vulnsReports) == 0 {
return errors.New(fmt.Sprintf("No configaudits or vulnerabilities found for workload %s/%s/%s",
workload.Namespace, workload.Kind, workload.Name))
}
p := &templates.ReportPage{
VulnsReports: vulnsReports,
ConfigAuditReport: configAuditReport,
Workload: workload,
}
templates.WritePageTemplate(writer, p)
return nil
}