From 69d81b656978a03ff277a611f5c3d9ef1814d001 Mon Sep 17 00:00:00 2001 From: zeripath Date: Mon, 27 May 2019 22:08:38 +0100 Subject: [PATCH] Handle insecure and ports in go get (#7041) * Handle insecure and ports in go get * Fix IsExternalURL for non-standard ports --- modules/context/context.go | 10 +++++++++- modules/context/repo.go | 5 ++++- modules/util/url.go | 3 ++- modules/util/util_test.go | 2 +- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/modules/context/context.go b/modules/context/context.go index c7534a16cdcd..1699d7aeccb7 100644 --- a/modules/context/context.go +++ b/modules/context/context.go @@ -257,6 +257,13 @@ func Contexter() macaron.Handler { branchName = repo.DefaultBranch } prefix := setting.AppURL + path.Join(url.PathEscape(ownerName), url.PathEscape(repoName), "src", "branch", util.PathEscapeSegments(branchName)) + + appURL, _ := url.Parse(setting.AppURL) + + insecure := "" + if appURL.Scheme == string(setting.HTTP) { + insecure = "--insecure " + } c.Header().Set("Content-Type", "text/html") c.WriteHeader(http.StatusOK) c.Write([]byte(com.Expand(` @@ -266,7 +273,7 @@ func Contexter() macaron.Handler { - go get {GoGetImport} + go get {Insecure}{GoGetImport} `, map[string]string{ @@ -274,6 +281,7 @@ func Contexter() macaron.Handler { "CloneLink": models.ComposeHTTPSCloneURL(ownerName, repoName), "GoDocDirectory": prefix + "{/dir}", "GoDocFile": prefix + "{/dir}/{file}#L{line}", + "Insecure": insecure, }))) return } diff --git a/modules/context/repo.go b/modules/context/repo.go index f9ed9327ff97..0908340879cb 100644 --- a/modules/context/repo.go +++ b/modules/context/repo.go @@ -188,7 +188,10 @@ func RetrieveBaseRepo(ctx *Context, repo *models.Repository) { // ComposeGoGetImport returns go-get-import meta content. func ComposeGoGetImport(owner, repo string) string { - return path.Join(setting.Domain, setting.AppSubURL, url.PathEscape(owner), url.PathEscape(repo)) + /// setting.AppUrl is guaranteed to be parse as url + appURL, _ := url.Parse(setting.AppURL) + + return path.Join(appURL.Host, setting.AppSubURL, url.PathEscape(owner), url.PathEscape(repo)) } // EarlyResponseForGoGetMeta responses appropriate go-get meta with status 200 diff --git a/modules/util/url.go b/modules/util/url.go index 537e4c9b527c..263255fcd3d6 100644 --- a/modules/util/url.go +++ b/modules/util/url.go @@ -52,7 +52,8 @@ func IsExternalURL(rawURL string) bool { if err != nil { return true } - if len(parsed.Host) != 0 && strings.Replace(parsed.Host, "www.", "", 1) != strings.Replace(setting.Domain, "www.", "", 1) { + appURL, _ := url.Parse(setting.AppURL) + if len(parsed.Host) != 0 && strings.Replace(parsed.Host, "www.", "", 1) != strings.Replace(appURL.Host, "www.", "", 1) { return true } return false diff --git a/modules/util/util_test.go b/modules/util/util_test.go index 3a2b4b71ffa9..2475065059e8 100644 --- a/modules/util/util_test.go +++ b/modules/util/util_test.go @@ -46,7 +46,7 @@ func TestURLJoin(t *testing.T) { } func TestIsExternalURL(t *testing.T) { - setting.Domain = "try.gitea.io" + setting.AppURL = "https://try.gitea.io" type test struct { Expected bool RawURL string