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

Add remote validator support to downloader.

This commit is contained in:
Sascha L. Teichmann 2023-01-25 01:12:18 +01:00
parent 1d0499ddea
commit bcc31c0cd6
3 changed files with 65 additions and 13 deletions

View file

@ -39,12 +39,37 @@ type downloader struct {
directory string
keys []*crypto.KeyRing
eval *util.PathEval
validator csaf.RemoteValidator
}
func newDownloader(opts *options) *downloader {
func newDownloader(opts *options) (*downloader, error) {
var validator csaf.RemoteValidator
if opts.RemoteValidator != "" {
validatorOptions := csaf.RemoteValidatorOptions{
URL: opts.RemoteValidator,
Presets: opts.RemoteValidatorPresets,
Cache: opts.RemoteValidatorCache,
}
var err error
if validator, err = validatorOptions.Open(); err != nil {
return nil, fmt.Errorf(
"preparing remote validator failed: %w", err)
}
}
return &downloader{
opts: opts,
eval: util.NewPathEval(),
opts: opts,
eval: util.NewPathEval(),
validator: validator,
}, nil
}
func (d *downloader) close() {
if d.validator != nil {
d.validator.Close()
d.validator = nil
}
}
@ -330,6 +355,19 @@ func (d *downloader) downloadFiles(label csaf.TLPLabel, files []csaf.AdvisoryFil
continue
}
// Validate against remote validator
if d.validator != nil {
ok, err := d.validator.Validate(doc)
if err != nil {
return fmt.Errorf(
"calling remote validator on %q failed: %w",
file.URL(), err)
}
if !ok {
log.Printf("Remote validation of %q failed\n", file.URL())
}
}
if err := d.eval.Extract(`$.document.tracking.initial_release_date`, dateExtract, false, doc); err != nil {
log.Printf("Cannot extract initial_release_date from advisory '%s'\n", file.URL())
initialReleaseDate = time.Now()