mirror of
https://github.com/netbirdio/netbird.git
synced 2026-03-31 06:34:14 -04:00
[shared] allow setting a user agent for the rest client (#5037)
This commit is contained in:
@@ -16,6 +16,7 @@ type Client struct {
|
|||||||
managementURL string
|
managementURL string
|
||||||
authHeader string
|
authHeader string
|
||||||
httpClient HttpClient
|
httpClient HttpClient
|
||||||
|
userAgent string
|
||||||
|
|
||||||
// Accounts NetBird account APIs
|
// Accounts NetBird account APIs
|
||||||
// see more: https://docs.netbird.io/api/resources/accounts
|
// see more: https://docs.netbird.io/api/resources/accounts
|
||||||
@@ -128,6 +129,9 @@ func (c *Client) NewRequest(ctx context.Context, method, path string, body io.Re
|
|||||||
if body != nil {
|
if body != nil {
|
||||||
req.Header.Add("Content-Type", "application/json")
|
req.Header.Add("Content-Type", "application/json")
|
||||||
}
|
}
|
||||||
|
if c.userAgent != "" {
|
||||||
|
req.Header.Set("User-Agent", c.userAgent)
|
||||||
|
}
|
||||||
|
|
||||||
if len(query) != 0 {
|
if len(query) != 0 {
|
||||||
q := req.URL.Query()
|
q := req.URL.Query()
|
||||||
|
|||||||
@@ -4,10 +4,14 @@
|
|||||||
package rest_test
|
package rest_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/http/httptest"
|
"net/http/httptest"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
|
||||||
"github.com/netbirdio/netbird/management/server/http/testing/testing_tools/channel"
|
"github.com/netbirdio/netbird/management/server/http/testing/testing_tools/channel"
|
||||||
"github.com/netbirdio/netbird/shared/management/client/rest"
|
"github.com/netbirdio/netbird/shared/management/client/rest"
|
||||||
)
|
)
|
||||||
@@ -32,3 +36,50 @@ func withBlackBoxServer(t *testing.T, callback func(*rest.Client)) {
|
|||||||
c := rest.New(server.URL, "nbp_apTmlmUXHSC4PKmHwtIZNaGr8eqcVI2gMURp")
|
c := rest.New(server.URL, "nbp_apTmlmUXHSC4PKmHwtIZNaGr8eqcVI2gMURp")
|
||||||
callback(c)
|
callback(c)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestClient_UserAgent_Set(t *testing.T) {
|
||||||
|
expectedUserAgent := "TestApp/1.2.3"
|
||||||
|
mux := &http.ServeMux{}
|
||||||
|
server := httptest.NewServer(mux)
|
||||||
|
defer server.Close()
|
||||||
|
|
||||||
|
mux.HandleFunc("/api/accounts", func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
assert.Equal(t, expectedUserAgent, r.Header.Get("User-Agent"))
|
||||||
|
w.WriteHeader(200)
|
||||||
|
_, err := w.Write([]byte("[]"))
|
||||||
|
require.NoError(t, err)
|
||||||
|
})
|
||||||
|
|
||||||
|
c := rest.NewWithOptions(
|
||||||
|
rest.WithManagementURL(server.URL),
|
||||||
|
rest.WithPAT("test-token"),
|
||||||
|
rest.WithUserAgent(expectedUserAgent),
|
||||||
|
)
|
||||||
|
|
||||||
|
_, err := c.Accounts.List(context.Background())
|
||||||
|
require.NoError(t, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestClient_UserAgent_NotSet(t *testing.T) {
|
||||||
|
mux := &http.ServeMux{}
|
||||||
|
server := httptest.NewServer(mux)
|
||||||
|
defer server.Close()
|
||||||
|
|
||||||
|
mux.HandleFunc("/api/accounts", func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
// When no custom user agent is set, Go's default HTTP client will set one
|
||||||
|
// We just verify that the header exists (it will be Go's default)
|
||||||
|
userAgent := r.Header.Get("User-Agent")
|
||||||
|
assert.NotEmpty(t, userAgent)
|
||||||
|
w.WriteHeader(200)
|
||||||
|
_, err := w.Write([]byte("[]"))
|
||||||
|
require.NoError(t, err)
|
||||||
|
})
|
||||||
|
|
||||||
|
c := rest.NewWithOptions(
|
||||||
|
rest.WithManagementURL(server.URL),
|
||||||
|
rest.WithPAT("test-token"),
|
||||||
|
)
|
||||||
|
|
||||||
|
_, err := c.Accounts.List(context.Background())
|
||||||
|
require.NoError(t, err)
|
||||||
|
}
|
||||||
|
|||||||
@@ -42,3 +42,10 @@ func WithAuthHeader(value string) option {
|
|||||||
c.authHeader = value
|
c.authHeader = value
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// WithUserAgent sets a custom User-Agent header for HTTP requests
|
||||||
|
func WithUserAgent(userAgent string) option {
|
||||||
|
return func(c *Client) {
|
||||||
|
c.userAgent = userAgent
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user