From 468e91cb8b201cbc182ce2c35d0bb3bbed0c7dff Mon Sep 17 00:00:00 2001 From: "Sascha L. Teichmann" Date: Thu, 17 Aug 2023 11:01:45 +0200 Subject: [PATCH 1/2] Remove the years flag from checker. --- cmd/csaf_checker/config.go | 22 +--------------------- cmd/csaf_checker/processor.go | 10 +++++----- docs/csaf_checker.md | 6 ++---- internal/models/models.go | 7 ------- 4 files changed, 8 insertions(+), 37 deletions(-) diff --git a/cmd/csaf_checker/config.go b/cmd/csaf_checker/config.go index 9dd38415..82b5e0da 100644 --- a/cmd/csaf_checker/config.go +++ b/cmd/csaf_checker/config.go @@ -10,7 +10,6 @@ package main import ( "crypto/tls" - "errors" "fmt" "net/http" @@ -38,7 +37,6 @@ type config struct { Version bool `long:"version" description:"Display version of the binary" toml:"-"` Verbose bool `long:"verbose" short:"v" description:"Verbose output" toml:"verbose"` Rate *float64 `long:"rate" short:"r" description:"The average upper limit of https operations per second (defaults to unlimited)" toml:"rate"` - Years *uint `long:"years" short:"y" description:"Number of years to look back from now" value-name:"YEARS" toml:"years"` Range *models.TimeRange `long:"timerange" short:"t" description:"RANGE of time from which advisories to download" value-name:"RANGE" toml:"timerange"` IgnorePattern []string `long:"ignorepattern" short:"i" description:"Do not download files if their URLs match any of the given PATTERNs" value-name:"PATTERN" toml:"ignorepattern"` ExtraHeader http.Header `long:"header" short:"H" description:"One or more extra HTTP header fields" toml:"header"` @@ -49,7 +47,6 @@ type config struct { Config string `short:"c" long:"config" description:"Path to config TOML file" value-name:"TOML-FILE" toml:"-"` clientCerts []tls.Certificate - ageAccept *models.TimeRange ignorePattern filter.PatternMatcher } @@ -125,7 +122,7 @@ func (cfg *config) prepare() error { return err } - return cfg.prepareTimeRangeFilter() + return nil } // compileIgnorePatterns compiles the configure patterns to be ignored. @@ -148,20 +145,3 @@ func (cfg *config) prepareCertificates() error { cfg.clientCerts = cert return nil } - -// prepareTimeRangeFilter sets up the filter in which time range -// advisory should be considered for checking. -func (cfg *config) prepareTimeRangeFilter() error { - switch { - case cfg.Years != nil && cfg.Range != nil: - return errors.New(`"timerange" and "years" are both configured: only one allowed`) - - case cfg.Years != nil: - years := models.NYears(*cfg.Years) - cfg.ageAccept = &years - - case cfg.Range != nil: - cfg.ageAccept = cfg.Range - } - return nil -} diff --git a/cmd/csaf_checker/processor.go b/cmd/csaf_checker/processor.go index e6fecd8c..1b1653b8 100644 --- a/cmd/csaf_checker/processor.go +++ b/cmd/csaf_checker/processor.go @@ -243,7 +243,7 @@ func (p *processor) run(domains []string) (*Report, error) { report := Report{ Date: ReportTime{Time: time.Now().UTC()}, Version: util.SemVersion, - TimeRange: p.cfg.ageAccept, + TimeRange: p.cfg.Range, } for _, d := range domains { @@ -546,7 +546,7 @@ func (p *processor) rolieFeedEntries(feed string) ([]csaf.AdvisoryFile, error) { rfeed.Entries(func(entry *csaf.Entry) { // Filter if we have date checking. - if accept := p.cfg.ageAccept; accept != nil { + if accept := p.cfg.Range; accept != nil { if pub := time.Time(entry.Published); !pub.IsZero() && !accept.Contains(pub) { return } @@ -667,7 +667,7 @@ func (p *processor) integrity( if m := yearFromURL.FindStringSubmatch(u); m != nil { year, _ := strconv.Atoi(m[1]) // Check if we are in checking time interval. - if accept := p.cfg.ageAccept; accept != nil && !accept.Contains( + if accept := p.cfg.Range; accept != nil && !accept.Contains( time.Date( year, 12, 31, // Assume last day of year. 23, 59, 59, 0, // 23:59:59 @@ -973,7 +973,7 @@ func (p *processor) checkChanges(base string, mask whereType) error { return nil, nil, err } // Apply date range filtering. - if accept := p.cfg.ageAccept; accept != nil && !accept.Contains(t) { + if accept := p.cfg.Range; accept != nil && !accept.Contains(t) { continue } path := r[pathColumn] @@ -990,7 +990,7 @@ func (p *processor) checkChanges(base string, mask whereType) error { if len(files) == 0 { var filtered string - if p.cfg.ageAccept != nil { + if p.cfg.Range != nil { filtered = " (maybe filtered out by time interval)" } p.badChanges.warn("no entries in changes.csv found" + filtered) diff --git a/docs/csaf_checker.md b/docs/csaf_checker.md index e01da019..6dc103ba 100644 --- a/docs/csaf_checker.md +++ b/docs/csaf_checker.md @@ -16,7 +16,6 @@ Application Options: --version Display version of the binary -v, --verbose Verbose output -r, --rate= The average upper limit of https operations per second (defaults to unlimited) - -y, --years=YEARS Number of years to look back from now -t, --timerange=RANGE RANGE of time from which advisories to download -i, --ignorepattern=PATTERN Do not download files if their URLs match any of the given PATTERNs -H, --header= One or more extra HTTP header fields @@ -51,7 +50,6 @@ insecure = false # client_passphrase # not set by default verbose = false # rate # not set by default -# years # not set by default # timerange # not set by default # header # not set by default # validator # not set by default @@ -71,9 +69,9 @@ type 2: error The checker result is a success if no checks resulted in type 2, and a failure otherwise. -The options `years` and `timerange` allow to only check advisories from a given time interval. +The option `timerange` allows to only check advisories from a given time interval. It is only allowed to specify one off them. -`years` looks number of years back from now. `timerange` values allow finer controls: +There are following variants: 1. Relative. If the given string follows the rules of being a [Go duration](https://pkg.go.dev/time@go1.20.6#ParseDuration) the time interval from now minus that duration till now is used. diff --git a/internal/models/models.go b/internal/models/models.go index caacd0f0..3b834feb 100644 --- a/internal/models/models.go +++ b/internal/models/models.go @@ -28,13 +28,6 @@ func NewTimeInterval(a, b time.Time) TimeRange { return TimeRange{a, b} } -// NYears returns a time interval spanning the last years. -func NYears(years uint) TimeRange { - now := time.Now() - start := now.AddDate(-int(years), 0, 0) - return NewTimeInterval(start, now) -} - // guessDate tries to guess an RFC 3339 date time from a given string. func guessDate(s string) (time.Time, bool) { for _, layout := range []string{ From 4cd376a9caad47922c289407b44e06262ab89c9d Mon Sep 17 00:00:00 2001 From: "Sascha L. Teichmann" Date: Thu, 17 Aug 2023 11:03:40 +0200 Subject: [PATCH 2/2] Make revive happy. --- cmd/csaf_checker/config.go | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/cmd/csaf_checker/config.go b/cmd/csaf_checker/config.go index 82b5e0da..ca5c74ad 100644 --- a/cmd/csaf_checker/config.go +++ b/cmd/csaf_checker/config.go @@ -118,11 +118,7 @@ func (cfg *config) prepare() error { } // Load client certs. - if err := cfg.prepareCertificates(); err != nil { - return err - } - - return nil + return cfg.prepareCertificates() } // compileIgnorePatterns compiles the configure patterns to be ignored.