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 }