mirror of
https://github.com/go-gitea/gitea
synced 2024-12-23 00:54:28 +00:00
Check if email is used when updating user (#21289)
Fix #21075 When updating user data should check if email is used by other users
This commit is contained in:
parent
b7309b8ccb
commit
1d3095b718
@ -893,14 +893,19 @@ func UpdateUser(ctx context.Context, u *User, changePrimaryEmail bool, cols ...s
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if !has {
|
if has && emailAddress.UID != u.ID {
|
||||||
// 1. Update old primary email
|
return ErrEmailAlreadyUsed{
|
||||||
if _, err = e.Where("uid=? AND is_primary=?", u.ID, true).Cols("is_primary").Update(&EmailAddress{
|
Email: u.Email,
|
||||||
IsPrimary: false,
|
|
||||||
}); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
// 1. Update old primary email
|
||||||
|
if _, err = e.Where("uid=? AND is_primary=?", u.ID, true).Cols("is_primary").Update(&EmailAddress{
|
||||||
|
IsPrimary: false,
|
||||||
|
}); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if !has {
|
||||||
emailAddress.Email = u.Email
|
emailAddress.Email = u.Email
|
||||||
emailAddress.UID = u.ID
|
emailAddress.UID = u.ID
|
||||||
emailAddress.IsActivated = true
|
emailAddress.IsActivated = true
|
||||||
|
@ -302,10 +302,26 @@ func TestUpdateUser(t *testing.T) {
|
|||||||
user = unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
|
user = unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
|
||||||
assert.True(t, user.KeepActivityPrivate)
|
assert.True(t, user.KeepActivityPrivate)
|
||||||
|
|
||||||
|
newEmail := "new_" + user.Email
|
||||||
|
user.Email = newEmail
|
||||||
|
assert.NoError(t, user_model.UpdateUser(db.DefaultContext, user, true))
|
||||||
|
user = unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
|
||||||
|
assert.Equal(t, newEmail, user.Email)
|
||||||
|
|
||||||
user.Email = "no mail@mail.org"
|
user.Email = "no mail@mail.org"
|
||||||
assert.Error(t, user_model.UpdateUser(db.DefaultContext, user, true))
|
assert.Error(t, user_model.UpdateUser(db.DefaultContext, user, true))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestUpdateUserEmailAlreadyUsed(t *testing.T) {
|
||||||
|
assert.NoError(t, unittest.PrepareTestDatabase())
|
||||||
|
user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
|
||||||
|
user3 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 3})
|
||||||
|
|
||||||
|
user2.Email = user3.Email
|
||||||
|
err := user_model.UpdateUser(db.DefaultContext, user2, true)
|
||||||
|
assert.True(t, user_model.IsErrEmailAlreadyUsed(err))
|
||||||
|
}
|
||||||
|
|
||||||
func TestNewUserRedirect(t *testing.T) {
|
func TestNewUserRedirect(t *testing.T) {
|
||||||
// redirect to a completely new name
|
// redirect to a completely new name
|
||||||
assert.NoError(t, unittest.PrepareTestDatabase())
|
assert.NoError(t, unittest.PrepareTestDatabase())
|
||||||
|
Loading…
Reference in New Issue
Block a user