mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 08:30:25 +08:00 
			
		
		
		
	Refactor and simplify redirect to url (#3674)
This commit is contained in:
		
				
					committed by
					
						
						Kim "BKC" Carlbäcker
					
				
			
			
				
	
			
			
			
						parent
						
							a2a49c93c7
						
					
				
				
					commit
					7b2b900e13
				
			@@ -9,6 +9,7 @@ import (
 | 
			
		||||
	"html/template"
 | 
			
		||||
	"io"
 | 
			
		||||
	"net/http"
 | 
			
		||||
	"net/url"
 | 
			
		||||
	"path"
 | 
			
		||||
	"strings"
 | 
			
		||||
	"time"
 | 
			
		||||
@@ -75,6 +76,26 @@ func (ctx *Context) HasValue(name string) bool {
 | 
			
		||||
	return ok
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// RedirectToFirst redirects to first not empty URL
 | 
			
		||||
func (ctx *Context) RedirectToFirst(location ...string) {
 | 
			
		||||
	for _, loc := range location {
 | 
			
		||||
		if len(loc) == 0 {
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		u, err := url.Parse(loc)
 | 
			
		||||
		if err != nil || (u.Scheme != "" && !strings.HasPrefix(strings.ToLower(loc), strings.ToLower(setting.AppURL))) {
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		ctx.Redirect(loc)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	ctx.Redirect(setting.AppSubURL + "/")
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// HTML calls Context.HTML and converts template name to string.
 | 
			
		||||
func (ctx *Context) HTML(status int, name base.TplName) {
 | 
			
		||||
	log.Debug("Template: %s", name)
 | 
			
		||||
 
 | 
			
		||||
@@ -307,11 +307,7 @@ func Action(ctx *context.Context) {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	redirectTo := ctx.Query("redirect_to")
 | 
			
		||||
	if len(redirectTo) == 0 {
 | 
			
		||||
		redirectTo = ctx.Repo.RepoLink
 | 
			
		||||
	}
 | 
			
		||||
	ctx.Redirect(redirectTo)
 | 
			
		||||
	ctx.RedirectToFirst(ctx.Query("redirect_to"), ctx.Repo.RepoLink)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Download download an archive of a repository
 | 
			
		||||
 
 | 
			
		||||
@@ -93,12 +93,8 @@ func checkAutoLogin(ctx *context.Context) bool {
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if isSucceed {
 | 
			
		||||
		if len(redirectTo) > 0 {
 | 
			
		||||
			ctx.SetCookie("redirect_to", "", -1, setting.AppSubURL)
 | 
			
		||||
			ctx.Redirect(redirectTo)
 | 
			
		||||
		} else {
 | 
			
		||||
			ctx.Redirect(setting.AppSubURL + string(setting.LandingPageURL))
 | 
			
		||||
		}
 | 
			
		||||
		ctx.SetCookie("redirect_to", "", -1, setting.AppSubURL)
 | 
			
		||||
		ctx.RedirectToFirst(redirectTo, setting.AppSubURL+string(setting.LandingPageURL))
 | 
			
		||||
		return true
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -350,7 +346,7 @@ func handleSignInFull(ctx *context.Context, u *models.User, remember bool, obeyR
 | 
			
		||||
	if redirectTo, _ := url.QueryUnescape(ctx.GetCookie("redirect_to")); len(redirectTo) > 0 {
 | 
			
		||||
		ctx.SetCookie("redirect_to", "", -1, setting.AppSubURL)
 | 
			
		||||
		if obeyRedirect {
 | 
			
		||||
			ctx.Redirect(redirectTo)
 | 
			
		||||
			ctx.RedirectToFirst(redirectTo)
 | 
			
		||||
		}
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
@@ -439,7 +435,7 @@ func handleOAuth2SignIn(u *models.User, gothUser goth.User, ctx *context.Context
 | 
			
		||||
 | 
			
		||||
			if redirectTo, _ := url.QueryUnescape(ctx.GetCookie("redirect_to")); len(redirectTo) > 0 {
 | 
			
		||||
				ctx.SetCookie("redirect_to", "", -1, setting.AppSubURL)
 | 
			
		||||
				ctx.Redirect(redirectTo)
 | 
			
		||||
				ctx.RedirectToFirst(redirectTo)
 | 
			
		||||
				return
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -50,12 +50,8 @@ func SignInOpenID(ctx *context.Context) {
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if isSucceed {
 | 
			
		||||
		if len(redirectTo) > 0 {
 | 
			
		||||
			ctx.SetCookie("redirect_to", "", -1, setting.AppSubURL)
 | 
			
		||||
			ctx.Redirect(redirectTo)
 | 
			
		||||
		} else {
 | 
			
		||||
			ctx.Redirect(setting.AppSubURL + "/")
 | 
			
		||||
		}
 | 
			
		||||
		ctx.SetCookie("redirect_to", "", -1, setting.AppSubURL)
 | 
			
		||||
		ctx.RedirectToFirst(redirectTo)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -271,9 +271,5 @@ func Action(ctx *context.Context) {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	redirectTo := ctx.Query("redirect_to")
 | 
			
		||||
	if len(redirectTo) == 0 {
 | 
			
		||||
		redirectTo = u.HomeLink()
 | 
			
		||||
	}
 | 
			
		||||
	ctx.Redirect(redirectTo)
 | 
			
		||||
	ctx.RedirectToFirst(ctx.Query("redirect_to"), u.HomeLink())
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user