| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 | package contextimport (	"net/http"	"path"	"strings"	"github.com/unknwon/com"	"gopkg.in/macaron.v1"	"gogs.io/gogs/internal/conf"	"gogs.io/gogs/internal/db")// ServeGoGet does quick responses for appropriate go-get meta with status OK// regardless of whether the user has access to the repository, or the repository// does exist at all. This is particular a workaround for "go get" command which// does not respect .netrc file.func ServeGoGet() macaron.Handler {	return func(c *macaron.Context) {		if c.Query("go-get") != "1" {			return		}		ownerName := c.Params(":username")		repoName := c.Params(":reponame")		branchName := "master"		owner, err := db.Users.GetByUsername(ownerName)		if err == nil {			repo, err := db.Repos.GetByName(owner.ID, repoName)			if err == nil && repo.DefaultBranch != "" {				branchName = repo.DefaultBranch			}		}		prefix := conf.Server.ExternalURL + path.Join(ownerName, repoName, "src", branchName)		insecureFlag := ""		if !strings.HasPrefix(conf.Server.ExternalURL, "https://") {			insecureFlag = "--insecure "		}		c.PlainText(http.StatusOK, []byte(com.Expand(`<!doctype html><html>	<head>		<meta name="go-import" content="{GoGetImport} git {CloneLink}">		<meta name="go-source" content="{GoGetImport} _ {GoDocDirectory} {GoDocFile}">	</head>	<body>		go get {InsecureFlag}{GoGetImport}	</body></html>`,			map[string]string{				"GoGetImport":    path.Join(conf.Server.URL.Host, conf.Server.Subpath, ownerName, repoName),				"CloneLink":      db.ComposeHTTPSCloneURL(ownerName, repoName),				"GoDocDirectory": prefix + "{/dir}",				"GoDocFile":      prefix + "{/dir}/{file}#L{line}",				"InsecureFlag":   insecureFlag,			},		)))	}}
 |