diff --git a/routers/web/user/setting/account.go b/routers/web/user/setting/account.go index 5c14f3ad4b522..dbe2d049c1c04 100644 --- a/routers/web/user/setting/account.go +++ b/routers/web/user/setting/account.go @@ -19,6 +19,7 @@ import ( "code.gitea.io/gitea/modules/timeutil" "code.gitea.io/gitea/modules/web" "code.gitea.io/gitea/services/auth" + "code.gitea.io/gitea/services/auth/source/db" "code.gitea.io/gitea/services/forms" "code.gitea.io/gitea/services/mailer" "code.gitea.io/gitea/services/user" @@ -236,10 +237,10 @@ func DeleteAccount(ctx *context.Context) { ctx.Data["PageIsSettingsAccount"] = true if _, _, err := auth.UserSignIn(ctx, ctx.Doer.Name, ctx.FormString("password")); err != nil { - if user_model.IsErrUserNotExist(err) { + if _, ok := err.(db.ErrUserPasswordInvalid); ok { loadAccountData(ctx) - - ctx.RenderWithErr(ctx.Tr("form.enterred_invalid_password"), tplSettingsAccount, nil) + ctx.Flash.Error(ctx.Tr("form.enterred_invalid_password")) + ctx.Redirect(setting.AppSubURL + "/user/settings/account") } else { ctx.ServerError("UserSignIn", err) } diff --git a/tests/integration/delete_user_test.go b/tests/integration/delete_user_test.go index 806b87dc4cef4..f09ea7c9793e4 100644 --- a/tests/integration/delete_user_test.go +++ b/tests/integration/delete_user_test.go @@ -14,7 +14,10 @@ import ( repo_model "code.gitea.io/gitea/models/repo" "code.gitea.io/gitea/models/unittest" user_model "code.gitea.io/gitea/models/user" + "code.gitea.io/gitea/modules/test" "code.gitea.io/gitea/tests" + + "github.com/stretchr/testify/assert" ) func assertUserDeleted(t *testing.T, userID int64) { @@ -58,3 +61,15 @@ func TestUserDeleteAccountStillOwnRepos(t *testing.T) { // user should not have been deleted, because the user still owns repos unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}) } + +func TestUserDeleteAccountWithWrongPassword(t *testing.T) { + defer tests.PrepareTestEnv(t)() + session := loginUser(t, "user8") + csrf := GetCSRF(t, session, "/user/settings/account") + req := NewRequestWithValues(t, "POST", "/user/settings/account/delete", map[string]string{ + "_csrf": csrf, + "password": "wrongpassword", + }) + resp := session.MakeRequest(t, req, http.StatusSeeOther) + assert.Equal(t, "/user/settings/account", test.RedirectURL(resp)) +}