github.com/kastenhq/syft@v0.0.0-20230821225854-0710af25cdbe/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/kastenhq/syft/syft/file"
     8  	"github.com/kastenhq/syft/syft/pkg"
     9  )
    10  
    11  func newComposerLockPackage(m parsedData, indexLocation file.Location) pkg.Package {
    12  	p := pkg.Package{
    13  		Name:         m.Name,
    14  		Version:      m.Version,
    15  		Locations:    file.NewLocationSet(indexLocation),
    16  		Licenses:     pkg.NewLicenseSet(pkg.NewLicensesFromLocation(indexLocation, m.License...)...),
    17  		PURL:         packageURL(m),
    18  		Language:     pkg.PHP,
    19  		Type:         pkg.PhpComposerPkg,
    20  		MetadataType: pkg.PhpComposerJSONMetadataType,
    21  		Metadata:     m.PhpComposerJSONMetadata,
    22  	}
    23  
    24  	p.SetID()
    25  	return p
    26  }
    27  
    28  func packageURL(m parsedData) string {
    29  	var name, vendor string
    30  	fields := strings.Split(m.Name, "/")
    31  	switch len(fields) {
    32  	case 0:
    33  		return ""
    34  	case 1:
    35  		name = m.Name
    36  	case 2:
    37  		vendor = fields[0]
    38  		name = fields[1]
    39  	default:
    40  		vendor = fields[0]
    41  		name = strings.Join(fields[1:], "-")
    42  	}
    43  
    44  	pURL := packageurl.NewPackageURL(
    45  		packageurl.TypeComposer,
    46  		vendor,
    47  		name,
    48  		m.Version,
    49  		nil,
    50  		"")
    51  	return pURL.ToString()
    52  }