Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Skip keyring for auth check #7169

Merged
merged 11 commits into from Mar 17, 2023
16 changes: 16 additions & 0 deletions internal/config/config.go
Expand Up @@ -140,6 +140,22 @@ func (c *AuthConfig) Token(hostname string) (string, string) {
return token, source
}

// HasEnvOrConfigToken checks whether the current env or config contains a token
benjlevesque marked this conversation as resolved.
Show resolved Hide resolved
func (c *AuthConfig) HasEnvOrConfigToken() bool {
benjlevesque marked this conversation as resolved.
Show resolved Hide resolved
// This will check if there are any environment variable
// authentication tokens set for enterprise hosts.
// Any non-github.com hostname is fine here
hostname := "example.com"
if c.tokenOverride != nil {
token, _ := c.tokenOverride(hostname)
if token != "" {
return true
}
}
token, _ := ghAuth.TokenFromEnvOrConfig(hostname)
return token != ""
}

// SetToken will override any token resolution and return the given
// token and source for all calls to Token. Use for testing purposes only.
func (c *AuthConfig) SetToken(token, source string) {
Expand Down
4 changes: 1 addition & 3 deletions pkg/cmd/factory/remote_resolver.go
Expand Up @@ -82,11 +82,9 @@ func (rr *remoteResolver) Resolver() func() (context.Remotes, error) {
}

if len(cachedRemotes) == 0 {
// Any non-github.com hostname is fine here
dummyHostname := "example.com"
if isHostEnv(src) {
return nil, fmt.Errorf("none of the git remotes configured for this repository correspond to the %s environment variable. Try adding a matching remote or unsetting the variable.", src)
} else if v, _ := cfg.Authentication().Token(dummyHostname); v != "" {
} else if cfg.Authentication().HasEnvOrConfigToken() {
return nil, errors.New("set the GH_HOST environment variable to specify which GitHub host to use")
}
return nil, errors.New("none of the git remotes configured for this repository point to a known GitHub host. To tell gh about a new GitHub host, please use `gh auth login`")
Expand Down
7 changes: 1 addition & 6 deletions pkg/cmdutil/auth_check.go
Expand Up @@ -14,12 +14,7 @@ func DisableAuthCheck(cmd *cobra.Command) {
}

func CheckAuth(cfg config.Config) bool {
// This will check if there are any environment variable
// authentication tokens set for enterprise hosts.
// Any non-github.com hostname is fine here
dummyHostname := "example.com"
token, _ := cfg.Authentication().Token(dummyHostname)
if token != "" {
if cfg.Authentication().HasEnvOrConfigToken() {
return true
}

Expand Down
7 changes: 7 additions & 0 deletions pkg/cmdutil/auth_check_test.go
Expand Up @@ -36,6 +36,13 @@ func Test_CheckAuth(t *testing.T) {
},
expected: true,
},
{
name: "enterprise token",
cfgStubs: func(c *config.ConfigMock) {
t.Setenv("GH_ENTERPRISE_TOKEN", "token")
},
expected: true,
},
}

for _, tt := range tests {
Expand Down