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

load advisories via directory_urls

This commit is contained in:
Sascha L. Teichmann 2022-08-01 06:46:05 +02:00
parent 8af0aeea46
commit dce3d1f4a7
2 changed files with 93 additions and 20 deletions

View file

@ -96,6 +96,16 @@ func NewAdvisoryFileProcessor(
}
}
// empty checks if list of strings contains at least one none empty string.
func empty(arr []string) bool {
for _, s := range arr {
if s != "" {
return false
}
}
return true
}
// Process extracts the adivisory filenames and passes them with
// the corresponding label to fn.
func (afp *AdvisoryFileProcessor) Process(
@ -133,13 +143,44 @@ func (afp *AdvisoryFileProcessor) Process(
}
} else {
// No rolie feeds -> try to load files from index.txt
files, err := afp.loadIndex(lg)
directoryURLs, err := afp.expr.Eval(
"$.distributions[*].directory_url", afp.doc)
var dirURLs []string
if err != nil {
return err
lg("extracting directory URLs failed: %v\n", err)
} else {
var ok bool
dirURLs, ok = directoryURLs.([]string)
if !ok {
lg("directory_urls are not strings.\n")
}
}
// XXX: Is treating as white okay? better look into the advisories?
if err := fn(TLPLabelWhite, files); err != nil {
return err
// Not found -> fall back to PMD url
if empty(dirURLs) {
baseURL, err := util.BaseURL(afp.base)
if err != nil {
return err
}
dirURLs = []string{baseURL}
}
for _, base := range dirURLs {
if base == "" {
continue
}
files, err := afp.loadIndex(base, lg)
if err != nil {
return err
}
// XXX: Is treating as white okay? better look into the advisories?
if err := fn(TLPLabelWhite, files); err != nil {
return err
}
}
} // TODO: else scan directories?
return nil
@ -148,12 +189,10 @@ func (afp *AdvisoryFileProcessor) Process(
// loadIndex loads baseURL/index.txt and returns a list of files
// prefixed by baseURL/.
func (afp *AdvisoryFileProcessor) loadIndex(
baseURL string,
lg func(string, ...interface{}),
) ([]AdvisoryFile, error) {
baseURL, err := util.BaseURL(afp.base)
if err != nil {
return nil, err
}
base, err := url.Parse(baseURL)
if err != nil {
return nil, err