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

Merge branch 'main' into publisher-in-report

This commit is contained in:
Sascha L. Teichmann 2022-07-20 11:35:17 +02:00
commit 3a43ca5630
5 changed files with 63 additions and 23 deletions

View file

@ -40,8 +40,9 @@ import (
type topicMessages []Message
type processor struct {
opts *options
client util.Client
opts *options
client util.Client
ageAccept func(time.Time) bool
redirects map[string][]string
noneTLS map[string]struct{}
@ -159,6 +160,17 @@ func newProcessor(opts *options) *processor {
opts: opts,
alreadyChecked: map[string]whereType{},
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)
}
}
@ -407,6 +419,22 @@ func (p *processor) integrity(
continue
}
p.checkTLS(u)
var folderYear *int
if m := yearFromURL.FindStringSubmatch(u); m != nil {
year, _ := strconv.Atoi(m[1])
// Check if we are in checking time interval.
if p.ageAccept != nil && !p.ageAccept(
time.Date(
year, 12, 31, // Assume last day og year.
23, 59, 59, 0, // 23:59:59
time.UTC)) {
continue
}
folderYear = &year
}
res, err := client.Get(u)
if err != nil {
lg(ErrorType, "Fetching %s failed: %v.", u, err)
@ -455,9 +483,9 @@ func (p *processor) integrity(
} else if d, err := time.Parse(time.RFC3339, text); err != nil {
p.badFolders.error(
"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)
} 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())
}
@ -619,6 +647,13 @@ func (p *processor) processROLIEFeed(feed string) error {
rfeed.Entries(func(entry *csaf.Entry) {
// Filter if we have date checking.
if p.ageAccept != nil {
if pub := time.Time(entry.Published); !pub.IsZero() && !p.ageAccept(pub) {
return
}
}
var url, sha256, sha512, sign string
for i := range entry.Link {
@ -790,6 +825,10 @@ func (p *processor) checkChanges(base string, mask whereType) error {
if err != nil {
return nil, nil, err
}
// Apply date range filtering.
if p.ageAccept != nil && !p.ageAccept(t) {
continue
}
times, files =
append(times, t),
append(files, csaf.PlainAdvisoryFile(r[pathColumn]))
@ -945,8 +984,10 @@ func (p *processor) checkListing(string) error {
var unlisted []string
badDirs := map[string]struct{}{}
for f := range p.alreadyChecked {
found, err := pgs.listed(f, p)
found, err := pgs.listed(f, p, badDirs)
if err != nil && err != errContinue {
return err
}