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  }