syft/cmd/power_user_tasks.go
Alex Goodman f180d1c537
improve config parsing + fix command deprecation warning
Signed-off-by: Alex Goodman <alex.goodman@anchore.com>
2021-03-22 10:58:09 -04:00

107 lines
2.2 KiB
Go

package cmd
import (
"github.com/anchore/syft/internal/presenter/poweruser"
"github.com/anchore/syft/syft"
"github.com/anchore/syft/syft/file"
"github.com/anchore/syft/syft/source"
)
type powerUserTask func(*poweruser.JSONDocumentConfig) error
func powerUserTasks(src source.Source) ([]powerUserTask, error) {
var tasks []powerUserTask
var err error
var task powerUserTask
task = catalogPackagesTask(src)
if task != nil {
tasks = append(tasks, task)
}
task, err = catalogFileMetadataTask(src)
if err != nil {
return nil, err
} else if task != nil {
tasks = append(tasks, task)
}
task, err = catalogFileDigestTask(src)
if err != nil {
return nil, err
} else if task != nil {
tasks = append(tasks, task)
}
return tasks, nil
}
func catalogPackagesTask(src source.Source) powerUserTask {
if !appConfig.Package.Cataloger.Enabled {
return nil
}
task := func(results *poweruser.JSONDocumentConfig) error {
packageCatalog, theDistro, err := syft.CatalogPackages(src, appConfig.Package.Cataloger.ScopeOpt)
if err != nil {
return err
}
results.PackageCatalog = packageCatalog
results.Distro = theDistro
return nil
}
return task
}
func catalogFileMetadataTask(src source.Source) (powerUserTask, error) {
if !appConfig.FileMetadata.Cataloger.Enabled {
return nil, nil
}
resolver, err := src.FileResolver(appConfig.FileMetadata.Cataloger.ScopeOpt)
if err != nil {
return nil, err
}
task := func(results *poweruser.JSONDocumentConfig) error {
result, err := file.NewMetadataCataloger(resolver).Catalog()
if err != nil {
return err
}
results.FileMetadata = result
return nil
}
return task, nil
}
func catalogFileDigestTask(src source.Source) (powerUserTask, error) {
if !appConfig.FileMetadata.Cataloger.Enabled {
return nil, nil
}
resolver, err := src.FileResolver(appConfig.FileMetadata.Cataloger.ScopeOpt)
if err != nil {
return nil, err
}
cataloger, err := file.NewDigestsCataloger(resolver, appConfig.FileMetadata.Digests)
if err != nil {
return nil, err
}
task := func(results *poweruser.JSONDocumentConfig) error {
result, err := cataloger.Catalog()
if err != nil {
return err
}
results.FileDigests = result
return nil
}
return task, nil
}