mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 16:40:24 +08:00 
			
		
		
		
	Fix ipv6 parsing (#12321)
* Fix ipv6 parsing * Update modules/setting/setting.go Co-authored-by: 6543 <6543@obermui.de> Co-authored-by: Lauris BH <lauris@nix.lv> Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com> Co-authored-by: 6543 <6543@obermui.de> Co-authored-by: techknowlogick <techknowlogick@gitea.io>
This commit is contained in:
		@@ -7,6 +7,7 @@ package cmd
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	"context"
 | 
						"context"
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
 | 
						"net"
 | 
				
			||||||
	"net/http"
 | 
						"net/http"
 | 
				
			||||||
	_ "net/http/pprof" // Used for debugging if enabled and a web server is running
 | 
						_ "net/http/pprof" // Used for debugging if enabled and a web server is running
 | 
				
			||||||
	"os"
 | 
						"os"
 | 
				
			||||||
@@ -156,7 +157,7 @@ func runWeb(ctx *cli.Context) error {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	listenAddr := setting.HTTPAddr
 | 
						listenAddr := setting.HTTPAddr
 | 
				
			||||||
	if setting.Protocol != setting.UnixSocket && setting.Protocol != setting.FCGIUnix {
 | 
						if setting.Protocol != setting.UnixSocket && setting.Protocol != setting.FCGIUnix {
 | 
				
			||||||
		listenAddr += ":" + setting.HTTPPort
 | 
							listenAddr = net.JoinHostPort(listenAddr, setting.HTTPPort)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	log.Info("Listen: %v://%s%s", setting.Protocol, listenAddr, setting.AppSubURL)
 | 
						log.Info("Listen: %v://%s%s", setting.Protocol, listenAddr, setting.AppSubURL)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,6 +17,7 @@ import (
 | 
				
			|||||||
	_ "image/jpeg"
 | 
						_ "image/jpeg"
 | 
				
			||||||
	"image/png"
 | 
						"image/png"
 | 
				
			||||||
	"io/ioutil"
 | 
						"io/ioutil"
 | 
				
			||||||
 | 
						"net"
 | 
				
			||||||
	"net/url"
 | 
						"net/url"
 | 
				
			||||||
	"os"
 | 
						"os"
 | 
				
			||||||
	"path"
 | 
						"path"
 | 
				
			||||||
@@ -969,12 +970,21 @@ func (repo *Repository) cloneLink(isWiki bool) *CloneLink {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	cl := new(CloneLink)
 | 
						cl := new(CloneLink)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// if we have a ipv6 literal we need to put brackets around it
 | 
				
			||||||
 | 
						// for the git cloning to work.
 | 
				
			||||||
 | 
						sshDomain := setting.SSH.Domain
 | 
				
			||||||
 | 
						ip := net.ParseIP(setting.SSH.Domain)
 | 
				
			||||||
 | 
						if ip != nil && ip.To4() == nil {
 | 
				
			||||||
 | 
							sshDomain = "[" + setting.SSH.Domain + "]"
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if setting.SSH.Port != 22 {
 | 
						if setting.SSH.Port != 22 {
 | 
				
			||||||
		cl.SSH = fmt.Sprintf("ssh://%s@%s:%d/%s/%s.git", sshUser, setting.SSH.Domain, setting.SSH.Port, repo.OwnerName, repoName)
 | 
							cl.SSH = fmt.Sprintf("ssh://%s@%s/%s/%s.git", sshUser, net.JoinHostPort(setting.SSH.Domain, strconv.Itoa(setting.SSH.Port)), repo.OwnerName, repoName)
 | 
				
			||||||
	} else if setting.Repository.UseCompatSSHURI {
 | 
						} else if setting.Repository.UseCompatSSHURI {
 | 
				
			||||||
		cl.SSH = fmt.Sprintf("ssh://%s@%s/%s/%s.git", sshUser, setting.SSH.Domain, repo.OwnerName, repoName)
 | 
							cl.SSH = fmt.Sprintf("ssh://%s@%s/%s/%s.git", sshUser, sshDomain, repo.OwnerName, repoName)
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		cl.SSH = fmt.Sprintf("%s@%s:%s/%s.git", sshUser, setting.SSH.Domain, repo.OwnerName, repoName)
 | 
							cl.SSH = fmt.Sprintf("%s@%s:%s/%s.git", sshUser, sshDomain, repo.OwnerName, repoName)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	cl.HTTPS = ComposeHTTPSCloneURL(repo.OwnerName, repoName)
 | 
						cl.HTTPS = ComposeHTTPSCloneURL(repo.OwnerName, repoName)
 | 
				
			||||||
	return cl
 | 
						return cl
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -626,8 +626,10 @@ func NewContext() {
 | 
				
			|||||||
	StaticURLPrefix = strings.TrimSuffix(sec.Key("STATIC_URL_PREFIX").MustString(AppSubURL), "/")
 | 
						StaticURLPrefix = strings.TrimSuffix(sec.Key("STATIC_URL_PREFIX").MustString(AppSubURL), "/")
 | 
				
			||||||
	AppSubURLDepth = strings.Count(AppSubURL, "/")
 | 
						AppSubURLDepth = strings.Count(AppSubURL, "/")
 | 
				
			||||||
	// Check if Domain differs from AppURL domain than update it to AppURL's domain
 | 
						// Check if Domain differs from AppURL domain than update it to AppURL's domain
 | 
				
			||||||
	// TODO: Can be replaced with url.Hostname() when minimal GoLang version is 1.8
 | 
						urlHostname, _, err := net.SplitHostPort(appURL.Host)
 | 
				
			||||||
	urlHostname := strings.SplitN(appURL.Host, ":", 2)[0]
 | 
						if err != nil {
 | 
				
			||||||
 | 
							log.Fatal("Invalid host in ROOT_URL '%s': %s", appURL.Host, err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	if urlHostname != Domain && net.ParseIP(urlHostname) == nil {
 | 
						if urlHostname != Domain && net.ParseIP(urlHostname) == nil {
 | 
				
			||||||
		Domain = urlHostname
 | 
							Domain = urlHostname
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -643,11 +645,10 @@ func NewContext() {
 | 
				
			|||||||
	default:
 | 
						default:
 | 
				
			||||||
		defaultLocalURL = string(Protocol) + "://"
 | 
							defaultLocalURL = string(Protocol) + "://"
 | 
				
			||||||
		if HTTPAddr == "0.0.0.0" {
 | 
							if HTTPAddr == "0.0.0.0" {
 | 
				
			||||||
			defaultLocalURL += "localhost"
 | 
								defaultLocalURL += net.JoinHostPort("localhost", HTTPPort) + "/"
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			defaultLocalURL += HTTPAddr
 | 
								defaultLocalURL += net.JoinHostPort(HTTPAddr, HTTPPort) + "/"
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		defaultLocalURL += ":" + HTTPPort + "/"
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	LocalURL = sec.Key("LOCAL_ROOT_URL").MustString(defaultLocalURL)
 | 
						LocalURL = sec.Key("LOCAL_ROOT_URL").MustString(defaultLocalURL)
 | 
				
			||||||
	RedirectOtherPort = sec.Key("REDIRECT_OTHER_PORT").MustBool(false)
 | 
						RedirectOtherPort = sec.Key("REDIRECT_OTHER_PORT").MustBool(false)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user