github.com/nextlinux/gosbom@v0.81.1-0.20230627115839-1ff50c281391/gosbom/pkg/cataloger/php/package.go (about) 1 package php 2 3 import ( 4 "strings" 5 6 "github.com/nextlinux/gosbom/gosbom/file" 7 "github.com/nextlinux/gosbom/gosbom/pkg" 8 9 "github.com/anchore/packageurl-go" 10 ) 11 12 func newComposerLockPackage(m parsedData, indexLocation file.Location) pkg.Package { 13 p := pkg.Package{ 14 Name: m.Name, 15 Version: m.Version, 16 Locations: file.NewLocationSet(indexLocation), 17 Licenses: pkg.NewLicenseSet(pkg.NewLicensesFromLocation(indexLocation, m.License...)...), 18 PURL: packageURL(m), 19 Language: pkg.PHP, 20 Type: pkg.PhpComposerPkg, 21 MetadataType: pkg.PhpComposerJSONMetadataType, 22 Metadata: m.PhpComposerJSONMetadata, 23 } 24 25 p.SetID() 26 return p 27 } 28 29 func packageURL(m parsedData) string { 30 var name, vendor string 31 fields := strings.Split(m.Name, "/") 32 switch len(fields) { 33 case 0: 34 return "" 35 case 1: 36 name = m.Name 37 case 2: 38 vendor = fields[0] 39 name = fields[1] 40 default: 41 vendor = fields[0] 42 name = strings.Join(fields[1:], "-") 43 } 44 45 pURL := packageurl.NewPackageURL( 46 packageurl.TypeComposer, 47 vendor, 48 name, 49 m.Version, 50 nil, 51 "") 52 return pURL.ToString() 53 }