public async Task <IActionResult> PostResendConfirmEmailMessageAsync(UserEmailDto model)
        {
            try
            {
                var user = await _userManager.FindByEmailAsync(model.Email);

                if (user == null)
                {
                    _logger.LogError(LoggingEvents.GetItemNotFound, "User Not found");
                    return(NotFound("User not found"));
                }

                if (user.EmailConfirmed)
                {
                    _logger.LogError(LoggingEvents.UpdateItemNotFound, "User email is already confirmed");
                    return(Ok());
                }

                var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);

                var url = _urlService.GetConfirmEmailUrl(user.UserName, code);

                var templateData = new { username = user.UserName, url = url };

                // await _emailSender.SendEmailConfirmationEmailAsync(templateData);
                await _emailSender.SendTemplateEmail("d-882e4b133cae40268364c8a929e55ea9", user.Email, templateData);

                return(Ok());
            }
            catch (Exception ex)
            {
                _logger.LogError(LoggingEvents.UpdateItemNotFound, ex, "An error occurred in resend email confirmation.");
                return(BadRequest("An error occurred"));
            }
        }
Beispiel #2
0
        public async Task <UserEmailDto> PutUserEmail(int id, UserEmailDto model)
        {
            var url    = CRMApiUri + "/UserEmail/" + id;
            var result = await PutRequestToApi(url, model);

            return(result);
        }
Beispiel #3
0
        public async Task <UserEmailDto> PostUserEmail(UserEmailDto model)
        {
            var url    = CRMApiUri + "/UserEmail";
            var result = await PostRequestToApi(url, model);

            return(result);
        }
Beispiel #4
0
        public async Task <IActionResult> ResendConfirmationEmail([FromBody] UserEmailDto userEmail)
        {
            try
            {
                if (userEmail == null)
                {
                    return(BadRequest());
                }

                var user = await userManager.FindByEmailAsync(userEmail.Email);

                if (user == null)
                {
                    return(NotFound());
                }
                if (!user.IsEnabled)
                {
                    throw new ApplicationException("Usuario deshabilitado.");
                }

                if (user.EmailConfirmed)
                {
                    throw new ApplicationException("El correo ingresado ya fue confirmado");
                }

                await sendConfirmationEmailService.Send(user.Id, user.Email, "", await userManager.GenerateEmailConfirmationTokenAsync(user));

                return(Ok());
            }
            catch (Exception ex)
            {
                return(StatusCode(StatusCodes.Status500InternalServerError, new { message = ex.Message }));
            }
        }
        public async Task <GenericResponse> ForgotPassword(UserEmailDto userEmailDto)
        {
            try
            {
                var identityUser = await this.dataService.UserManager.FindByEmailAsync(userEmailDto.Email);

                if (identityUser == null)
                {
                    return(GenericResponseBuilder.Success());
                }

                var token = await dataService.UserManager.GeneratePasswordResetTokenAsync(identityUser);

                var configKey     = "UIPageAddresses:ResetPasswordFormPageAddress";
                var emailObject   = GenerateEmailLink(identityUser, configKey, token, "email");
                var passwordEmail = this.mapper.Map <ForgotPasswordEmail>(emailObject);
                var emailSent     = await this.emailProvider.SendForgotPasswordEmail(passwordEmail);

                if (!emailSent)
                {
                    return(GenericResponseBuilder.NoSuccess("Email send failed"));
                }

                return(GenericResponseBuilder.Success());
            }
            catch (Exception ex)
            {
                logger.LogError(string.Format("Error in BLL - ForgotPassword. {0}", ex.Message));
                return(GenericResponseBuilder.NoSuccess(ex.Message.ToString()));
            }
        }
Beispiel #6
0
        public async Task <IActionResult> SendPasswordResetLink([FromBody] UserEmailDto userEmail)
        {
            try
            {
                if (userEmail == null)
                {
                    return(BadRequest());
                }

                var user = await userManager.FindByEmailAsync(userEmail.Email);

                if (user == null)
                {
                    return(NotFound());
                }
                if (!user.IsEnabled)
                {
                    throw new ApplicationException("Usuario deshabilitado.");
                }

                await sendResetPasswordService.Send(user.Id, user.Email, await userManager.GeneratePasswordResetTokenAsync(user));

                return(Ok());
            }
            catch (Exception ex)
            {
                return(StatusCode(StatusCodes.Status500InternalServerError, new { message = ex.Message }));
            }
        }
Beispiel #7
0
        // POST: api/Accounts/forgotpassword
        public async Task <IActionResult> ForgotPassword(
            [FromBody] UserEmailDto userEmailDto)
        {
            var response = await businessLogic.ForgotPassword(userEmailDto);

            if (response.IsSuccessful)
            {
                return(Ok());
            }

            return(BadRequest(new { message = response.ErrorMessage }));
        }
Beispiel #8
0
        public async Task <IActionResult> ResendConfirmationEmail(TUserDtoKey id)
        {
            if (EqualityComparer <TUserDtoKey> .Default.Equals(id, default))
            {
                return(NotFound());
            }
            var userDto = await _identityService.GetUserAsync(id.ToString());

            var emailDto = new UserEmailDto <TUserDtoKey>();

            emailDto.UserId   = id;
            emailDto.UserName = userDto.UserName;
            return(View(emailDto));
        }
Beispiel #9
0
        public async Task <IActionResult> ChangeEmail(int id, [FromBody] UserEmailDto email)
        {
            var userId = int.Parse(this.User.FindFirst(ClaimTypes.NameIdentifier).Value);

            if (userId != id)
            {
                return(Unauthorized());
            }

            var userFromRepo = await _repo.GetUser(id);

            userFromRepo.Email = email.Email;

            if (await _repo.SaveAll())
            {
                return(NoContent());
            }

            return(BadRequest());
        }
Beispiel #10
0
        public async Task PostForgotPasswordAsync_ReturnsOkResult_WhenUserEmailIsNotConfirmed()
        {
            // Arrange
            var mockUserManager = SharedFunctions.InitialiseMockUserManager();

            mockUserManager.Setup(repo => repo.FindByEmailAsync(It.IsAny <string>()))
            .ReturnsAsync(GetValidTestUser(false));

            var controller = new AccountController(_systemClock.Object, _urlService.Object, _emailSender.Object, _logger.Object, mockUserManager.Object);

            var testModel = new UserEmailDto()
            {
            };

            // Act
            var result = await controller.PostForgotPasswordAsync(testModel);

            // Assert
            var objectResult = Assert.IsType <OkResult>(result);

            Assert.Equal(StatusCodes.Status200OK, objectResult.StatusCode);
        }
Beispiel #11
0
        public async Task ResendConfirmEmailMessageAsync_ReturnsOk_WhenSuccessful()
        {
            // Arrange
            var mockUserManager = SharedFunctions.InitialiseMockUserManager();
            var testUser        = GetValidTestUser(false);

            mockUserManager.Setup(repo => repo.FindByEmailAsync(It.IsAny <string>()))
            .ReturnsAsync(testUser);
            var testCode = "myTestCode";

            mockUserManager.Setup(um => um.GenerateEmailConfirmationTokenAsync(It.IsAny <ApplicationUser>()))
            .ReturnsAsync(testCode);

            var config = new ConfigurationBuilder()
                         .AddJsonFile("appsettings.Development.json")
                         .Build();

            var urlService = new UrlService(config);

            var controller = new AccountController(_systemClock.Object, urlService, _emailSender.Object, _logger.Object, mockUserManager.Object);

            var testModel = new UserEmailDto()
            {
            };

            // Act
            var result = await controller.PostResendConfirmEmailMessageAsync(testModel);

            // Assert
            Assert.IsType <OkResult>(result);
            //Assert.NotNull(objectResult);
            //Assert.True(objectResult is OResult);
            //Assert.Equal(StatusCodes.Status200OK, objectResult.StatusCode);

            //var expected = new Uri($"{config["Url:ConfirmEmailUrl"]}?username={testUser.UserName}&code={testCode}");
            //objectResult.Value.Should().BeOfType<Uri>();
            //objectResult.Value.Should().BeEquivalentTo(expected);
        }
        public async Task <IActionResult> PostForgotPasswordAsync(UserEmailDto model)
        {
            try
            {
                var user = await _userManager.FindByEmailAsync(model.Email);

                if (user == null)
                {
                    _logger.LogError(LoggingEvents.GetItemNotFound, $"User with email '{model.Email}' was not found at forgot password");
                    return(Ok()); // user does not exist, but don't reveal that the user does not exist
                }

                if (user.EmailConfirmed == false)
                {
                    _logger.LogError(LoggingEvents.GetItemNotFound, $"Forgot password request when email '{model.Email}' is not confirmed");
                    return(Ok()); // email is not confirmed
                }

                var code = await _userManager.GeneratePasswordResetTokenAsync(user);

                var url = _urlService.GetResetPasswordUrl(code);

                //    message.SetTemplateId("d-37733c23b2eb4c339a011dfadbd42b91");
                //    message.SetTemplateData(new ConfirmEmailDto { Username = accountDetails.Username, Url = accountDetails.Url });

                //var templateData = new ResetPasswordEmailDto { Email = model.Email, Url = url, Username = user.UserName };
                var templateData = new { username = user.UserName, url = url };
                //await _emailSender.SendResetPasswordEmailAsync(templateData);
                await _emailSender.SendTemplateEmail("d-37733c23b2eb4c339a011dfadbd42b91", model.Email, templateData);

                return(Ok());
            }
            catch (Exception ex)
            {
                _logger.LogError(LoggingEvents.UpdateItemNotFound, ex, "An error occurred in forgot password.");
                return(BadRequest("An error occurred"));
            }
        }
Beispiel #13
0
        public async Task <IActionResult> DisableUser([FromBody] UserEmailDto userInfo)
        {
            try {
                if (userInfo == null)
                {
                    return(BadRequest());
                }

                var user = await userManager.FindByEmailAsync(userInfo.Email);

                if (user == null)
                {
                    throw new ApplicationException("Usuario no encontrado.");
                }

                user.IsEnabled = false;
                var result = await userManager.UpdateAsync(user);

                return(Ok());
            }
            catch (Exception ex) {
                return(StatusCode(StatusCodes.Status500InternalServerError, new { message = ex.Message }));
            }
        }
Beispiel #14
0
        public async Task PostForgotPasswordAsync_ReturnsBadRequest_WhenExceptionIsRaised()
        {
            // Arrange
            var mockUserManager = SharedFunctions.InitialiseMockUserManager();

            mockUserManager.Setup(repo => repo.FindByEmailAsync(It.IsAny <string>()))
            .ThrowsAsync(new InvalidOperationException());

            var controller = new AccountController(_systemClock.Object, _urlService.Object, _emailSender.Object, _logger.Object, mockUserManager.Object);

            var testModel = new UserEmailDto()
            {
            };

            // Act
            var result = await controller.PostForgotPasswordAsync(testModel);

            // Assert
            var objectResult = Assert.IsType <BadRequestObjectResult>(result);
            var expected     = "An error occurred";

            objectResult.Value.Should().BeOfType <string>();
            objectResult.Value.Should().BeEquivalentTo(expected);
        }
Beispiel #15
0
        public async Task ResendConfirmEmailMessageAsync_NotFound_WhenRepositoryReturnsNull()
        {
            // Arrange
            var mockUserManager = SharedFunctions.InitialiseMockUserManager();

            mockUserManager.Setup(repo => repo.FindByNameAsync(It.IsAny <string>()))
            .Returns(Task.FromResult <ApplicationUser>(null));

            var controller = new AccountController(_systemClock.Object, _urlService.Object, _emailSender.Object, _logger.Object, mockUserManager.Object);

            var testModel = new UserEmailDto()
            {
            };

            // Act
            var result = await controller.PostResendConfirmEmailMessageAsync(testModel);

            // Assert
            var objectResult = Assert.IsType <NotFoundObjectResult>(result);
            var expected     = "User not found";

            objectResult.Value.Should().BeOfType <string>();
            objectResult.Value.Should().BeEquivalentTo(expected);
        }
Beispiel #16
0
 public async Task <UserEmailDto> PutUserEmail(int id, UserEmailDto model)
 {
     return(await _userEmailApiClient.PutUserEmail(id, model));
 }
Beispiel #17
0
 public async Task <UserEmailDto> PostUserEmail(UserEmailDto model)
 {
     return(await _userEmailApiClient.PostUserEmail(model));
 }