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  }