Skip to content

Commit 7420e7a

Browse files
jeremytchangcgooding-va
authored andcommitted
fix: Set Go SDK's User-Agent header (#1285)
Implement AgentTag defined in settings and set Go SDK's outgoing Do requests with the User-Agent header. Fixes issue: #1274 --------- Co-authored-by: Colin Gooding <[email protected]>
1 parent 01779c9 commit 7420e7a

File tree

2 files changed

+72
-1
lines changed

2 files changed

+72
-1
lines changed

go/rtl/auth.go

+8-1
Original file line numberDiff line numberDiff line change
@@ -128,9 +128,16 @@ func (s *AuthSession) Do(result interface{}, method, ver, path string, reqPars m
128128
return err
129129
}
130130

131-
// set content-type header
131+
// set headers
132132
req.Header.Add("Content-Type", contentTypeHeader)
133133

134+
if s.Config.AgentTag != "" {
135+
req.Header.Set("User-Agent", s.Config.AgentTag)
136+
}
137+
if options != nil && options.AgentTag != "" {
138+
req.Header.Set("User-Agent", options.AgentTag)
139+
}
140+
134141
// set query params
135142
setQuery(req.URL, reqPars)
136143

go/rtl/auth_test.go

+64
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,70 @@ func TestAuthSession_Do_Authorization(t *testing.T) {
123123
})
124124
}
125125

126+
func TestAuthSession_Do_UserAgent(t *testing.T) {
127+
const path = "/someMethod"
128+
const apiVersion = "/4.0"
129+
130+
t.Run("Do() sets User-Agent header with AuthSession config's AgentTag", func(t *testing.T) {
131+
mux := http.NewServeMux()
132+
setupApi40Login(mux, foreverValidTestToken, http.StatusOK)
133+
server := httptest.NewServer(mux)
134+
defer server.Close()
135+
136+
mux.HandleFunc("/api"+apiVersion+path, func(w http.ResponseWriter, r *http.Request) {
137+
userAgentHeader := r.Header.Get("User-Agent")
138+
expectedHeader := "some-agent-tag"
139+
if userAgentHeader != expectedHeader {
140+
t.Errorf("User-Agent header not correct. got=%v want=%v", userAgentHeader, expectedHeader)
141+
}
142+
})
143+
144+
s := NewAuthSession(ApiSettings{
145+
BaseUrl: server.URL,
146+
ApiVersion: apiVersion,
147+
AgentTag: "some-agent-tag",
148+
})
149+
150+
var r string
151+
err := s.Do(&r, "GET", apiVersion, path, nil, nil, nil)
152+
153+
if err != nil {
154+
t.Errorf("Do() call failed: %v", err)
155+
}
156+
})
157+
158+
t.Run("Do() sets User-Agent header with Do's option's AgentTag, which will overwrite AuthSession config", func(t *testing.T) {
159+
mux := http.NewServeMux()
160+
setupApi40Login(mux, foreverValidTestToken, http.StatusOK)
161+
server := httptest.NewServer(mux)
162+
defer server.Close()
163+
164+
mux.HandleFunc("/api"+apiVersion+path, func(w http.ResponseWriter, r *http.Request) {
165+
userAgentHeader := r.Header.Get("User-Agent")
166+
expectedHeader := "new-agent-tag"
167+
if userAgentHeader != expectedHeader {
168+
t.Errorf("User-Agent header not correct. got=%v want=%v", userAgentHeader, expectedHeader)
169+
}
170+
})
171+
172+
s := NewAuthSession(ApiSettings{
173+
BaseUrl: server.URL,
174+
ApiVersion: apiVersion,
175+
AgentTag: "some-agent-tag",
176+
})
177+
178+
var r string
179+
options := ApiSettings{
180+
AgentTag: "new-agent-tag",
181+
}
182+
err := s.Do(&r, "GET", apiVersion, path, nil, nil, &options)
183+
184+
if err != nil {
185+
t.Errorf("Do() call failed: %v", err)
186+
}
187+
})
188+
}
189+
126190
func TestAuthSession_Do_Parse(t *testing.T) {
127191
type stringStruct struct {
128192
Field *string `json:"field"`

0 commit comments

Comments
 (0)