Skip to content

Commit e194e78

Browse files
authored
OSV user agent (#390)
Add a user agent to osv-scanner OSV API requests to help see usage and and help with debugging slow queries. Closes #388
1 parent dbeadde commit e194e78

File tree

3 files changed

+29
-2
lines changed

3 files changed

+29
-2
lines changed

cmd/osv-scanner/main.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"io"
77
"os"
88

9+
"github.com/google/osv-scanner/pkg/osv"
910
"github.com/google/osv-scanner/pkg/osvscanner"
1011
"github.com/google/osv-scanner/pkg/reporter"
1112

@@ -27,6 +28,8 @@ func run(args []string, stdout, stderr io.Writer) int {
2728
r.PrintText(fmt.Sprintf("osv-scanner version: %s\ncommit: %s\nbuilt at: %s\n", ctx.App.Version, commit, date))
2829
}
2930

31+
osv.RequestUserAgent = "osv-scanner/" + version
32+
3033
app := &cli.App{
3134
Name: "osv-scanner",
3235
Version: version,

pkg/osv/osv.go

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ const (
2828
maxConcurrentRequests = 25
2929
)
3030

31+
var RequestUserAgent = ""
32+
3133
// Package represents a package identifier for OSV.
3234
type Package struct {
3335
PURL string `json:"purl,omitempty"`
@@ -146,7 +148,16 @@ func MakeRequestWithClient(request BatchedQuery, client *http.Client) (*BatchedR
146148
resp, err := makeRetryRequest(func() (*http.Response, error) {
147149
// We do not need a specific context
148150
//nolint:noctx
149-
return client.Post(QueryEndpoint, "application/json", requestBuf)
151+
req, err := http.NewRequest(http.MethodPost, QueryEndpoint, requestBuf)
152+
if err != nil {
153+
return nil, err
154+
}
155+
req.Header.Set("Content-Type", "application/json")
156+
if RequestUserAgent != "" {
157+
req.Header.Set("User-Agent", RequestUserAgent)
158+
}
159+
160+
return client.Do(req)
150161
})
151162
if err != nil {
152163
return nil, err
@@ -179,8 +190,17 @@ func Get(id string) (*models.Vulnerability, error) {
179190
// client.
180191
func GetWithClient(id string, client *http.Client) (*models.Vulnerability, error) {
181192
resp, err := makeRetryRequest(func() (*http.Response, error) {
193+
// We do not need a specific context
182194
//nolint:noctx
183-
return client.Get(GetEndpoint + "/" + id)
195+
req, err := http.NewRequest(http.MethodGet, GetEndpoint+"/"+id, nil)
196+
if err != nil {
197+
return nil, err
198+
}
199+
if RequestUserAgent != "" {
200+
req.Header.Set("User-Agent", RequestUserAgent)
201+
}
202+
203+
return client.Do(req)
184204
})
185205
if err != nil {
186206
return nil, err

pkg/osvscanner/osvscanner.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -536,6 +536,10 @@ func DoScan(actions ScannerActions, r reporter.Reporter) (models.VulnerabilityRe
536536
return models.VulnerabilityResults{}, NoPackagesFoundErr
537537
}
538538

539+
if osv.RequestUserAgent == "" {
540+
osv.RequestUserAgent = "osv-scanner-api"
541+
}
542+
539543
resp, err := osv.MakeRequest(query)
540544
if err != nil {
541545
return models.VulnerabilityResults{}, fmt.Errorf("scan failed %w", err)

0 commit comments

Comments
 (0)