public async Task UpdateAccountPasswordAsync(ChangePasswordModel parameters) { if (parameters == null) { throw new ArgumentNullException(nameof(parameters)); } var user = await _userManager.FindByIdAsync(parameters.UserId); if (user == null) { throw new Exception(HESException.GetMessage(HESCode.UserNotFound)); } var isValidPassword = await _userManager.CheckPasswordAsync(user, parameters.OldPassword); if (!isValidPassword) { throw new Exception(HESException.GetMessage(HESCode.IncorrectCurrentPassword)); } var changePasswordResult = await _userManager.ChangePasswordAsync(user, parameters.OldPassword, parameters.NewPassword); if (!changePasswordResult.Succeeded) { throw new Exception(HESException.GetIdentityResultErrors(changePasswordResult.Errors)); } }
public async Task UpdateProfileInfoAsync(UserProfileModel parameters) { var user = await _userManager.FindByIdAsync(parameters.UserId); if (user == null) { throw new HESException(HESCode.UserNotFound); } if (parameters.FullName != user.FullName) { user.FullName = parameters.FullName; var userResult = await _userManager.UpdateAsync(user); if (!userResult.Succeeded) { throw new Exception(HESException.GetIdentityResultErrors(userResult.Errors)); } } if (parameters.PhoneNumber != user.PhoneNumber) { var setPhoneResult = await _userManager.SetPhoneNumberAsync(user, parameters.PhoneNumber); if (!setPhoneResult.Succeeded) { throw new Exception(HESException.GetIdentityResultErrors(setPhoneResult.Errors)); } } }
public async Task ConfirmEmailChangeAsync(UserConfirmEmailChangeModel parameters) { var user = await _userManager.FindByIdAsync(parameters.UserId); if (user == null) { throw new HESException(HESCode.UserNotFound); } using (TransactionScope transactionScope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled)) { // Update FIDO credentials var credentials = await _fidoCredentialsRepository.Query().Where(x => x.Username == user.Email).ToListAsync(); foreach (var item in credentials) { item.UserId = Encoding.UTF8.GetBytes(parameters.Email); item.UserHandle = Encoding.UTF8.GetBytes(parameters.Email); item.Username = parameters.Email; } await _fidoCredentialsRepository.UpdatRangeAsync(credentials); // Change email var changeEmailResult = await _userManager.ChangeEmailAsync(user, parameters.Email, parameters.Code); if (!changeEmailResult.Succeeded) { throw new Exception(HESException.GetIdentityResultErrors(changeEmailResult.Errors)); } // In our UI email and user name are one and the same, so when we update the email we need to update the user name. var setUserNameResult = await _userManager.SetUserNameAsync(user, parameters.Email); if (!setUserNameResult.Succeeded) { throw new Exception(HESException.GetIdentityResultErrors(setUserNameResult.Errors)); } transactionScope.Complete(); } }