mirror of
https://github.com/gocsaf/csaf.git
synced 2025-12-22 11:55:40 +01:00
Generate HTML output
This commit is contained in:
parent
11cd5a3806
commit
712b4ad856
4 changed files with 50 additions and 6 deletions
|
|
@ -32,7 +32,7 @@ func run(domains []string, checks []check) (*Report, error) {
|
|||
return nil, err
|
||||
}
|
||||
}
|
||||
domain := new(Domain)
|
||||
domain := &Domain{Name: d}
|
||||
for _, ch := range checks {
|
||||
ch.report(state, domain)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,7 +9,10 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
_ "embed" // Used for embedding.
|
||||
"encoding/json"
|
||||
"html/template"
|
||||
"io"
|
||||
"log"
|
||||
"os"
|
||||
|
|
@ -17,6 +20,9 @@ import (
|
|||
"github.com/jessevdk/go-flags"
|
||||
)
|
||||
|
||||
//go:embed tmpl/report.html
|
||||
var reportHTML string
|
||||
|
||||
type options struct {
|
||||
Output string `short:"o" long:"output" description:"File name of the generated report" value-name:"REPORT-FILE"`
|
||||
Format string `short:"f" long:"format" choice:"json" choice:"html" description:"Format of report" default:"json"`
|
||||
|
|
@ -46,8 +52,23 @@ func writeJSON(report *Report, w io.WriteCloser) error {
|
|||
}
|
||||
|
||||
func writeHTML(report *Report, w io.WriteCloser) error {
|
||||
// TODO: Implement me!
|
||||
return w.Close()
|
||||
tmpl, err := template.New("Report HTML").Parse(reportHTML)
|
||||
if err != nil {
|
||||
w.Close()
|
||||
return err
|
||||
}
|
||||
buf := bufio.NewWriter(w)
|
||||
|
||||
if err := tmpl.Execute(buf, report); err != nil {
|
||||
w.Close()
|
||||
return err
|
||||
}
|
||||
|
||||
err = buf.Flush()
|
||||
if e := w.Close(); err == nil {
|
||||
err = e
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
type nopCloser struct{ io.Writer }
|
||||
|
|
|
|||
|
|
@ -12,16 +12,16 @@ package main
|
|||
type Requirement struct {
|
||||
Num int `json:"num"`
|
||||
Description string `json:"description"`
|
||||
Messages []string `json:"messages"`
|
||||
Messages []string `json:"messages,omitempty"`
|
||||
}
|
||||
|
||||
// Domain are the results of a domain.
|
||||
type Domain struct {
|
||||
Name string `json:"name"`
|
||||
Requirements []*Requirement `json:"requirements"`
|
||||
Requirements []*Requirement `json:"requirements,omitempty"`
|
||||
}
|
||||
|
||||
// Report is the overall report.
|
||||
type Report struct {
|
||||
Domains []*Domain `json:"domains"`
|
||||
Domains []*Domain `json:"domains,omitempty"`
|
||||
}
|
||||
|
|
|
|||
23
cmd/csaf_checker/tmpl/report.html
Normal file
23
cmd/csaf_checker/tmpl/report.html
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta description="CSAF-Checker - Report">
|
||||
<title>CSAF-Checker - Report</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>CSAF-Checker - Report</h1>
|
||||
{{ range .Domains }}
|
||||
<h2>{{ .Name }}</h2>
|
||||
Requirements:
|
||||
<dl>
|
||||
{{ range .Requirements }}
|
||||
<dt>{{ .Num }} - {{ .Description }}</dt>
|
||||
{{ range .Messages }}
|
||||
{{ end }}
|
||||
<dd>- {{ . }}</dd>
|
||||
{{ end }}
|
||||
</dl>
|
||||
{{ end }}
|
||||
</body>
|
||||
</html>
|
||||
Loading…
Add table
Add a link
Reference in a new issue