Disable telemetry for GHES
This commit is contained in:
parent
18dc5e77f0
commit
3ed389d664
23 changed files with 920 additions and 656 deletions
|
|
@ -7,6 +7,7 @@ import (
|
|||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/cli/cli/v2/internal/gh/ghtelemetry"
|
||||
"github.com/cli/cli/v2/utils"
|
||||
ghAPI "github.com/cli/go-gh/v2/pkg/api"
|
||||
ghauth "github.com/cli/go-gh/v2/pkg/auth"
|
||||
|
|
@ -26,6 +27,7 @@ type HTTPClientOptions struct {
|
|||
LogColorize bool
|
||||
LogVerboseHTTP bool
|
||||
SkipDefaultHeaders bool
|
||||
TelemetryDisabler ghtelemetry.Disabler
|
||||
}
|
||||
|
||||
func NewHTTPClient(opts HTTPClientOptions) (*http.Client, error) {
|
||||
|
|
@ -74,6 +76,13 @@ func NewHTTPClient(opts HTTPClientOptions) (*http.Client, error) {
|
|||
client.Transport = AddAuthTokenHeader(client.Transport, opts.Config)
|
||||
}
|
||||
|
||||
if opts.TelemetryDisabler != nil {
|
||||
client.Transport = telemetryDisablerTransport{
|
||||
wrappedTransport: client.Transport,
|
||||
telemetryDisabler: opts.TelemetryDisabler,
|
||||
}
|
||||
}
|
||||
|
||||
return client, nil
|
||||
}
|
||||
|
||||
|
|
@ -147,3 +156,15 @@ func getHost(r *http.Request) string {
|
|||
}
|
||||
return r.URL.Host
|
||||
}
|
||||
|
||||
type telemetryDisablerTransport struct {
|
||||
wrappedTransport http.RoundTripper
|
||||
telemetryDisabler ghtelemetry.Disabler
|
||||
}
|
||||
|
||||
func (t telemetryDisablerTransport) RoundTrip(req *http.Request) (*http.Response, error) {
|
||||
if ghauth.IsEnterprise(getHost(req)) {
|
||||
t.telemetryDisabler.Disable()
|
||||
}
|
||||
return t.wrappedTransport.RoundTrip(req)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -315,6 +315,80 @@ func TestHTTPClientSanitizeControlCharactersC1(t *testing.T) {
|
|||
assert.Equal(t, "monalisa¡", issue.Author.Login)
|
||||
}
|
||||
|
||||
func TestNewHTTPClientTelemetryDisabler(t *testing.T) {
|
||||
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
w.WriteHeader(http.StatusNoContent)
|
||||
}))
|
||||
defer ts.Close()
|
||||
|
||||
tests := []struct {
|
||||
name string
|
||||
host string
|
||||
wantDisabled bool
|
||||
}{
|
||||
{
|
||||
name: "enterprise host triggers disable",
|
||||
host: "ghes.example.com",
|
||||
wantDisabled: true,
|
||||
},
|
||||
{
|
||||
name: "github.com does not trigger disable",
|
||||
host: "github.com",
|
||||
wantDisabled: false,
|
||||
},
|
||||
{
|
||||
name: "tenancy host does not trigger disable",
|
||||
host: "my-company.ghe.com",
|
||||
wantDisabled: false,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
disabler := &fakeTelemetryDisabler{}
|
||||
client, err := NewHTTPClient(HTTPClientOptions{
|
||||
TelemetryDisabler: disabler,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
req, err := http.NewRequest("GET", ts.URL, nil)
|
||||
require.NoError(t, err)
|
||||
req.Host = tt.host
|
||||
|
||||
res, err := client.Do(req)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 204, res.StatusCode)
|
||||
assert.Equal(t, tt.wantDisabled, disabler.disabled, "Disable() called")
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestNewHTTPClientWithoutTelemetryDisabler(t *testing.T) {
|
||||
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
w.WriteHeader(http.StatusNoContent)
|
||||
}))
|
||||
defer ts.Close()
|
||||
|
||||
client, err := NewHTTPClient(HTTPClientOptions{})
|
||||
require.NoError(t, err)
|
||||
|
||||
req, err := http.NewRequest("GET", ts.URL, nil)
|
||||
require.NoError(t, err)
|
||||
req.Host = "ghes.example.com"
|
||||
|
||||
res, err := client.Do(req)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 204, res.StatusCode)
|
||||
}
|
||||
|
||||
type fakeTelemetryDisabler struct {
|
||||
disabled bool
|
||||
}
|
||||
|
||||
func (f *fakeTelemetryDisabler) Disable() {
|
||||
f.disabled = true
|
||||
}
|
||||
|
||||
type tinyConfig map[string]string
|
||||
|
||||
func (c tinyConfig) ActiveToken(host string) (string, string) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue