Skip to content

Commit a796e33

Browse files
authored
feat: pass the same config with user agent to all plugins (#2545)
I think this will be very useful for #2537 - on its own, it means that all plugins which make external requests will use the configured user agent, though I think in practice that's really just our two transitive enrichers 😅
1 parent a750891 commit a796e33

File tree

3 files changed

+32
-31
lines changed

3 files changed

+32
-31
lines changed

internal/scalibrplugin/resolve.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ import (
1414
"github.com/google/osv-scanner/v2/internal/scalibrextract/vcs/gitrepo"
1515
)
1616

17-
func resolveFromName(name string) (plugin.Plugin, error) {
18-
plug, err := list.FromName(name, nil)
17+
func resolveFromName(name string, cfg *cpb.PluginConfig) (plugin.Plugin, error) {
18+
plug, err := list.FromName(name, cfg)
1919

2020
if err == nil {
2121
return plug, nil
@@ -24,20 +24,20 @@ func resolveFromName(name string) (plugin.Plugin, error) {
2424
switch name {
2525
// Javascript
2626
case nodemodules.Name:
27-
return nodemodules.New(&cpb.PluginConfig{})
27+
return nodemodules.New(cfg)
2828
// Directories
2929
case vendored.Name:
30-
return vendored.New(&cpb.PluginConfig{})
30+
return vendored.New(cfg)
3131
case gitrepo.Name:
32-
return gitrepo.New(&cpb.PluginConfig{})
32+
return gitrepo.New(cfg)
3333
case osvscannerjson.Name:
34-
return osvscannerjson.New(&cpb.PluginConfig{})
34+
return osvscannerjson.New(cfg)
3535
default:
3636
return nil, fmt.Errorf("not an exact name for a plugin: %q", name)
3737
}
3838
}
3939

40-
func Resolve(enabledPlugins []string, disabledPlugins []string) []plugin.Plugin {
40+
func Resolve(enabledPlugins []string, disabledPlugins []string, cfg *cpb.PluginConfig) []plugin.Plugin {
4141
plugins := make(map[string]bool)
4242

4343
for i, exts := range [][]string{enabledPlugins, disabledPlugins} {
@@ -83,7 +83,7 @@ func Resolve(enabledPlugins []string, disabledPlugins []string) []plugin.Plugin
8383

8484
for name, value := range plugins {
8585
if name != "" && value {
86-
plug, err := resolveFromName(name)
86+
plug, err := resolveFromName(name, cfg)
8787

8888
if err != nil {
8989
cmdlogger.Errorf("%s", err)

internal/scalibrplugin/resolve_test.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"github.com/google/go-cmp/cmp"
99
apkanno "github.com/google/osv-scalibr/annotator/osduplicate/apk"
1010
dpkganno "github.com/google/osv-scalibr/annotator/osduplicate/dpkg"
11+
cpb "github.com/google/osv-scalibr/binary/proto/config_go_proto"
1112
"github.com/google/osv-scalibr/detector/cis/generic_linux/etcpasswdpermissions"
1213
"github.com/google/osv-scalibr/detector/govulncheck/binary"
1314
"github.com/google/osv-scalibr/detector/weakcredentials/codeserver"
@@ -161,7 +162,7 @@ func TestResolve(t *testing.T) {
161162
t.Run(tt.name, func(t *testing.T) {
162163
t.Parallel()
163164

164-
got := scalibrplugin.Resolve(tt.args.enabled, tt.args.disabled)
165+
got := scalibrplugin.Resolve(tt.args.enabled, tt.args.disabled, &cpb.PluginConfig{})
165166

166167
slices.Sort(tt.want)
167168

@@ -331,7 +332,7 @@ func TestResolve_Detectors(t *testing.T) {
331332
t.Run(tt.name, func(t *testing.T) {
332333
t.Parallel()
333334

334-
got := scalibrplugin.Resolve(tt.args.enabled, tt.args.disabled)
335+
got := scalibrplugin.Resolve(tt.args.enabled, tt.args.disabled, &cpb.PluginConfig{})
335336

336337
slices.Sort(tt.want)
337338

@@ -516,7 +517,7 @@ func TestResolve_Extractors(t *testing.T) {
516517
t.Run(tt.name, func(t *testing.T) {
517518
t.Parallel()
518519

519-
got := scalibrplugin.Resolve(tt.args.enabled, tt.args.disabled)
520+
got := scalibrplugin.Resolve(tt.args.enabled, tt.args.disabled, &cpb.PluginConfig{})
520521

521522
slices.Sort(tt.want)
522523

@@ -541,7 +542,7 @@ func TestResolve_Detectors_Presets(t *testing.T) {
541542
t.Run(preset, func(t *testing.T) {
542543
t.Parallel()
543544

544-
got := scalibrplugin.Resolve([]string{preset}, []string{})
545+
got := scalibrplugin.Resolve([]string{preset}, []string{}, &cpb.PluginConfig{})
545546

546547
gotNames := make([]string, 0, len(got))
547548
for _, detector := range got {
@@ -562,7 +563,7 @@ func TestResolve_Extractors_Presets(t *testing.T) {
562563
t.Run(preset, func(t *testing.T) {
563564
t.Parallel()
564565

565-
got := scalibrplugin.Resolve([]string{preset}, []string{})
566+
got := scalibrplugin.Resolve([]string{preset}, []string{}, &cpb.PluginConfig{})
566567

567568
gotNames := make([]string, 0, len(got))
568569
for _, extractor := range got {

pkg/osvscanner/scan.go

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,20 @@ func isPomXMLExtractorEnabled(plugins []plugin.Plugin) bool {
7272
}
7373

7474
func getPlugins(defaultPlugins []string, accessors ExternalAccessors, actions ScannerActions) []plugin.Plugin {
75+
cfg := &cpb.PluginConfig{
76+
UserAgent: actions.RequestUserAgent,
77+
PluginSpecific: []*cpb.PluginSpecificConfig{
78+
{
79+
Config: &cpb.PluginSpecificConfig_PomXmlNet{
80+
PomXmlNet: &cpb.POMXMLNetConfig{
81+
UpstreamRegistry: actions.TransitiveScanning.MavenRegistry,
82+
DepsDevRequirements: !actions.TransitiveScanning.NativeDataSource,
83+
},
84+
},
85+
},
86+
},
87+
}
88+
7589
if !actions.PluginsNoDefaults {
7690
actions.PluginsEnabled = append(actions.PluginsEnabled, defaultPlugins...)
7791
}
@@ -84,14 +98,12 @@ func getPlugins(defaultPlugins []string, accessors ExternalAccessors, actions Sc
8498
actions.PluginsDisabled = append(actions.PluginsDisabled, vendored.Name)
8599
}
86100

87-
plugins := scalibrplugin.Resolve(actions.PluginsEnabled, actions.PluginsDisabled)
101+
plugins := scalibrplugin.Resolve(actions.PluginsEnabled, actions.PluginsDisabled, cfg)
88102

89103
if !actions.TransitiveScanning.Disabled {
90104
// TODO: Use Enricher.RequiredPlugins to check this generically
91105
if isRequirementsExtractorEnabled(plugins) {
92-
p, err := transitivedependencyrequirements.New(&cpb.PluginConfig{
93-
UserAgent: actions.RequestUserAgent,
94-
})
106+
p, err := transitivedependencyrequirements.New(cfg)
95107
if err != nil {
96108
log.Errorf("Failed to make transitivedependencyrequirements enricher: %v", err)
97109
} else {
@@ -101,19 +113,7 @@ func getPlugins(defaultPlugins []string, accessors ExternalAccessors, actions Sc
101113

102114
// TODO: Use Enricher.RequiredPlugins to check this generically
103115
if isPomXMLExtractorEnabled(plugins) {
104-
p, err := transitivedependencypomxml.New(&cpb.PluginConfig{
105-
UserAgent: actions.RequestUserAgent,
106-
PluginSpecific: []*cpb.PluginSpecificConfig{
107-
{
108-
Config: &cpb.PluginSpecificConfig_PomXmlNet{
109-
PomXmlNet: &cpb.POMXMLNetConfig{
110-
UpstreamRegistry: actions.TransitiveScanning.MavenRegistry,
111-
DepsDevRequirements: !actions.TransitiveScanning.NativeDataSource,
112-
},
113-
},
114-
},
115-
},
116-
})
116+
p, err := transitivedependencypomxml.New(cfg)
117117
if err != nil {
118118
log.Errorf("Failed to make transitivedependencypomxml enricher: %v", err)
119119
} else {
@@ -216,7 +216,7 @@ func scan(accessors ExternalAccessors, actions ScannerActions) (*inventory.Inven
216216

217217
// --- SBOMs (Deprecated) ---
218218
// none of the SBOM extractors need configuring
219-
sbomExtractors := scalibrplugin.Resolve([]string{"sbom"}, []string{})
219+
sbomExtractors := scalibrplugin.Resolve([]string{"sbom"}, []string{}, &cpb.PluginConfig{})
220220

221221
SBOMLoop:
222222
for _, sbomPath := range actions.SBOMPaths {

0 commit comments

Comments
 (0)