From 80696def4ae90ed58b8e3132bd31066c369eb456 Mon Sep 17 00:00:00 2001 From: lng2020 Date: Mon, 18 Sep 2023 13:30:22 +0800 Subject: [PATCH 1/3] fix 500 error when deleting user --- routers/web/user/setting/account.go | 4 ++-- tests/integration/delete_user_test.go | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/routers/web/user/setting/account.go b/routers/web/user/setting/account.go index 5c14f3ad4b522..68036d2b76790 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,9 +237,8 @@ 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) } else { ctx.ServerError("UserSignIn", err) diff --git a/tests/integration/delete_user_test.go b/tests/integration/delete_user_test.go index 806b87dc4cef4..5f125eee0a69c 100644 --- a/tests/integration/delete_user_test.go +++ b/tests/integration/delete_user_test.go @@ -14,7 +14,9 @@ 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/contexttest" "code.gitea.io/gitea/tests" + "github.com/stretchr/testify/assert" ) func assertUserDeleted(t *testing.T, userID int64) { @@ -58,3 +60,18 @@ 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") + urlStr := fmt.Sprintf("/user/settings/account/delete?password=%s", "wrongpassword") + req := NewRequestWithValues(t, "POST", urlStr, map[string]string{ + "_csrf": csrf, + }) + resp := session.MakeRequest(t, req, http.StatusOK) + htmlDoc := NewHTMLParser(t, resp.Body) + flashErrMsg := htmlDoc.doc.Find("#ui negative message flash-message flash-error").Text() + ctx, _ := contexttest.MockContext(t, "/usr/settings/accout") + assert.Equal(t, ctx.Tr("form.enterred_invalid_password"), flashErrMsg) +} From a718889e746a73b0fac7a01ad7a57914169ffbda Mon Sep 17 00:00:00 2001 From: lng2020 Date: Mon, 18 Sep 2023 16:31:18 +0800 Subject: [PATCH 2/3] fix --- routers/web/user/setting/account.go | 3 ++- tests/integration/delete_user_test.go | 15 ++++++--------- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/routers/web/user/setting/account.go b/routers/web/user/setting/account.go index 68036d2b76790..dbe2d049c1c04 100644 --- a/routers/web/user/setting/account.go +++ b/routers/web/user/setting/account.go @@ -239,7 +239,8 @@ func DeleteAccount(ctx *context.Context) { if _, _, err := auth.UserSignIn(ctx, ctx.Doer.Name, ctx.FormString("password")); err != nil { 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 5f125eee0a69c..3156264413f43 100644 --- a/tests/integration/delete_user_test.go +++ b/tests/integration/delete_user_test.go @@ -14,7 +14,7 @@ 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/contexttest" + "code.gitea.io/gitea/modules/test" "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) @@ -65,13 +65,10 @@ func TestUserDeleteAccountWithWrongPassword(t *testing.T) { defer tests.PrepareTestEnv(t)() session := loginUser(t, "user8") csrf := GetCSRF(t, session, "/user/settings/account") - urlStr := fmt.Sprintf("/user/settings/account/delete?password=%s", "wrongpassword") - req := NewRequestWithValues(t, "POST", urlStr, map[string]string{ - "_csrf": csrf, + req := NewRequestWithValues(t, "POST", "/user/settings/account/delete", map[string]string{ + "_csrf": csrf, + "password": "wrongpassword", }) - resp := session.MakeRequest(t, req, http.StatusOK) - htmlDoc := NewHTMLParser(t, resp.Body) - flashErrMsg := htmlDoc.doc.Find("#ui negative message flash-message flash-error").Text() - ctx, _ := contexttest.MockContext(t, "/usr/settings/accout") - assert.Equal(t, ctx.Tr("form.enterred_invalid_password"), flashErrMsg) + resp := session.MakeRequest(t, req, http.StatusSeeOther) + assert.Equal(t, "/user/settings/account", test.RedirectURL(resp)) } From e07444bbc7d9fd63ac445401438d99b8da5507a1 Mon Sep 17 00:00:00 2001 From: lng2020 Date: Mon, 18 Sep 2023 16:58:32 +0800 Subject: [PATCH 3/3] fix lint --- tests/integration/delete_user_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/integration/delete_user_test.go b/tests/integration/delete_user_test.go index 3156264413f43..f09ea7c9793e4 100644 --- a/tests/integration/delete_user_test.go +++ b/tests/integration/delete_user_test.go @@ -16,6 +16,7 @@ import ( user_model "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/modules/test" "code.gitea.io/gitea/tests" + "github.com/stretchr/testify/assert" )