repospec: support ssh urls with ssh certificates

This commit is contained in:
Katrina Verey
2023-01-17 23:16:03 -05:00
parent dbc11a43a8
commit 2405da65d2
2 changed files with 29 additions and 4 deletions

View File

@@ -8,6 +8,7 @@ import (
"log"
"net/url"
"path/filepath"
"regexp"
"strconv"
"strings"
"time"
@@ -370,8 +371,10 @@ func extractScheme(s string) (string, string) {
}
func extractUsername(s string) (string, string) {
if trimmed, found := trimPrefixIgnoreCase(s, gitUsername); found {
return gitUsername, trimmed
var userRegexp = regexp.MustCompile(`^([a-zA-Z][a-zA-Z0-9-]*)@`)
if m := userRegexp.FindStringSubmatch(s); m != nil {
username := m[1] + "@"
return username, s[len(username):]
}
return "", s
}
@@ -402,8 +405,6 @@ func findPathSeparator(hostPath string, acceptSCP bool) int {
return sepIndex
}
const gitUsername = "git@"
func normalizeGithubHostParts(scheme, username string) (string, string, string) {
if strings.HasPrefix(scheme, sshScheme) || username != "" {
return "", username, "github.com:"

View File

@@ -33,6 +33,8 @@ func TestNewRepoSpecFromUrl_Permute(t *testing.T) {
{"git@github.com:", "git@github.com:"},
{"git@github.com/", "git@github.com:"},
{"git::git@github.com:", "git@github.com:"},
{"org-12345@github.com:", "org-12345@github.com:"},
{"org-12345@github.com/", "org-12345@github.com:"},
}
var repoPaths = []string{"someOrg/someRepo", "kubernetes/website"}
var pathNames = []string{"README.md", "foo/krusty.txt", ""}
@@ -623,6 +625,28 @@ func TestNewRepoSpecFromUrl_Smoke(t *testing.T) {
GitSuffix: "",
},
},
{
name: "ssh on github with custom username for custom ssh certificate authority",
input: "ssh://org-12345@github.com/kubernetes-sigs/kustomize",
cloneSpec: "org-12345@github.com:kubernetes-sigs/kustomize.git",
absPath: notCloned.String(),
repoSpec: RepoSpec{
Host: "org-12345@github.com:",
RepoPath: "kubernetes-sigs/kustomize",
GitSuffix: ".git",
},
},
{
name: "scp on github with custom username for custom ssh certificate authority",
input: "org-12345@github.com/kubernetes-sigs/kustomize",
cloneSpec: "org-12345@github.com:kubernetes-sigs/kustomize.git",
absPath: notCloned.String(),
repoSpec: RepoSpec{
Host: "org-12345@github.com:",
RepoPath: "kubernetes-sigs/kustomize",
GitSuffix: ".git",
},
},
}
for _, tc := range testcases {
t.Run(tc.name, func(t *testing.T) {