github.com/lineaje-labs/syft@v0.98.1-0.20231227153149-9e393f60ff1b/syft/pkg/cataloger/php/package.go (about) 1 package php 2 3 import ( 4 "strings" 5 6 "github.com/anchore/packageurl-go" 7 "github.com/anchore/syft/syft/file" 8 "github.com/anchore/syft/syft/pkg" 9 ) 10 11 func newComposerLockPackage(pd parsedLockData, indexLocation file.Location) pkg.Package { 12 p := pkg.Package{ 13 Name: pd.Name, 14 Version: pd.Version, 15 Locations: file.NewLocationSet(indexLocation.WithAnnotation(pkg.EvidenceAnnotationKey, pkg.PrimaryEvidenceAnnotation)), 16 Licenses: pkg.NewLicenseSet(pkg.NewLicensesFromLocation(indexLocation, pd.License...)...), 17 PURL: packageURL(pd.Name, pd.Version), 18 Language: pkg.PHP, 19 Type: pkg.PhpComposerPkg, 20 Metadata: pd.PhpComposerLockEntry, 21 } 22 23 p.SetID() 24 return p 25 } 26 27 func newComposerInstalledPackage(pd parsedInstalledData, indexLocation file.Location) pkg.Package { 28 p := pkg.Package{ 29 Name: pd.Name, 30 Version: pd.Version, 31 Locations: file.NewLocationSet(indexLocation.WithAnnotation(pkg.EvidenceAnnotationKey, pkg.PrimaryEvidenceAnnotation)), 32 Licenses: pkg.NewLicenseSet(pkg.NewLicensesFromLocation(indexLocation, pd.License...)...), 33 PURL: packageURL(pd.Name, pd.Version), 34 Language: pkg.PHP, 35 Type: pkg.PhpComposerPkg, 36 Metadata: pd.PhpComposerInstalledEntry, 37 } 38 39 p.SetID() 40 return p 41 } 42 43 func packageURL(name, version string) string { 44 var pkgName, vendor string 45 fields := strings.Split(name, "/") 46 switch len(fields) { 47 case 0: 48 return "" 49 case 1: 50 pkgName = name 51 case 2: 52 vendor = fields[0] 53 pkgName = fields[1] 54 default: 55 vendor = fields[0] 56 pkgName = strings.Join(fields[1:], "-") 57 } 58 59 pURL := packageurl.NewPackageURL( 60 packageurl.TypeComposer, 61 vendor, 62 pkgName, 63 version, 64 nil, 65 "") 66 return pURL.ToString() 67 }