github.com/anchore/syft@v1.38.2/syft/pkg/cataloger/internal/cpegenerate/wordpress.go (about)

     1  package cpegenerate
     2  
     3  import (
     4  	"fmt"
     5  	"regexp"
     6  	"strings"
     7  
     8  	"github.com/anchore/syft/internal"
     9  	"github.com/anchore/syft/syft/pkg"
    10  )
    11  
    12  var (
    13  	vendorFromURLRegexp = regexp.MustCompile(`^https?://(www.)?(?P<vendor>.+)\.\w/?`)
    14  )
    15  
    16  func candidateVendorsForWordpressPlugin(p pkg.Package) fieldCandidateSet {
    17  	metadata, ok := p.Metadata.(pkg.WordpressPluginEntry)
    18  	if !ok {
    19  		return nil
    20  	}
    21  
    22  	vendors := newFieldCandidateSet()
    23  
    24  	if metadata.Author != "" {
    25  		vendors.addValue(strings.ToLower(metadata.Author))
    26  	}
    27  
    28  	if metadata.AuthorURI != "" {
    29  		matchMap := internal.MatchNamedCaptureGroups(vendorFromURLRegexp, metadata.AuthorURI)
    30  		if vendor, ok := matchMap["vendor"]; ok && vendor != "" {
    31  			vendors.addValue(strings.ToLower(vendor))
    32  		}
    33  	}
    34  
    35  	if len(vendors) == 0 {
    36  		// add plugin_name + _project as a vendor if no Author URI found
    37  		vendors.addValue(fmt.Sprintf("%s_project", normalizeWordpressPluginName(p.Name)))
    38  	}
    39  
    40  	return vendors
    41  }
    42  
    43  func candidateProductsForWordpressPlugin(p pkg.Package) fieldCandidateSet {
    44  	metadata, ok := p.Metadata.(pkg.WordpressPluginEntry)
    45  	if !ok {
    46  		return nil
    47  	}
    48  	products := newFieldCandidateSet()
    49  
    50  	products.addValue(normalizeWordpressPluginName(p.Name))
    51  	products.addValue(normalizeWordpressPluginName(metadata.PluginInstallDirectory))
    52  
    53  	return products
    54  }
    55  
    56  func normalizeWordpressPluginName(name string) string {
    57  	name = strings.TrimSpace(strings.ToLower(name))
    58  	for _, value := range []string{" "} {
    59  		name = strings.ReplaceAll(name, value, "_")
    60  	}
    61  	return name
    62  }