1
0
Fork 0
mirror of https://github.com/gocsaf/csaf.git synced 2025-12-22 11:55:40 +01:00

introduce quick check bases on folder year

This commit is contained in:
Sascha L. Teichmann 2022-07-17 12:27:25 +02:00
parent 324de3abca
commit ec0548bef6
2 changed files with 33 additions and 4 deletions

View file

@ -34,6 +34,7 @@ type options struct {
Version bool `long:"version" description:"Display version of the binary"` Version bool `long:"version" description:"Display version of the binary"`
Verbose bool `long:"verbose" short:"v" description:"Verbose output"` Verbose bool `long:"verbose" short:"v" description:"Verbose output"`
Rate *float64 `long:"rate" short:"r" description:"The average upper limit of https operations per second"` Rate *float64 `long:"rate" short:"r" description:"The average upper limit of https operations per second"`
Years *uint `long:"years" short:"y" description:"The years to look back from now" value-name:"YEARS"`
} }
func errCheck(err error) { func errCheck(err error) {

View file

@ -42,6 +42,7 @@ type topicMessages []Message
type processor struct { type processor struct {
opts *options opts *options
client util.Client client util.Client
ageAccept func(time.Time) bool
redirects map[string][]string redirects map[string][]string
noneTLS map[string]struct{} noneTLS map[string]struct{}
@ -159,6 +160,17 @@ func newProcessor(opts *options) *processor {
opts: opts, opts: opts,
alreadyChecked: map[string]whereType{}, alreadyChecked: map[string]whereType{},
expr: util.NewPathEval(), expr: util.NewPathEval(),
ageAccept: ageAccept(opts),
}
}
func ageAccept(opts *options) func(time.Time) bool {
if opts.Years == nil {
return nil
}
good := time.Now().AddDate(-int(*opts.Years), 0, 0)
return func(t time.Time) bool {
return !t.Before(good)
} }
} }
@ -354,6 +366,22 @@ func (p *processor) integrity(
continue continue
} }
p.checkTLS(u) p.checkTLS(u)
var folderYear *int
if m := yearFromURL.FindStringSubmatch(u); m != nil {
year, _ := strconv.Atoi(m[1])
folderYear = &year
// Check if we are in checking time interval.
if p.ageAccept != nil && !p.ageAccept(
time.Date(
year+1, 1, 1, // Assume 1. jan of next year.
0, 0, 0, 0,
time.UTC)) {
continue
}
}
res, err := client.Get(u) res, err := client.Get(u)
if err != nil { if err != nil {
lg(ErrorType, "Fetching %s failed: %v.", u, err) lg(ErrorType, "Fetching %s failed: %v.", u, err)
@ -402,9 +430,9 @@ func (p *processor) integrity(
} else if d, err := time.Parse(time.RFC3339, text); err != nil { } else if d, err := time.Parse(time.RFC3339, text); err != nil {
p.badFolders.error( p.badFolders.error(
"Parsing 'initial_release_date' as RFC3339 failed in %s: %v", u, err) "Parsing 'initial_release_date' as RFC3339 failed in %s: %v", u, err)
} else if m := yearFromURL.FindStringSubmatch(u); m == nil { } else if folderYear == nil {
p.badFolders.error("No year folder found in %s", u) p.badFolders.error("No year folder found in %s", u)
} else if year, _ := strconv.Atoi(m[1]); d.UTC().Year() != year { } else if d.UTC().Year() != *folderYear {
p.badFolders.error("%s should be in folder %d", u, d.UTC().Year()) p.badFolders.error("%s should be in folder %d", u, d.UTC().Year())
} }