fetchers/alpine: auto detect namespaces
This commit is contained in:
parent
59e6c628dc
commit
3be8dfcf99
@ -86,8 +86,10 @@ func (f *fetcher) FetchUpdate(db database.Datastore) (resp updater.FetcherRespon
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var namespaces []string
|
||||||
|
namespaces, err = detectNamespaces(f.repositoryLocalPath)
|
||||||
// Append any changed vulnerabilities to the response.
|
// Append any changed vulnerabilities to the response.
|
||||||
for _, namespace := range []string{"v3.3", "v3.4"} {
|
for _, namespace := range namespaces {
|
||||||
var vulns []database.Vulnerability
|
var vulns []database.Vulnerability
|
||||||
vulns, err = parseVulnsFromNamespace(f.repositoryLocalPath, namespace)
|
vulns, err = parseVulnsFromNamespace(f.repositoryLocalPath, namespace)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -99,6 +101,40 @@ func (f *fetcher) FetchUpdate(db database.Datastore) (resp updater.FetcherRespon
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func detectNamespaces(path string) ([]string, error) {
|
||||||
|
// Open the root directory.
|
||||||
|
dir, err := os.Open(path)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer dir.Close()
|
||||||
|
|
||||||
|
// Get a list of the namspaces from the directory names.
|
||||||
|
names, err := dir.Readdirnames(0)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var namespaces []string
|
||||||
|
for _, name := range names {
|
||||||
|
// Filter out hidden directories like `.git`.
|
||||||
|
if strings.HasPrefix(name, ".") {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
namespaces = append(namespaces, name)
|
||||||
|
}
|
||||||
|
|
||||||
|
return namespaces, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type parserFunc func(io.Reader) ([]database.Vulnerability, error)
|
||||||
|
|
||||||
|
var parsers = map[string]parserFunc{
|
||||||
|
"v3.3": parse33YAML,
|
||||||
|
"v3.4": parse34YAML,
|
||||||
|
}
|
||||||
|
|
||||||
func parseVulnsFromNamespace(repositoryPath, namespace string) (vulns []database.Vulnerability, err error) {
|
func parseVulnsFromNamespace(repositoryPath, namespace string) (vulns []database.Vulnerability, err error) {
|
||||||
var file io.ReadCloser
|
var file io.ReadCloser
|
||||||
file, err = os.Open(repositoryPath + "/" + namespace + "/main.yaml")
|
file, err = os.Open(repositoryPath + "/" + namespace + "/main.yaml")
|
||||||
@ -107,13 +143,12 @@ func parseVulnsFromNamespace(repositoryPath, namespace string) (vulns []database
|
|||||||
}
|
}
|
||||||
defer file.Close()
|
defer file.Close()
|
||||||
|
|
||||||
switch namespace {
|
parseFunc, exists := parsers[namespace]
|
||||||
case "v3.3":
|
if !exists {
|
||||||
vulns, err = parse33YAML(file)
|
return
|
||||||
case "v3.4":
|
|
||||||
vulns, err = parse34YAML(file)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
vulns, err = parseFunc(file)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user