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  }