예제 #1
0
        /// <summary>
        /// Changes Email
        /// </summary>
        /// <param name="viewModel">Injected <see cref="SecurityEmailChange"/></param>
        /// <returns>Instance of <see cref="Task{ViewApplicationUser}"/></returns>
        public async Task <ViewApplicationUser> ChangeEmail(SecurityEmailChange @viewModel)
        {
            ApplicationUser @applicationUser = await FindApplicationUserByEmail(@viewModel.ApplicationUser.Email);

            IdentityResult @identityResult = await UserManager.ChangeEmailAsync(@applicationUser, @viewModel.NewEmail, await UserManager.GenerateChangeEmailTokenAsync(@applicationUser, @viewModel.NewEmail));

            if (@identityResult.Succeeded)
            {
                @applicationUser.ApplicationUserTokens.Add(new ApplicationUserToken
                {
                    Name            = Guid.NewGuid().ToString(),
                    LoginProvider   = JwtSettings.Value.JwtIssuer,
                    ApplicationUser = @applicationUser,
                    UserId          = @applicationUser.Id,
                    Value           = TokenService.WriteJwtToken(TokenService.GenerateJwtToken(@applicationUser))
                });

                // Log
                string @logData = @applicationUser.GetType().Name
                                  + " with Email "
                                  + @applicationUser.Email
                                  + " restored its Email at "
                                  + DateTime.Now.ToShortTimeString();

                Logger.WriteEmailRestoredLog(@logData);

                return(Mapper.Map <ViewApplicationUser>(@applicationUser));
            }
            else
            {
                throw new Exception("Security Error");
            }
        }
        public async Task ChangeEmail()
        {
            SecurityEmailChange viewModel = new SecurityEmailChange()
            {
                NewEmail        = "*****@*****.**",
                ApplicationUser = new ViewApplicationUser
                {
                    Id    = Context.ApplicationUser.FirstOrDefault(x => x.Email == "*****@*****.**").Id,
                    Email = Context.ApplicationUser.FirstOrDefault(x => x.Email == "*****@*****.**").Email
                }
            };

            await Service.ChangeEmail(viewModel);

            Assert.Pass();
        }