diff --git a/cmd/csaf_checker/checks.go b/cmd/csaf_checker/checks.go index 2286698..669aced 100644 --- a/cmd/csaf_checker/checks.go +++ b/cmd/csaf_checker/checks.go @@ -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 +} diff --git a/cmd/csaf_checker/main.go b/cmd/csaf_checker/main.go index 5e7bf30..a2f8eb5 100644 --- a/cmd/csaf_checker/main.go +++ b/cmd/csaf_checker/main.go @@ -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)) diff --git a/cmd/csaf_checker/tmpl/report.html b/cmd/csaf_checker/tmpl/report.html index d53200e..ab86c0f 100644 --- a/cmd/csaf_checker/tmpl/report.html +++ b/cmd/csaf_checker/tmpl/report.html @@ -7,15 +7,14 @@