github.com/anchore/syft@v1.4.2-0.20240516191711-1bec1fc5d397/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.AuthorURI != "" {
    25  		matchMap := internal.MatchNamedCaptureGroups(vendorFromURLRegexp, metadata.AuthorURI)
    26  		if vendor, ok := matchMap["vendor"]; ok && vendor != "" {
    27  			vendors.addValue(vendor)
    28  		}
    29  	} else {
    30  		// add plugin_name + _project as a vendor if no Author URI found
    31  		vendors.addValue(fmt.Sprintf("%s_project", normalizeWordpressPluginName(p.Name)))
    32  	}
    33  
    34  	return vendors
    35  }
    36  
    37  func candidateProductsForWordpressPlugin(p pkg.Package) fieldCandidateSet {
    38  	metadata, ok := p.Metadata.(pkg.WordpressPluginEntry)
    39  	if !ok {
    40  		return nil
    41  	}
    42  	products := newFieldCandidateSet()
    43  
    44  	products.addValue(normalizeWordpressPluginName(p.Name))
    45  	products.addValue(normalizeWordpressPluginName(metadata.PluginInstallDirectory))
    46  
    47  	return products
    48  }
    49  
    50  func normalizeWordpressPluginName(name string) string {
    51  	name = strings.TrimSpace(strings.ToLower(name))
    52  	for _, value := range []string{" "} {
    53  		name = strings.ReplaceAll(name, value, "_")
    54  	}
    55  	return name
    56  }