public async Task <bool> ReverseIdentityChanges(AccountIdentityVM oldIdentity) { _logger.LogInformation("AccountService.ReverseIdentityChanges - Service starts."); var dbAccount = await _dbContext.Hidrogenian.FindAsync(oldIdentity.Id); dbAccount.Email = oldIdentity.Email; dbAccount.EmailConfirmed = oldIdentity.EmailConfirmed; dbAccount.UserName = oldIdentity.UserName; dbAccount.PhoneNumber = oldIdentity.PhoneNumber; dbAccount.PhoneNumberConfirmed = oldIdentity.PhoneConfirmed; dbAccount.RecoveryToken = null; dbAccount.TokenSetOn = null; _dbContext.Hidrogenian.Update(dbAccount); try { await _dbContext.SaveChangesAsync(); } catch (Exception e) { _logger.LogInformation("AccountService.ReverseIdentityChanges - Error: " + e); return(false); } return(true); }
private List <int> VerifyIdentityData(AccountIdentityVM identity) { _logger.LogInformation("AccountController.VerifyIdentityData - Service runs internally."); var errors = identity.VerifyEmail(); errors.AddRange(identity.VerifyUserName()); errors.AddRange(identity.VerifyPhoneNumber()); return(errors); }
public async Task <KeyValuePair <bool, KeyValuePair <AccountIdentityVM, AccountIdentityVM>?> > UpdateIdentityForHidrogenian(AccountIdentityVM identity) { _logger.LogInformation("AccountService.UpdateIdentityForHidrogenian - Service starts."); var account = await _dbContext.Hidrogenian.FindAsync(); if (account == null) { return(new KeyValuePair <bool, KeyValuePair <AccountIdentityVM, AccountIdentityVM>?>(false, null)); } AccountIdentityVM oldIdentity = account; if (account.Email != identity.Email) { account.Email = identity.Email; account.EmailConfirmed = false; identity.EmailConfirmed = false; } if (account.PhoneNumber != identity.PhoneNumber) { account.PhoneNumber = identity.PhoneNumber; account.PhoneNumberConfirmed = false; identity.PhoneConfirmed = false; } account.UserName = identity.UserName; _dbContext.Hidrogenian.Update(account); try { await _dbContext.SaveChangesAsync(); } catch (Exception e) { _logger.LogError("AccountService.UpdateIdentityForHidrogenian - Error: " + e); return(new KeyValuePair <bool, KeyValuePair <AccountIdentityVM, AccountIdentityVM>?>(true, null)); } return(new KeyValuePair <bool, KeyValuePair <AccountIdentityVM, AccountIdentityVM>?>(true, new KeyValuePair <AccountIdentityVM, AccountIdentityVM>(oldIdentity, identity))); }
public async Task <JsonResult> UpdateAccountIdentity(AccountIdentityVM identity) { _logger.LogInformation("AccountController.UpdateAccountIdentity - hidrogenianId=" + identity.Id); var validation = await _reCaptchaService.IsHumanRegistration(identity.CaptchaToken); if (!validation.Result) { return(new JsonResult(validation)); } var verification = VerifyIdentityData(identity); if (verification.Count != 0) { var messages = identity.GenerateErrorMessages(verification); return(new JsonResult(new { Result = RESULTS.FAILED, Message = messages })); } var(key, value) = await _accountService.UpdateIdentityForHidrogenian(identity); if (!key) { return(new JsonResult(new { Result = RESULTS.FAILED, Message = "Account not found with the given data. Please try again." })); } if (value == null) { return(new JsonResult(new { Result = RESULTS.FAILED, Message = "An error occurred while attempting to update your account. Please try again." })); } var oldIdentity = value.Value.Key; var newIdentity = value.Value.Value; var hidrogenian = new HidrogenianVM { Id = newIdentity.Id, Token = _authService.GenerateRandomToken() }; if (!newIdentity.EmailConfirmed) { if (await _userService.SetAccountConfirmationToken(hidrogenian)) { var profile = await _profileService.GetPublicProfileFor(newIdentity.Id); string emailTemplate; using (var reader = File.OpenText(PROJECT_FOLDER + @"HtmlTemplates/EmailChanged.html")) { emailTemplate = await reader.ReadToEndAsync(); }; emailTemplate = emailTemplate.Replace("[HidrogenianName]", profile.FullName); emailTemplate = emailTemplate.Replace("[HidrogenianEmail]", newIdentity.Email); emailTemplate = emailTemplate.Replace("[CONFIRM-TOKEN]", hidrogenian.Token); var emailChangedEmail = new EmailParamVM { ReceiverName = profile.FullName, ReceiverAddress = hidrogenian.Email, Subject = "Hidrogen - Confirm your email", Body = emailTemplate }; if (await _emailService.SendEmail(emailChangedEmail)) { await _accountService.ReverseIdentityChanges(oldIdentity); return(new JsonResult(new { Result = RESULTS.INTERRUPTED, Message = "The confirmation email was failed to send. Your changes was not applied. Please try again." })); } } } if (!string.IsNullOrEmpty(newIdentity.PhoneNumber) && !newIdentity.PhoneConfirmed) { //Send SMS to confirm phone number } return(new JsonResult(new { Result = RESULTS.SUCCESS, Message = newIdentity })); }