-
-
Notifications
You must be signed in to change notification settings - Fork 5.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Support for email addresses containing uppercase characters when acti…
…vating user account (#32998) Fix #32807 --------- Co-authored-by: wxiaoguang <[email protected]>
- Loading branch information
1 parent
3c00e89
commit 2d1a171
Showing
7 changed files
with
61 additions
and
35 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -274,7 +274,8 @@ func TestOrgTeamEmailInviteRedirectsNewUserWithActivation(t *testing.T) { | |
user, err := user_model.GetUserByName(db.DefaultContext, "doesnotexist") | ||
assert.NoError(t, err) | ||
|
||
activateURL := fmt.Sprintf("/user/activate?code=%s", user.GenerateEmailActivateCode("[email protected]")) | ||
activationCode := user_model.GenerateUserTimeLimitCode(&user_model.TimeLimitCodeOptions{Purpose: user_model.TimeLimitCodeActivateAccount}, user) | ||
activateURL := fmt.Sprintf("/user/activate?code=%s", activationCode) | ||
req = NewRequestWithValues(t, "POST", activateURL, map[string]string{ | ||
"password": "examplePassword!1", | ||
}) | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -9,6 +9,7 @@ import ( | |
"strings" | ||
"testing" | ||
|
||
"code.gitea.io/gitea/models/db" | ||
"code.gitea.io/gitea/models/unittest" | ||
user_model "code.gitea.io/gitea/models/user" | ||
"code.gitea.io/gitea/modules/setting" | ||
|
@@ -99,34 +100,39 @@ func TestSignupEmailActive(t *testing.T) { | |
|
||
// try to sign up and send the activation email | ||
req := NewRequestWithValues(t, "POST", "/user/sign_up", map[string]string{ | ||
"user_name": "test-user-1", | ||
"email": "email[email protected]", | ||
"user_name": "Test-User-1", | ||
"email": "EmAiL[email protected]", | ||
"password": "password1", | ||
"retype": "password1", | ||
}) | ||
resp := MakeRequest(t, req, http.StatusOK) | ||
assert.Contains(t, resp.Body.String(), `A new confirmation email has been sent to <b>email[email protected]</b>.`) | ||
assert.Contains(t, resp.Body.String(), `A new confirmation email has been sent to <b>EmAiL[email protected]</b>.`) | ||
|
||
// access "user/activate" means trying to re-send the activation email | ||
session := loginUserWithPassword(t, "test-user-1", "password1") | ||
resp = session.MakeRequest(t, NewRequest(t, "GET", "/user/activate"), http.StatusOK) | ||
assert.Contains(t, resp.Body.String(), "You have already requested an activation email recently") | ||
|
||
// access anywhere else will see a "Activate Your Account" prompt, and there is a chance to change email | ||
// access anywhere else will see an "Activate Your Account" prompt, and there is a chance to change email | ||
resp = session.MakeRequest(t, NewRequest(t, "GET", "/user/issues"), http.StatusOK) | ||
assert.Contains(t, resp.Body.String(), `<input id="change-email" name="change_email" `) | ||
|
||
// post to "user/activate" with a new email | ||
session.MakeRequest(t, NewRequestWithValues(t, "POST", "/user/activate", map[string]string{"change_email": "[email protected]"}), http.StatusSeeOther) | ||
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "test-user-1"}) | ||
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "Test-User-1"}) | ||
assert.Equal(t, "[email protected]", user.Email) | ||
email := unittest.AssertExistsAndLoadBean(t, &user_model.EmailAddress{Email: "[email protected]"}) | ||
assert.False(t, email.IsActivated) | ||
assert.True(t, email.IsPrimary) | ||
|
||
// generate an activation code from lower-cased email | ||
activationCode := user_model.GenerateUserTimeLimitCode(&user_model.TimeLimitCodeOptions{Purpose: user_model.TimeLimitCodeActivateAccount}, user) | ||
// and update the user email to case-sensitive, it shouldn't affect the verification later | ||
_, _ = db.Exec(db.DefaultContext, "UPDATE `user` SET email=? WHERE id=?", "[email protected]", user.ID) | ||
user = unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "Test-User-1"}) | ||
assert.Equal(t, "[email protected]", user.Email) | ||
|
||
// access "user/activate" with a valid activation code, then get the "verify password" page | ||
user = unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "test-user-1"}) | ||
activationCode := user.GenerateEmailActivateCode(user.Email) | ||
resp = session.MakeRequest(t, NewRequest(t, "GET", "/user/activate?code="+activationCode), http.StatusOK) | ||
assert.Contains(t, resp.Body.String(), `<input id="verify-password"`) | ||
|
||
|
@@ -138,7 +144,7 @@ func TestSignupEmailActive(t *testing.T) { | |
resp = session.MakeRequest(t, req, http.StatusOK) | ||
assert.Contains(t, resp.Body.String(), `Your password does not match`) | ||
assert.Contains(t, resp.Body.String(), `<input id="verify-password"`) | ||
user = unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "test-user-1"}) | ||
user = unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "Test-User-1"}) | ||
assert.False(t, user.IsActive) | ||
|
||
// then use a correct password, the user should be activated | ||
|
@@ -148,6 +154,6 @@ func TestSignupEmailActive(t *testing.T) { | |
}) | ||
resp = session.MakeRequest(t, req, http.StatusSeeOther) | ||
assert.Equal(t, "/", test.RedirectURL(resp)) | ||
user = unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "test-user-1"}) | ||
user = unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "Test-User-1"}) | ||
assert.True(t, user.IsActive) | ||
} |