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 }