Skip checking keyring for token in certain scenarios (#7169)

This commit is contained in:
Benjamin Levesque 2023-03-17 22:59:43 +01:00 committed by GitHub
parent d905165875
commit 9596fd5368
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 25 additions and 9 deletions

View file

@ -140,6 +140,22 @@ func (c *AuthConfig) Token(hostname string) (string, string) {
return token, source
}
// HasEnvToken checks whether the current env or config contains a token
func (c *AuthConfig) HasEnvToken() bool {
// 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) {

View file

@ -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().HasEnvToken() {
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`")

View file

@ -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().HasEnvToken() {
return true
}

View file

@ -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 {