mirror of
				https://github.com/go-gitea/gitea
				synced 2025-11-04 05:18:25 +00:00 
			
		
		
		
	Add user blocking (#29028)
Fixes #17453 This PR adds the abbility to block a user from a personal account or organization to restrict how the blocked user can interact with the blocker. The docs explain what's the consequence of blocking a user. Screenshots:    --------- Co-authored-by: Lauris BH <lauris@nix.lv>
This commit is contained in:
		@@ -47,6 +47,7 @@ import (
 | 
			
		||||
	notify_service "code.gitea.io/gitea/services/notify"
 | 
			
		||||
	pull_service "code.gitea.io/gitea/services/pull"
 | 
			
		||||
	repo_service "code.gitea.io/gitea/services/repository"
 | 
			
		||||
	user_service "code.gitea.io/gitea/services/user"
 | 
			
		||||
 | 
			
		||||
	"github.com/gobwas/glob"
 | 
			
		||||
)
 | 
			
		||||
@@ -308,6 +309,8 @@ func ForkPost(ctx *context.Context) {
 | 
			
		||||
			ctx.RenderWithErr(ctx.Tr("repo.form.name_reserved", err.(db.ErrNameReserved).Name), tplFork, &form)
 | 
			
		||||
		case db.IsErrNamePatternNotAllowed(err):
 | 
			
		||||
			ctx.RenderWithErr(ctx.Tr("repo.form.name_pattern_not_allowed", err.(db.ErrNamePatternNotAllowed).Pattern), tplFork, &form)
 | 
			
		||||
		case errors.Is(err, user_model.ErrBlockedUser):
 | 
			
		||||
			ctx.RenderWithErr(ctx.Tr("repo.fork.blocked_user"), tplFork, form)
 | 
			
		||||
		default:
 | 
			
		||||
			ctx.ServerError("ForkPost", err)
 | 
			
		||||
		}
 | 
			
		||||
@@ -1065,6 +1068,10 @@ func viewPullFiles(ctx *context.Context, specifiedStartCommit, specifiedEndCommi
 | 
			
		||||
	}
 | 
			
		||||
	upload.AddUploadContext(ctx, "comment")
 | 
			
		||||
 | 
			
		||||
	ctx.Data["CanBlockUser"] = func(blocker, blockee *user_model.User) bool {
 | 
			
		||||
		return user_service.CanBlockUser(ctx, ctx.Doer, blocker, blockee)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	ctx.HTML(http.StatusOK, tplPullFiles)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -1483,7 +1490,6 @@ func CompareAndPullRequestPost(ctx *context.Context) {
 | 
			
		||||
	if err := pull_service.NewPullRequest(ctx, repo, pullIssue, labelIDs, attachments, pullRequest, assigneeIDs); err != nil {
 | 
			
		||||
		if repo_model.IsErrUserDoesNotHaveAccessToRepo(err) {
 | 
			
		||||
			ctx.Error(http.StatusBadRequest, "UserDoesNotHaveAccessToRepo", err.Error())
 | 
			
		||||
			return
 | 
			
		||||
		} else if git.IsErrPushRejected(err) {
 | 
			
		||||
			pushrejErr := err.(*git.ErrPushRejected)
 | 
			
		||||
			message := pushrejErr.Message
 | 
			
		||||
@@ -1501,9 +1507,17 @@ func CompareAndPullRequestPost(ctx *context.Context) {
 | 
			
		||||
				return
 | 
			
		||||
			}
 | 
			
		||||
			ctx.JSONError(flashError)
 | 
			
		||||
			return
 | 
			
		||||
		} else if errors.Is(err, user_model.ErrBlockedUser) {
 | 
			
		||||
			flashError, err := ctx.RenderToHTML(tplAlertDetails, map[string]any{
 | 
			
		||||
				"Message": ctx.Tr("repo.pulls.push_rejected"),
 | 
			
		||||
				"Summary": ctx.Tr("repo.pulls.new.blocked_user"),
 | 
			
		||||
			})
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				ctx.ServerError("CompareAndPullRequest.HTMLString", err)
 | 
			
		||||
				return
 | 
			
		||||
			}
 | 
			
		||||
			ctx.JSONError(flashError)
 | 
			
		||||
		}
 | 
			
		||||
		ctx.ServerError("NewPullRequest", err)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user