* add: package url in model.Library * feat(trivy-to-vuls): add purl for library scan result * feat(scanner/library): add purl for lockfile scan result * fix: model.Library test * fix: trivy-to-vuls test data * fix: panic case to generate purl * fix: add blank line * fix: trivy-to-vuls for using Trivy version 0.49.0 or earlier * fix: remove comment * fix: remove print * fix: testcase for Package.Identifier does not exist version * fix: add blank line * fix: expected libs * fix: PackageURL -> PURL * fix: blank line
45 lines
1.2 KiB
Go
45 lines
1.2 KiB
Go
package scanner
|
|
|
|
import (
|
|
ftypes "github.com/aquasecurity/trivy/pkg/fanal/types"
|
|
"github.com/aquasecurity/trivy/pkg/purl"
|
|
"github.com/aquasecurity/trivy/pkg/types"
|
|
|
|
"github.com/future-architect/vuls/logging"
|
|
"github.com/future-architect/vuls/models"
|
|
)
|
|
|
|
func convertLibWithScanner(apps []ftypes.Application) ([]models.LibraryScanner, error) {
|
|
scanners := make([]models.LibraryScanner, 0, len(apps))
|
|
for _, app := range apps {
|
|
libs := make([]models.Library, 0, len(app.Libraries))
|
|
for _, lib := range app.Libraries {
|
|
libs = append(libs, models.Library{
|
|
Name: lib.Name,
|
|
Version: lib.Version,
|
|
PURL: newPURL(app.Type, types.Metadata{}, lib),
|
|
FilePath: lib.FilePath,
|
|
Digest: string(lib.Digest),
|
|
})
|
|
}
|
|
scanners = append(scanners, models.LibraryScanner{
|
|
Type: app.Type,
|
|
LockfilePath: app.FilePath,
|
|
Libs: libs,
|
|
})
|
|
}
|
|
return scanners, nil
|
|
}
|
|
|
|
func newPURL(pkgType ftypes.TargetType, metadata types.Metadata, pkg ftypes.Package) string {
|
|
p, err := purl.New(pkgType, metadata, pkg)
|
|
if err != nil {
|
|
logging.Log.Errorf("Failed to create PackageURL: %+v", err)
|
|
return ""
|
|
}
|
|
if p == nil {
|
|
return ""
|
|
}
|
|
return p.Unwrap().ToString()
|
|
}
|