From 9fc68b680feb49071c6c348be7701f1c79f5181d Mon Sep 17 00:00:00 2001
From: yp05327 <576951401@qq.com>
Date: Sat, 12 Aug 2023 16:02:22 +0900
Subject: [PATCH] Fix 404 error when remove self from an organization (#26362)

Same to #24322

Not only `leave` action but also `remove` action should check whether
user still belongs to the org.
---
 routers/web/org/teams.go | 32 ++++++++++++++++----------------
 1 file changed, 16 insertions(+), 16 deletions(-)

diff --git a/routers/web/org/teams.go b/routers/web/org/teams.go
index 196d3e9bf0..3b07bba713 100644
--- a/routers/web/org/teams.go
+++ b/routers/web/org/teams.go
@@ -86,18 +86,7 @@ func TeamsAction(ctx *context.Context) {
 				return
 			}
 		}
-
-		redirect := ctx.Org.OrgLink + "/teams/"
-		if isOrgMember, err := org_model.IsOrganizationMember(ctx, ctx.Org.Organization.ID, ctx.Doer.ID); err != nil {
-			ctx.ServerError("IsOrganizationMember", err)
-			return
-		} else if !isOrgMember {
-			redirect = setting.AppSubURL + "/"
-		}
-		ctx.JSON(http.StatusOK,
-			map[string]any{
-				"redirect": redirect,
-			})
+		checkIsOrgMemberAndRedirect(ctx, ctx.Org.OrgLink+"/teams/")
 		return
 	case "remove":
 		if !ctx.Org.IsOwner {
@@ -124,10 +113,7 @@ func TeamsAction(ctx *context.Context) {
 				return
 			}
 		}
-		ctx.JSON(http.StatusOK,
-			map[string]any{
-				"redirect": ctx.Org.OrgLink + "/teams/" + url.PathEscape(ctx.Org.Team.LowerName),
-			})
+		checkIsOrgMemberAndRedirect(ctx, ctx.Org.OrgLink+"/teams/"+url.PathEscape(ctx.Org.Team.LowerName))
 		return
 	case "add":
 		if !ctx.Org.IsOwner {
@@ -217,6 +203,20 @@ func TeamsAction(ctx *context.Context) {
 	}
 }
 
+func checkIsOrgMemberAndRedirect(ctx *context.Context, defaultRedirect string) {
+	if isOrgMember, err := org_model.IsOrganizationMember(ctx, ctx.Org.Organization.ID, ctx.Doer.ID); err != nil {
+		ctx.ServerError("IsOrganizationMember", err)
+		return
+	} else if !isOrgMember {
+		if ctx.Org.Organization.Visibility.IsPrivate() {
+			defaultRedirect = setting.AppSubURL + "/"
+		} else {
+			defaultRedirect = ctx.Org.Organization.HomeLink()
+		}
+	}
+	ctx.JSONRedirect(defaultRedirect)
+}
+
 // TeamsRepoAction operate team's repository
 func TeamsRepoAction(ctx *context.Context) {
 	if !ctx.Org.IsOwner {