mirror of
https://github.com/gocsaf/csaf.git
synced 2025-12-22 18:15:42 +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)
|
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
|
var report Report
|
||||||
|
|
||||||
for _, d := range domains {
|
for _, d := range domains {
|
||||||
state := newState(d)
|
state := newState(d)
|
||||||
for _, ch := range checks {
|
for _, ch := range cs {
|
||||||
if err := ch.run(state); err != nil {
|
if err := ch.run(state); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
domain := &Domain{Name: d}
|
domain := &Domain{Name: d}
|
||||||
for _, ch := range checks {
|
for _, ch := range cs {
|
||||||
ch.report(state, domain)
|
ch.report(state, domain)
|
||||||
}
|
}
|
||||||
report.Domains = append(report.Domains, domain)
|
report.Domains = append(report.Domains, domain)
|
||||||
|
|
@ -41,3 +43,195 @@ func run(domains []string, checks []check) (*Report, error) {
|
||||||
|
|
||||||
return &report, nil
|
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"`
|
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) {
|
func errCheck(err error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if e, ok := err.(*flags.Error); ok && e.Type == flags.ErrHelp {
|
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)
|
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() {
|
func main() {
|
||||||
opts := new(options)
|
opts := new(options)
|
||||||
|
|
||||||
|
|
@ -112,7 +126,7 @@ func main() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
report, err := run(domains, checks)
|
report, err := buildChecks().run(domains)
|
||||||
errCheck(err)
|
errCheck(err)
|
||||||
|
|
||||||
errCheck(writeReport(report, opts))
|
errCheck(writeReport(report, opts))
|
||||||
|
|
|
||||||
|
|
@ -7,15 +7,14 @@
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<h1>CSAF-Checker - Report</h1>
|
<h1>CSAF-Checker - Report</h1>
|
||||||
{{ range .Domains }}
|
{{- range .Domains }}
|
||||||
<h2>{{ .Name }}</h2>
|
<h2>{{ .Name }}</h2>
|
||||||
Requirements:
|
|
||||||
<dl>
|
<dl>
|
||||||
{{ range .Requirements }}
|
{{ range .Requirements }}
|
||||||
<dt>{{ .Num }} - {{ .Description }}</dt>
|
<dt><strong>Requirement {{ .Num }}: {{ .Description }}</strong></dt>
|
||||||
{{ range .Messages }}
|
{{ range .Messages }}
|
||||||
{{ end }}
|
|
||||||
<dd>- {{ . }}</dd>
|
<dd>- {{ . }}</dd>
|
||||||
|
{{ end }}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
</dl>
|
</dl>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue