mirror of
https://github.com/anchore/syft.git
synced 2025-11-17 16:33:21 +01:00
* migrate pkg.ID and pkg.Relationship to artifact package Signed-off-by: Alex Goodman <alex.goodman@anchore.com> * return relationships from tasks Signed-off-by: Alex Goodman <alex.goodman@anchore.com> * fix more tests Signed-off-by: Alex Goodman <alex.goodman@anchore.com> * add artifact.Identifiable by Identity() method Signed-off-by: Alex Goodman <alex.goodman@anchore.com> * fix linting Signed-off-by: Alex Goodman <alex.goodman@anchore.com> * remove catalog ID assignment Signed-off-by: Alex Goodman <alex.goodman@anchore.com> * adjust spdx helpers to use copy of packages Signed-off-by: Alex Goodman <alex.goodman@anchore.com> * stabilize package ID relative to encode-decode format cycles Signed-off-by: Alex Goodman <alex.goodman@anchore.com> * rename Identity() to ID() Signed-off-by: Alex Goodman <alex.goodman@anchore.com> * use zero value for nils in ID generation Signed-off-by: Alex Goodman <alex.goodman@anchore.com> * enable source.Location to be identifiable Signed-off-by: Alex Goodman <alex.goodman@anchore.com> * hoist up package relationship discovery to analysis stage Signed-off-by: Alex Goodman <alex.goodman@anchore.com> * update ownership-by-file-overlap relationship description Signed-off-by: Alex Goodman <alex.goodman@anchore.com> * add test reminders to put new relationships under test Signed-off-by: Alex Goodman <alex.goodman@anchore.com> * adjust PHP composer.lock parser function to return relationships Signed-off-by: Alex Goodman <alex.goodman@anchore.com>
52 lines
1.3 KiB
Go
52 lines
1.3 KiB
Go
package spdxhelpers
|
|
|
|
import (
|
|
"github.com/anchore/syft/internal/formats/spdx22json/model"
|
|
"github.com/anchore/syft/internal/log"
|
|
"github.com/anchore/syft/syft/pkg"
|
|
)
|
|
|
|
func ExternalRefs(p pkg.Package) (externalRefs []model.ExternalRef) {
|
|
externalRefs = make([]model.ExternalRef, 0)
|
|
|
|
for _, c := range p.CPEs {
|
|
externalRefs = append(externalRefs, model.ExternalRef{
|
|
ReferenceCategory: model.SecurityReferenceCategory,
|
|
ReferenceLocator: c.BindToFmtString(),
|
|
ReferenceType: model.Cpe23ExternalRefType,
|
|
})
|
|
}
|
|
|
|
if p.PURL != "" {
|
|
externalRefs = append(externalRefs, model.ExternalRef{
|
|
ReferenceCategory: model.PackageManagerReferenceCategory,
|
|
ReferenceLocator: p.PURL,
|
|
ReferenceType: model.PurlExternalRefType,
|
|
})
|
|
}
|
|
return externalRefs
|
|
}
|
|
|
|
func ExtractPURL(refs []model.ExternalRef) string {
|
|
for _, r := range refs {
|
|
if r.ReferenceType == model.PurlExternalRefType {
|
|
return r.ReferenceLocator
|
|
}
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func ExtractCPEs(refs []model.ExternalRef) (cpes []pkg.CPE) {
|
|
for _, r := range refs {
|
|
if r.ReferenceType == model.Cpe23ExternalRefType {
|
|
cpe, err := pkg.NewCPE(r.ReferenceLocator)
|
|
if err != nil {
|
|
log.Warnf("unable to extract SPDX CPE=%q: %+v", r.ReferenceLocator, err)
|
|
continue
|
|
}
|
|
cpes = append(cpes, cpe)
|
|
}
|
|
}
|
|
return cpes
|
|
}
|