mirror of
https://github.com/gocsaf/csaf.git
synced 2025-12-22 11:55:40 +01:00
Added stubs for checks.
This commit is contained in:
parent
712b4ad856
commit
6966e125ac
3 changed files with 219 additions and 12 deletions
|
|
@ -21,19 +21,21 @@ type check interface {
|
|||
report(*state, *Domain)
|
||||
}
|
||||
|
||||
func run(domains []string, checks []check) (*Report, error) {
|
||||
type checks []check
|
||||
|
||||
func (cs checks) run(domains []string) (*Report, error) {
|
||||
|
||||
var report Report
|
||||
|
||||
for _, d := range domains {
|
||||
state := newState(d)
|
||||
for _, ch := range checks {
|
||||
for _, ch := range cs {
|
||||
if err := ch.run(state); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
domain := &Domain{Name: d}
|
||||
for _, ch := range checks {
|
||||
for _, ch := range cs {
|
||||
ch.report(state, domain)
|
||||
}
|
||||
report.Domains = append(report.Domains, domain)
|
||||
|
|
@ -41,3 +43,195 @@ func run(domains []string, checks []check) (*Report, error) {
|
|||
|
||||
return &report, nil
|
||||
}
|
||||
|
||||
type baseCheck struct {
|
||||
num int
|
||||
description string
|
||||
}
|
||||
|
||||
type tlsCheck struct {
|
||||
baseCheck
|
||||
}
|
||||
|
||||
type redirectsCheck struct {
|
||||
baseCheck
|
||||
}
|
||||
|
||||
type providerMetadataCheck struct {
|
||||
baseCheck
|
||||
}
|
||||
|
||||
type securityCheck struct {
|
||||
baseCheck
|
||||
}
|
||||
|
||||
type wellknownMetadataCheck struct {
|
||||
baseCheck
|
||||
}
|
||||
|
||||
type dnsPathCheck struct {
|
||||
baseCheck
|
||||
}
|
||||
|
||||
type oneFolderPerYearCheck struct {
|
||||
baseCheck
|
||||
}
|
||||
|
||||
type indexCheck struct {
|
||||
baseCheck
|
||||
}
|
||||
|
||||
type changesCheck struct {
|
||||
baseCheck
|
||||
}
|
||||
|
||||
type directoryListingsCheck struct {
|
||||
baseCheck
|
||||
}
|
||||
|
||||
type integrityCheck struct {
|
||||
baseCheck
|
||||
}
|
||||
|
||||
type signaturesCheck struct {
|
||||
baseCheck
|
||||
}
|
||||
|
||||
type publicPGPKeyCheck struct {
|
||||
baseCheck
|
||||
}
|
||||
|
||||
func (bc *baseCheck) report(_ *state, domain *Domain) {
|
||||
req := &Requirement{Num: bc.num, Description: bc.description}
|
||||
domain.Requirements = append(domain.Requirements, req)
|
||||
}
|
||||
|
||||
func (tc *tlsCheck) run(*state) error {
|
||||
// TODO: Implement me!
|
||||
return nil
|
||||
}
|
||||
|
||||
func (tc *tlsCheck) report(state *state, domain *Domain) {
|
||||
tc.baseCheck.report(state, domain)
|
||||
// TODO: Implement me!
|
||||
}
|
||||
|
||||
func (rc *redirectsCheck) run(*state) error {
|
||||
// TODO: Implement me!
|
||||
return nil
|
||||
}
|
||||
|
||||
func (rc *redirectsCheck) report(state *state, domain *Domain) {
|
||||
rc.baseCheck.report(state, domain)
|
||||
// TODO: Implement me!
|
||||
}
|
||||
|
||||
func (pmdc *providerMetadataCheck) run(*state) error {
|
||||
// TODO: Implement me!
|
||||
return nil
|
||||
}
|
||||
|
||||
func (pmdc *providerMetadataCheck) report(state *state, domain *Domain) {
|
||||
pmdc.baseCheck.report(state, domain)
|
||||
// TODO: Implement me!
|
||||
}
|
||||
|
||||
func (sc *securityCheck) run(*state) error {
|
||||
// TODO: Implement me!
|
||||
return nil
|
||||
}
|
||||
|
||||
func (sc *securityCheck) report(state *state, domain *Domain) {
|
||||
sc.baseCheck.report(state, domain)
|
||||
// TODO: Implement me!
|
||||
}
|
||||
|
||||
func (wmdc *wellknownMetadataCheck) run(*state) error {
|
||||
// TODO: Implement me!
|
||||
return nil
|
||||
}
|
||||
|
||||
func (wmdc *wellknownMetadataCheck) report(state *state, domain *Domain) {
|
||||
wmdc.baseCheck.report(state, domain)
|
||||
// TODO: Implement me!
|
||||
}
|
||||
|
||||
func (dpc *dnsPathCheck) run(*state) error {
|
||||
// TODO: Implement me!
|
||||
return nil
|
||||
}
|
||||
|
||||
func (dpc *dnsPathCheck) report(state *state, domain *Domain) {
|
||||
dpc.baseCheck.report(state, domain)
|
||||
// TODO: Implement me!
|
||||
}
|
||||
|
||||
func (ofpyc *oneFolderPerYearCheck) report(state *state, domain *Domain) {
|
||||
ofpyc.baseCheck.report(state, domain)
|
||||
// TODO: Implement me!
|
||||
}
|
||||
|
||||
func (ofpyc *oneFolderPerYearCheck) run(*state) error {
|
||||
// TODO: Implement me!
|
||||
return nil
|
||||
}
|
||||
|
||||
func (ic *indexCheck) report(state *state, domain *Domain) {
|
||||
ic.baseCheck.report(state, domain)
|
||||
// TODO: Implement me!
|
||||
}
|
||||
|
||||
func (ic *indexCheck) run(*state) error {
|
||||
// TODO: Implement me!
|
||||
return nil
|
||||
}
|
||||
|
||||
func (cc *changesCheck) report(state *state, domain *Domain) {
|
||||
cc.baseCheck.report(state, domain)
|
||||
// TODO: Implement me!
|
||||
}
|
||||
|
||||
func (cc *changesCheck) run(*state) error {
|
||||
// TODO: Implement me!
|
||||
return nil
|
||||
}
|
||||
|
||||
func (dlc *directoryListingsCheck) report(state *state, domain *Domain) {
|
||||
dlc.baseCheck.report(state, domain)
|
||||
// TODO: Implement me!
|
||||
}
|
||||
|
||||
func (dlc *directoryListingsCheck) run(*state) error {
|
||||
// TODO: Implement me!
|
||||
return nil
|
||||
}
|
||||
|
||||
func (ic *integrityCheck) report(state *state, domain *Domain) {
|
||||
ic.baseCheck.report(state, domain)
|
||||
// TODO: Implement me!
|
||||
}
|
||||
|
||||
func (ic *integrityCheck) run(*state) error {
|
||||
// TODO: Implement me!
|
||||
return nil
|
||||
}
|
||||
|
||||
func (sc *signaturesCheck) report(state *state, domain *Domain) {
|
||||
sc.baseCheck.report(state, domain)
|
||||
// TODO: Implement me!
|
||||
}
|
||||
|
||||
func (sc *signaturesCheck) run(*state) error {
|
||||
// TODO: Implement me!
|
||||
return nil
|
||||
}
|
||||
|
||||
func (ppkc *publicPGPKeyCheck) report(state *state, domain *Domain) {
|
||||
ppkc.baseCheck.report(state, domain)
|
||||
// TODO: Implement me!
|
||||
}
|
||||
|
||||
func (ppkc *publicPGPKeyCheck) run(*state) error {
|
||||
// TODO: Implement me!
|
||||
return nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,10 +28,6 @@ type options struct {
|
|||
Format string `short:"f" long:"format" choice:"json" choice:"html" description:"Format of report" default:"json"`
|
||||
}
|
||||
|
||||
var checks = []check{
|
||||
// TODO: Implement me!
|
||||
}
|
||||
|
||||
func errCheck(err error) {
|
||||
if err != nil {
|
||||
if e, ok := err.(*flags.Error); ok && e.Type == flags.ErrHelp {
|
||||
|
|
@ -101,6 +97,24 @@ func writeReport(report *Report, opts *options) error {
|
|||
return writer(report, w)
|
||||
}
|
||||
|
||||
func buildChecks() checks {
|
||||
return checks{
|
||||
&tlsCheck{baseCheck{3, "TLS"}},
|
||||
&redirectsCheck{baseCheck{6, "Redirects"}},
|
||||
&providerMetadataCheck{baseCheck{7, "provider-metadata.json"}},
|
||||
&securityCheck{baseCheck{8, "security.txt"}},
|
||||
&wellknownMetadataCheck{baseCheck{9, "/.well-known/csaf/provider-metadata.json"}},
|
||||
&dnsPathCheck{baseCheck{10, "DNS path"}},
|
||||
&oneFolderPerYearCheck{baseCheck{11, "One folder per year"}},
|
||||
&indexCheck{baseCheck{12, "index.txt"}},
|
||||
&changesCheck{baseCheck{13, "changes.csv"}},
|
||||
&directoryListingsCheck{baseCheck{14, "Directory listings"}},
|
||||
&integrityCheck{baseCheck{18, "Integrity"}},
|
||||
&signaturesCheck{baseCheck{19, "Signatures"}},
|
||||
&publicPGPKeyCheck{baseCheck{20, "Public PGP Key"}},
|
||||
}
|
||||
}
|
||||
|
||||
func main() {
|
||||
opts := new(options)
|
||||
|
||||
|
|
@ -112,7 +126,7 @@ func main() {
|
|||
return
|
||||
}
|
||||
|
||||
report, err := run(domains, checks)
|
||||
report, err := buildChecks().run(domains)
|
||||
errCheck(err)
|
||||
|
||||
errCheck(writeReport(report, opts))
|
||||
|
|
|
|||
|
|
@ -7,15 +7,14 @@
|
|||
</head>
|
||||
<body>
|
||||
<h1>CSAF-Checker - Report</h1>
|
||||
{{ range .Domains }}
|
||||
{{- range .Domains }}
|
||||
<h2>{{ .Name }}</h2>
|
||||
Requirements:
|
||||
<dl>
|
||||
{{ range .Requirements }}
|
||||
<dt>{{ .Num }} - {{ .Description }}</dt>
|
||||
<dt><strong>Requirement {{ .Num }}: {{ .Description }}</strong></dt>
|
||||
{{ range .Messages }}
|
||||
{{ end }}
|
||||
<dd>- {{ . }}</dd>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
</dl>
|
||||
{{ end }}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue