49 lines
1.1 KiB
Go
49 lines
1.1 KiB
Go
package gitcredentials
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/cli/cli/v2/internal/ghinstance"
|
|
)
|
|
|
|
type FakeHelperConfig struct {
|
|
SelfExecutablePath string
|
|
Helpers map[string]Helper
|
|
}
|
|
|
|
// ConfigureOurs sets up the git credential helper chain to use the GitHub CLI credential helper for git repositories
|
|
// including gists.
|
|
func (hc *FakeHelperConfig) ConfigureOurs(hostname string) error {
|
|
credHelperKeys := []string{
|
|
keyFor(hostname),
|
|
}
|
|
|
|
gistHost := strings.TrimSuffix(ghinstance.GistHost(hostname), "/")
|
|
if strings.HasPrefix(gistHost, "gist.") {
|
|
credHelperKeys = append(credHelperKeys, keyFor(gistHost))
|
|
}
|
|
|
|
for _, credHelperKey := range credHelperKeys {
|
|
hc.Helpers[credHelperKey] = Helper{
|
|
Cmd: fmt.Sprintf("!%s auth git-credential", shellQuote(hc.SelfExecutablePath)),
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// ConfiguredHelper returns the configured git credential helper for a given hostname.
|
|
func (hc *FakeHelperConfig) ConfiguredHelper(hostname string) (Helper, error) {
|
|
helper, ok := hc.Helpers[keyFor(hostname)]
|
|
if ok {
|
|
return helper, nil
|
|
}
|
|
|
|
helper, ok = hc.Helpers["credential.helper"]
|
|
if ok {
|
|
return helper, nil
|
|
}
|
|
|
|
return Helper{}, nil
|
|
}
|