github.com/pluralsh/plural-cli@v0.9.5/pkg/utils/git/auth.go (about) 1 package git 2 3 import ( 4 "fmt" 5 "regexp" 6 7 "github.com/go-git/go-git/v5/plumbing/transport" 8 "github.com/go-git/go-git/v5/plumbing/transport/http" 9 "github.com/go-git/go-git/v5/plumbing/transport/ssh" 10 cryptossh "golang.org/x/crypto/ssh" 11 ) 12 13 var ( 14 scpLikeUrlRegExp = regexp.MustCompile(`^(?:(?P<user>[^@]+)@)?(?P<host>[^:\s]+):(?:(?P<port>[0-9]{1,5})(?:\/|:))?(?P<path>[^\\].*\/[^\\].*)$`) 15 ) 16 17 func UrlComponents(url string) (user, host, port, path string, err error) { 18 m := scpLikeUrlRegExp.FindStringSubmatch(url) 19 if len(m) < 5 { 20 err = fmt.Errorf("%s is not a valid git ssh url", url) 21 return 22 } 23 24 return m[1], m[2], m[3], m[4], nil 25 } 26 27 func BasicAuth(user, password string) (transport.AuthMethod, error) { 28 return &http.BasicAuth{Username: user, Password: password}, nil 29 } 30 31 func SSHAuth(user, pem, passphrase string) (transport.AuthMethod, error) { 32 hostKeyCallback := cryptossh.InsecureIgnoreHostKey() 33 keys, err := ssh.NewPublicKeys(user, []byte(pem), passphrase) 34 if err != nil { 35 return keys, err 36 } 37 38 keys.HostKeyCallback = hostKeyCallback 39 return keys, err 40 }