]> source.dussan.org Git - gitea.git/commitdiff
Fix 404 error when remove self from an organization (#26362)
authoryp05327 <576951401@qq.com>
Sat, 12 Aug 2023 07:02:22 +0000 (16:02 +0900)
committerGitHub <noreply@github.com>
Sat, 12 Aug 2023 07:02:22 +0000 (07:02 +0000)
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

index 196d3e9bf04037ed9956a427561b0384e997be3b..3b07bba713a802a3718a29d9297ac41aac3b161b 100644 (file)
@@ -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 {