mirror of
https://github.com/letic/terraform-provider-google.git
synced 2024-09-18 17:19:58 +00:00
50 lines
1.1 KiB
Go
50 lines
1.1 KiB
Go
|
package getter
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"net/url"
|
||
|
"regexp"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
// Note that we do not have an SSH-getter currently so this file serves
|
||
|
// only to hold the detectSSH helper that is used by other detectors.
|
||
|
|
||
|
// sshPattern matches SCP-like SSH patterns (user@host:path)
|
||
|
var sshPattern = regexp.MustCompile("^(?:([^@]+)@)?([^:]+):/?(.+)$")
|
||
|
|
||
|
// detectSSH determines if the src string matches an SSH-like URL and
|
||
|
// converts it into a net.URL compatible string. This returns nil if the
|
||
|
// string doesn't match the SSH pattern.
|
||
|
//
|
||
|
// This function is tested indirectly via detect_git_test.go
|
||
|
func detectSSH(src string) (*url.URL, error) {
|
||
|
matched := sshPattern.FindStringSubmatch(src)
|
||
|
if matched == nil {
|
||
|
return nil, nil
|
||
|
}
|
||
|
|
||
|
user := matched[1]
|
||
|
host := matched[2]
|
||
|
path := matched[3]
|
||
|
qidx := strings.Index(path, "?")
|
||
|
if qidx == -1 {
|
||
|
qidx = len(path)
|
||
|
}
|
||
|
|
||
|
var u url.URL
|
||
|
u.Scheme = "ssh"
|
||
|
u.User = url.User(user)
|
||
|
u.Host = host
|
||
|
u.Path = path[0:qidx]
|
||
|
if qidx < len(path) {
|
||
|
q, err := url.ParseQuery(path[qidx+1:])
|
||
|
if err != nil {
|
||
|
return nil, fmt.Errorf("error parsing GitHub SSH URL: %s", err)
|
||
|
}
|
||
|
u.RawQuery = q.Encode()
|
||
|
}
|
||
|
|
||
|
return &u, nil
|
||
|
}
|