Profile email change should check email's availability

This commit is contained in:
nicolas.dorier
2021-02-12 12:21:29 +09:00
parent f4fa7c927c
commit 2e864c32fa
6 changed files with 74 additions and 34 deletions

View File

@@ -82,7 +82,6 @@ namespace BTCPayServer.Controllers
{
Username = user.UserName,
Email = user.Email,
PhoneNumber = user.PhoneNumber,
IsEmailConfirmed = user.EmailConfirmed
};
return View(model);
@@ -97,8 +96,6 @@ namespace BTCPayServer.Controllers
return View(model);
}
bool needUpdate = false;
var user = await _userManager.GetUserAsync(User);
if (user == null)
{
@@ -108,33 +105,22 @@ namespace BTCPayServer.Controllers
var email = user.Email;
if (model.Email != email)
{
if (!(await _userManager.FindByEmailAsync(model.Email) is null))
{
TempData[WellKnownTempData.ErrorMessage] = "This email already exists";
return RedirectToAction(nameof(Index));
}
var setUserResult = await _userManager.SetUserNameAsync(user, model.Email);
if (!setUserResult.Succeeded)
{
throw new ApplicationException($"Unexpected error occurred setting email for user with ID '{user.Id}'.");
}
var setEmailResult = await _userManager.SetEmailAsync(user, model.Email);
if (!setEmailResult.Succeeded)
{
throw new ApplicationException($"Unexpected error occurred setting email for user with ID '{user.Id}'.");
}
await _userManager.SetUserNameAsync(user, model.Username);
}
var phoneNumber = user.PhoneNumber;
if (model.PhoneNumber != phoneNumber)
{
var setPhoneResult = await _userManager.SetPhoneNumberAsync(user, model.PhoneNumber);
if (!setPhoneResult.Succeeded)
{
throw new ApplicationException($"Unexpected error occurred setting phone number for user with ID '{user.Id}'.");
}
}
if (needUpdate)
{
var result = await _userManager.UpdateAsync(user);
if (!result.Succeeded)
{
throw new ApplicationException($"Unexpected error occurred updating user with ID '{user.Id}'.");
}
}
TempData[WellKnownTempData.SuccessMessage] = "Your profile has been updated";
return RedirectToAction(nameof(Index));
}