コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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)));
        }
コード例 #4
0
        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 }));
        }