Skip to content

Commit 116cb0e

Browse files
authored
feat: add parlay user-agent in snyk API calls (#134)
1 parent c6d18af commit 116cb0e

File tree

6 files changed

+59
-1
lines changed

6 files changed

+59
-1
lines changed

.goreleaser.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ builds:
2424
- "-w"
2525
- "-X github.com/snyk/parlay/internal/commands.version={{.Version}}"
2626
- "-X github.com/snyk/parlay/lib/ecosystems.Version={{.Version}}"
27+
- "-X github.com/snyk/parlay/lib/snyk.Version={{.Version}}"
2728

2829
archives:
2930
- format: tar.gz

lib/snyk/config.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,15 @@
1616

1717
package snyk
1818

19+
import (
20+
"context"
21+
"fmt"
22+
"net/http"
23+
)
24+
25+
// Version will be set by the build process
26+
var Version = "dev"
27+
1928
type Config struct {
2029
SnykAPIURL string
2130
APIToken string
@@ -26,3 +35,12 @@ func DefaultConfig() *Config {
2635
SnykAPIURL: "https://api.snyk.io",
2736
}
2837
}
38+
39+
func getUserAgent() string {
40+
return fmt.Sprintf("parlay (%s)", Version)
41+
}
42+
43+
func addParlayUserAgent(ctx context.Context, req *http.Request) error {
44+
req.Header.Set("User-Agent", getUserAgent())
45+
return nil
46+
}

lib/snyk/package.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ func GetPackageVulnerabilities(cfg *Config, purl *packageurl.PackageURL, auth *s
9090
client, err := issues.NewClientWithResponses(
9191
cfg.SnykAPIURL+"/rest",
9292
issues.WithRequestEditorFn(auth.Intercept),
93+
issues.WithRequestEditorFn(addParlayUserAgent),
9394
issues.WithHTTPClient(getRetryClient(logger)))
9495
if err != nil {
9596
return nil, err

lib/snyk/package_test.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,3 +89,24 @@ func TestGetPackageVulnerabilities_HandlesNilResponses(t *testing.T) {
8989
require.Error(t, err)
9090
assert.Nil(t, issues)
9191
}
92+
93+
func TestGetPackageVulnerabilities_SetsUserAgent(t *testing.T) {
94+
logger := zerolog.Nop()
95+
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
96+
assert.Contains(t, r.Header.Get("User-Agent"), "parlay")
97+
}))
98+
defer srv.Close()
99+
100+
cfg := DefaultConfig()
101+
cfg.SnykAPIURL = srv.URL
102+
103+
auth, err := AuthFromToken("asdf")
104+
require.NoError(t, err)
105+
106+
purl, err := packageurl.FromString("pkg:golang/github.com/snyk/parlay")
107+
require.NoError(t, err)
108+
109+
orgID := uuid.New()
110+
_, err = GetPackageVulnerabilities(cfg, &purl, auth, &orgID, &logger)
111+
require.NoError(t, err)
112+
}

lib/snyk/self.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ const experimentalVersion = "2023-04-28~experimental"
3333
func SnykOrgID(cfg *Config, auth *securityprovider.SecurityProviderApiKey) (*uuid.UUID, error) {
3434
experimental, err := users.NewClientWithResponses(
3535
cfg.SnykAPIURL+"/rest",
36-
users.WithRequestEditorFn(auth.Intercept))
36+
users.WithRequestEditorFn(auth.Intercept),
37+
users.WithRequestEditorFn(addParlayUserAgent))
3738
if err != nil {
3839
return nil, err
3940
}

lib/snyk/self_test.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,3 +65,19 @@ func TestSnykOrgID_Unauthorized(t *testing.T) {
6565
assert.ErrorContains(t, err, "Failed to get user info (401 Unauthorized)")
6666
assert.Nil(t, actualOrg)
6767
}
68+
69+
func TestSnykOrgID_SetsUserAgent(t *testing.T) {
70+
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
71+
assert.Contains(t, r.Header.Get("User-Agent"), "parlay")
72+
respond(w, selfBody)
73+
}))
74+
defer srv.Close()
75+
76+
cfg := DefaultConfig()
77+
cfg.SnykAPIURL = srv.URL
78+
auth, err := securityprovider.NewSecurityProviderApiKey("header", "authorization", "asdf")
79+
require.NoError(t, err)
80+
81+
_, err = SnykOrgID(cfg, auth)
82+
require.NoError(t, err)
83+
}

0 commit comments

Comments
 (0)